VB2008とObjectBlowser9の連動について

このQ&Aのポイント
  • VB2008とObjectBlowser9を連動させる方法について調査しています。
  • 現在、ObjectBlowser9のファンクションに、暗号化の処理を作成し、VBから接続する方法を検討しています。
  • しかし、パラメータの設定に関するエラーが発生し、解決策がわかりません。どなたかご教示いただけませんか?
回答を見る
  • ベストアンサー

VB2008とObjectBlowser9の連動について

お世話になります。 先日、こちらのサイトでTextBoxの暗号化について質問させていただいたのですが、 現在、ObjectBlowser9のファンクションに、暗号化の dbms_obfuscation_toolkit.desencrypt( input_string => orgstr, key_string => keystr, encrypted_string => encstr ); を作成し、VBからそのファンクションに接続しようと考えております。 ですが、 Using con As New OracleConnection(builder.ConnectionString) con.Open()  Using cmd As New OracleCommand With cmd .Connection = con .CommandType = CommandType.StoredProcedure .CommandText = "CON_PASS_ANGO" .Parameters.Add("keystr", OracleType.VarChar).Value = keystr .Parameters.Add("orgstr", OracleType.VarChar).Value = orgstr .Parameters.Add("encstr", OracleType.VarChar).Direction = _ ParameterDirection.ReturnValue .ExecuteNonQuery() MessageBox.Show(String.Format("{0}X{1}={2}", _    keystr, orgstr, .Parameters("encstr").Value)) End With End Using End Using と記述したところ、 .Parameters.Add("encstr", OracleType.VarChar).Direction のところで、 パラメータ 'encstr': 可変長データ型 : String のサイズが設定されていません。というエラーが出てしまいます。 エラーの意味も調べたのですがいまいち理解できず、停滞しているところです。どなたか解決策をご提示願えないでしょうか、 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • AKARI0418
  • ベストアンサー率67% (112/166)
回答No.1

.Parameters.Add("encstr", OracleType.VarChar).Direction を Dim my_string as string = "encstr" .Parameters.Add(my_string, OracleType.VarChar, my_string.length).Direction にすればよいのではないでしょうか?

関連するQ&A

  • <>&などを保存する方法をおしえてください。

    <>&などを保存する方法をおしえてください。 NameTextBox CommentTextBox 保存ボタン があり保存ボタンを押すと 下記コードが実行されるようにしました。 これで、保存はできるようになったのですが <>&などを使用するとエラーとなってしまします。 <>&を使用するにはどのようにしたらいいのでしょうか? 教えてください。 Dim strSQL As String = "INSERT INTO tableA (Name,Comment) VALUES (@Name,@Comment)" Using con As New SqlConnection(conStr) Dim command As New SqlCommand(strSQL, con) con.Open() Using cmd1 As SqlDataReader = con.CreateCommand() cmd1.CommandType = CommandType.Text Try with cmd1 .Parameters.Add("@Name", SqlDbType.NVarChar) .Parameters.Add("@Comment", SqlDbType.NVarChar) .Parameters("@Name").Value = NameTextBox .Parameters("@Comment").Value = CommentTextBox End With cmd1.CommandText = strSQL cmd1.ExecuteNonQuery() Catch er As Exception Finally con.Close() Catch ex As Exception Finally con.Close() End Try End Using End Using

  • Insertできません

    どうしてもInsertできませんどこが間違っているのか教えてください。 Dim cn As New SqlConnection("workstation id=""ユーザー名?"";packet size=4096;user id=test;data source=server名;per" & _ "sist security info=True;initial catalog=テーブル名;Password=パスワード") Dim cmd As New SqlCommand("カラム1", cn) cmd.CommandType = CommandType.StoredProcedure 'cnst.CommandText = "INSERT INTO テーブル名(カラム1, カラム2, カラム3,カラム4) " & _ '"VALUES (@カラム1, @カラム2, @カラム3,@カラム4())" Dim p1 As SqlParameter = cmd.Parameters.Add("@カラム1", SqlDbType.VarChar, 20) p1.Value = TextBox1.Text Dim p2 As SqlParameter = cmd.Parameters.Add("@カラム2", SqlDbType.VarChar, 20) p2.Value = TextBox2.Text Dim p3 As SqlParameter = cmd.Parameters.Add("@カラム3", SqlDbType.VarChar, 20) p3.Value = Dropdownlist1.DataTextField Dim p4 As SqlParameter = cmd.Parameters.Add("@カラム4", SqlDbType.VarChar, 20) p4.Value = TextBox3.Text cn.Open() cmd.ExecuteNonQuery() cn.Close() SqlDataAdapter2.Fill(DataSet21) DataGrid1.DataBind() End Sub __________________________________________ __________________________________________

  • VB.Net SqlCommand 共通に

    お世話になります。 VB.Net 駆け出しの者です。 SqlCommand を使いストアドプロシジャーを実行して戻り値を DateSet にするような関数はプログラムを作っていくと、かなり多数になるようになりました。接続文字列だったり、いろいろ同じような記述が続いているなと思っておりました。 そこで、以下のような関数を作り、この部分を使いまわせないものかと思っております。 ストアドプロシジャーの名前や、そのほか必要な部分の文字はすべて変数にして、なんとか使えないのかなと思っているのですが、問題なのは、パラメータの部分でうまくいかないのです。 パラメータの部分だけ別関数にして、なんとかねじこめないかなと思っているのですが・・・ そもそもこういうやり方が正しいのかどうかもわからないのですが、その辺りも含めご教授いただければ幸いでございます。 何卒よろしくお願いいたします。 Public Function CommonDataSet(ByVal NameStored As String, ByVal CMDPara As SqlCommand, ByVal BasicTableName As String, ByVal ErrStr As String, ByVal ErrStrCaption As String) As DataSet     Dim SQLCon As SqlConnection = New SqlConnection(CMO.GetConnectStrings())     Try       CMDPara = New SqlCommand(NameStored, SQLCon)       CMDPara.CommandType = CommandType.StoredProcedure       SQLCon.Open()       Dim custDA As SqlDataAdapter = New SqlDataAdapter       Dim custDS As DataSet = New DataSet       ’この部分で下記の関数でパラメータを設定したいのですが、うまくいきません       custDA.SelectCommand = CMDPara       custDA.Fill(custDS, BasicTableName)       CommonDataSet = custDS     Catch ex As Exception       Err.Raise(Err.Number)       MessageBox.Show(ErrStr, ErrStrCaption, MessageBoxButtons.OK, MessageBoxIcon.Warning)       CommonDataSet = Nothing     End Try     If SQLCon.State <> ConnectionState.Closed Then       SQLCon.Close()       SQLCon.Dispose()     End If End Function パラメータを設定する関数 上の関数の引数として設定したいのです  ByVal CMDPara As SqlCommand の部分のパラメータとして Private Function CommonPara(CMD As SqlCommand) As SqlCommand     CMD.Parameters.Clear()     CMD.Parameters.Add(New SqlParameter(パラメータ1の記述)     CMD.Parameters.Add(New SqlParameter(パラメータ2の記述)     CMD.Parameters.Add(New SqlParameter(パラメータ3の記述)     CommonPara = CMD End Function

  • プロシージャまたは関数の引数が多すぎますのエラー

    お世話になります。 下記のコードを実行すると プロシージャまたは関数 spTest の引数が多すぎます どこが悪いのかご教示お願いいたします。 Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim i As Integer Dim conn As New SqlConnection(connstr) Dim cmd As New SqlCommand conn.Open() cmd.Connection = conn cmd.CommandText = "Delete Table2" cmd.CommandType = CommandType.Text Debug.WriteLine(cmd.ExecuteNonQuery()) For i = 1 To 100 spTest(cmd, i) Next conn.Close() End Sub sub spTest(ByRef cmd As SqlCommand, ByVal intID As Integer) Dim param As SqlParameter With cmd .CommandType = CommandType.StoredProcedure .CommandText = "spTest" param = .Parameters.Add(New _ SqlParameter("@ID", SqlDbType.Int)) param.Value = intID .ExecuteNonQuery()    ''''' ここで2回目からエラーが発生します End With End sub

  • ストアドプロシージャの戻り値が取得できない

    ストアドプロシージャの戻り値が取得できない ストアドプロシージャ内でSelectとUpdateを行い、設定した戻り値をリターンしたいのです。 ついでにSelectとした複数行の結果の読み込みもしたいのですが。 Dim cmd As New System.Data.SqlClient.SqlCommand Dim i As Integer Dim readerA As System.Data.SqlClient.SqlDataReader cmd.CommandType = Data.CommandType.StoredProcedure cmd.CommandText = "SP名" cmd.Parameters.Add("A", System.Data.SqlDbType.Int) cmd.Parameters("A").Direction = System.Data.ParameterDirection.ReturnValue readerA = cmd.ExecuteReader() i = cmd.Parameters("A").Value if (i = 0) Then 処理 End If While readerA.Read() 処理 End While 上記でSelectした結果をreaderA("カラム名") で読みこめているのですが、戻り値Aの値が取得できていません。 ウォッチ式でcmd.Parameters("A").Valueを見るとNothingになっています。 ちなみに、違うストアドを実行しているところでは戻り値は取得できています。。。 ストアドがおかしいんでしょうか。Selectの取得結果も見ようとしているのがまずいのでしょうか。 環境はvb.net、SQLServer2005です。

  • VB2010からPROCEDUREを実行でエラー

    VB2010を使っています。 Oracleのプロシージャを呼び出しするのですが、 以下のエラーが出て困っています。 ORA-06550:行1、列7: PLS-00801:内部エラー[22503] ORA-06550:行1、列7: PL/SQL:Statement ignored 実際のPG Public Function ORA_EXECUTE(ByVal strSQL As String) As Boolean ' データ格納領域の初期化 Dim v_return_flg As Boolean Dim Ora_Cnn_bk As OracleConnection Dim Ora_Cmd_bk As OracleCommand ' Oracle接続情報の初期化 Ora_Cnn_bk = New OracleConnection Ora_Cmd_bk = New OracleCommand ' Oracleへのコネクションの確立 Ora_Cnn_bk.ConnectionString = "User Id=(ユーザ名); Password=(パスワード); Data Source=(接続文字列)" & "; Pooling=false" Ora_Cnn_bk.Open() v_return_flg = False Try Dim oTYPE_CHAR As OracleDbType = OracleDbType.Char Dim oPARM_OUTPUT = ParameterDirection.Output 'バインド変数のセット Ora_Cmd_bk.Parameters.Add("AAA", oTYPE_CHAR) Ora_Cmd_bk.Parameters("AAA").Value = " " Ora_Cmd_bk.Parameters("AAA").Direction = oPARM_OUTPUT Ora_Cmd_bk.Parameters("AAA").OracleDbType = oTYPE_CHAR 'ストアドプロシージャ実行 Ora_Cmd_bk.CommandType = CommandType.StoredProcedure Ora_Cmd_bk.CommandText = strSQL Ora_Cmd_bk.Connection = Ora_Cnn_bk Ora_Cmd_bk.ExecuteNonQuery() Catch ex As Exception MessageBox.Show("SQL(" + strSQL + ")" + Chr(13) + ex.Message, "確認", MessageBoxButtons.OK) Finally ' コネクションを閉じる Ora_Cnn_bk.Close() ' Oracle接続情報のクリア Ora_Cnn_bk = Nothing Ora_Cmd_bk = Nothing End Try ' データ返却 Return v_return_flg End Function Oracle側のプロシージャは、別PGで使用していて C++からアクセスし使える状態です。 お分かりになる方教えてください。 m(_ _)m

  • VBからストアドプロシジャを実行

    VBからストアドプロシジャを実行すると、下記のエラーが発生します。 型 'System.InvalidOperationException' の初回例外が Oracle.DataAccess.dll で発生しました オブジェクトの現在の状態に問題があるため、操作は有効ではありません。 テーブルとプロシジャはシステムユーザの管理下にあり、一般ユーザで接続しています。直接SQLを実行すると正しく動作しています。以下にコードを示しますが、どこに問題があるのでしょうか。システムユーザの管理下にある事より直接SQLを実行した時と同じ様に「system.xxx」としても結果は変わりませんでした。あと、一般ユーザにはconnectとselectの権限のみ与えています。 ■VB側のコード 'オブジェクト Dim oraCmd As New OracleCommand 'PL/SQLパラメタ Dim oraPrm1 As OracleParameter Dim oraPrm2 As OracleParameter ' 実行タイプ(PL/SQLとして実行) oraCmd.CommandType = CommandType.StoredProcedure ' プロシージャ名 oraCmd.CommandText = "GETNAME" ' パラメータクリア oraCmd.Parameters.Clear() ' 1つ目のパラメータ( IN なのでデータセット ) oraPrm1 = oraCmd.Parameters.Add("PM_STRING", OracleDbType.Varchar2) oraPrm1.Value = "2001" oraPrm1.Direction = ParameterDirection.Input ' 2つ目のパラメータ( OUT なので、Direction プロパティにセット ) oraPrm2 = oraCmd.Parameters.Add("PM_NUMBER", OracleDbType.Int16) oraPrm2.Direction = ParameterDirection.Output Try ' 結果を受け取り、後で処理する oraCmd.ExecuteNonQuery() Catch ex As Exception conn.Close() Console.WriteLine(ex.Message) Return End Try Console.WriteLine(oraPrm2.Value.GetType()) ■ストアドプロシジャ CREATE OR REPLACE PROCEDURE GETNAME (IN1 IN NUMBER, OUT1 OUT VARCHAR2) AS BEGIN select NAME INTO OUT1 from TEST where CODE = IN1; END GETNAME;

  • VB.NET、mdbに新しいデータを追加したい

    超初心者で申し訳ありません。下のプログラムにおいてオペレータ名が一致する場合には 更新(UPDATE)する。一致するデータが無い場合には新規登録を行いたいのですが どのように書いたらいいのかさっぱりでNETを相当探したのですが回答が見つかりません。 お手数ですがどなたか助けていただけませんでしょうか。なお、一致する場合には 更新(UPDATE)は動作するようになりました。 VBを始めて2ケ月になります。Microsoftの文献を見ても難しくてまだ理解できるレベルに達していません。どなたか、よろしくお願い致します。 「データ構造」 ID          integer オペレータ名   string ランク       integer パスワード    string 補足       string Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click '■■■■■■■■■■■■■■■■■■■■■■■■ '■■■   オペレータの新規/更新登録   ■■■  '■■■■■■■■■■■■■■■■■■■■■■■■ '----------------------------------------------------------- 'コネクションを作成 Dim CurrentDir As String = System.IO.Directory.GetCurrentDirectory() Dim cn As New OleDbConnection( _ "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & CurrentDir & "\operator.mdb" '**************** コマンドを作成 **************** Dim OPE As String Dim PWORD As String Dim HOSOKU As String Dim RANK As Integer OPE = オペレータ名.Text RANK = ランク.Text HOSOKU = 補足.Text PWORD = パスワード.Text Dim cmd As New OleDbCommand( "UPDATE table1 " & "SET ランク = ? " & "," & "パスワード = ? " & "," & "補足 = ? " & " WHERE オペレータ名 = ? ", cn) '************** パラメータを作成 **************** cmd.Parameters.Add("ランク", OleDbType.Integer).Value = RANK cmd.Parameters.Add("パスワード", OleDbType.Char).Value = PWORD cmd.Parameters.Add("補足", OleDbType.Char).Value = HOSOKU cmd.Parameters.Add("オペレータ名", OleDbType.Char).Value = OPE '実行 cn.Open() cmd.ExecuteNonQuery() '-------------------------- Dim COUNTC As Integer COUNTC = cmd.ExecuteNonQuery()   '************************************ elseの中に簡単に記載すのって難???*** If COUNTC > 0 Then MessageBox.Show("更新 完了")     Else 'INSERTの手順       ’★ ここにmdbの中に 項目値 OPE、RANK、HOSOKU、PWORDを挿入(追加)        する命令を入れたい。   '実行 cmd.ExecuteNonQuery() End If ’********************************** '-------------------------- cn.Close() End Sub

  • .NET .ADO でのSQL文でEXCELファイルのUPDATEで時刻の列に文字があると時刻が正しく入力されません。

    文字が含まれない列の時刻は正しく更新されるのですが、文字が含まれる列は通常は右寄せのはずが左寄せになってしまい、表示形式は「h:mm」なのですがセルを選択すると上のバー?に出るはずの秒が出ません・・・書式設定は一応、時刻になっているのですが・・・たぶん文字列になってしまっているような感じです。 EXCELファイルの形式は下記のようになっています。書式設定は、A列はすべて日付、BとC列はすべて時刻になっています。問題の「休」のセルも時刻のままです。 ........A.........B........C..... 1......日付......出勤.....退勤 2....2010/1/1....7:54....18:24 3....2010/1/2....休........ 4....2010/1/3....7:48....18:28 5....2010/1/4....7:56....18:33 日付と退勤の列はうまく更新できるのですが、B列の出勤列に「休」と書かれている行があるとB列の更新がうまくいきません。 ソースは、下記のようになっています。 con.ConnectionString = _ "Provider=Microsoft.ACE.OLEDB.12.0; " & _ "Data Source=" & _ "C:\DATE\タイムカード.xls;" & _ "Extended Properties=""Excel 12.0;HDR=YES;""" Dim cmd As New OleDbCommand() cmd.Connection = con con.Open() cmd.CommandText = "UPDATE [Sheet1$] SET 日付 = @hiduke, 出勤 = @jikoku, 退勤 = @nijikoku WHERE 日付 = 40203" cmd.Parameters.Add("@hiduke", OleDbType.Variant).SourceColumn = "日付" cmd.Parameters("@hiduke").Value = Format(DateValue("2010/1/21"), "yyyy/MM/dd") cmd.Parameters.Add("@jikoku", OleDbType.Variant).SourceColumn = "出勤" cmd.Parameters("@jikoku").Value = Format(TimeValue("2:40"), "H:mm") cmd.Parameters.Add("@nijikoku", OleDbType.VarChar).SourceColumn = "退勤" cmd.Parameters("@nijikoku").Value = Format(TimeValue("15:2"), "H:mm") cmd.ExecuteNonQuery() .NET自体初めてなのでおかしなところもあると思いますが、色々試しても結局どうにもならず現在は上記のような状態です。 上記の出勤と退勤のOleDbTypeが違いますが色々試しましたがすべてダメでした・・・ 試したのは下記になります Variant VarChar VarChar, 255 Char DBTime どのようにすればうまくいくでしょうか?

  • VB2010 SQLのUPDATE文エラー

    VB2010とAccess2007で使用しています データを日付順に連番を付けるコードを作成したのですが『UPDATE文構文エラーです』等のエラーが発生します? ご教授お願いします。 Private Sub Button連番_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button連番.Click Dim DT As New DataTable Try Using OleCn As New OleDbConnection(mdbPath) Dim SQL As String = "" SQL = "SELECT * FROM tableA ORDER BY 依頼日" Using DA As System.Data.OleDb.OleDbDataAdapter = _ New System.Data.OleDb.OleDbDataAdapter(SQL, OleCn) DT.Clear() DA.Fill(DT) End Using End Using Using OleCn As New OleDbConnection(mdbPath) Dim SQL As String = "" SQL = "UPDATE tableA SET No = @no WHERE 登録ID_Export = @登録ID" Dim OleCmd As New OleDbCommand(SQL) OleCmd.Connection = OleCn OleCn.Open() OleCmd.Parameters.Add("@no", OleDbType.Integer) OleCmd.Parameters.Add("@登録ID", OleDbType.Integer) For i As Integer = 1 To DT.Rows.Count OleCmd.Parameters("@no").Value = i OleCmd.Parameters("@登録ID").Value = CInt(DT.Rows(i)("登録ID_Export").ToString) OleCmd.ExecuteNonQuery() Next i OleCmd.Dispose() OleCn.Dispose() End Using Catch ex As Exception MessageBox.Show(ex.ToString, "例外発生") Exit Sub End Try MsgBox("ok") End Sub