- - PR -
BLOBデータが更新できない
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2009-03-06 14:25
いつも参考にさせていただいています。
VB.NETでODP.NETを使ってORACLEにデータを保存しています。 現在VBでデータを読み込み、そのデータをフリーソフトでQRコードに変換し、 その画像データをBLOB列に更新するというプログラムを開発しております。 現在更新するところで、「パラメータ・バインディングが無効です」という エラーになってしまい、更新ができずにいます。 過去ログもみたのですが、解決策が探し出せませんでした。 解決できる方法があれば教えて頂けないでしょうか?よろしくお願いします。 コードは以下のようになっております。 -------------------------------------- 別のところでORACLEにすでに接続しています。 Public OraCnt As New OracleConnection Public OraCmd As New OracleCommand OraCnt.ConnectionString = "User ID=AAA; Password=BBB; Data Source=CCC" OraCnt.Open() OraCmd.Connection = OraCnt -------------------------------------------------------------------------------- Private Function Gen_QRCodeUpd() As Integer Dim ret As Integer ' リターンコード Dim SqlBuf As String Dim qrdata As String ' QRコードデータ Dim dtPnl As New Panel Dim btImage() As Byte Dim msWk As New MemoryStream Dim g As Graphics = pnlQRCode.CreateGraphics() Dim a As Object = Nothing ' ダイナセット SqlBuf = "" SqlBuf = SqlBuf & "SELECT WRK_QRCDAT " & vbCrLf ' QRコードデータ SqlBuf = SqlBuf & "FROM W_BITMAP " & vbCrLf ' テーブル名指定 OraCmd.AddRowid = False OraCmd.CommandText = SqlBuf a = OraCmd.ExecuteReader While a.Read ' データがあるだけループ qrdata = Com_NulCut(a(0)) ------------------------------------------------------------------- ※ここで取得したデータをQRコードに変換し、pnlQRCodeに表示している ------------------------------------------------------------------- Dim dtBmp As Bitmap dtBmp = New Bitmap(pnlQRCode.Width, pnlQRCode.Height) pnlQRCode.DrawToBitmap(dtBmp, New Rectangle(0, 0, Me.Width, Me.Height)) dtBmp.Save(msWk, System.Drawing.Imaging.ImageFormat.Bmp) ReDim btImage(msWk.Length) msWk.Position = 0 msWk.Read(btImage, 0, Convert.ToInt32(msWk.Length)) With OraPar .ParameterName = "QRCODE" .OracleDbType = OracleDbType.Blob .Direction = ParameterDirection.Input .Value = DirectCast(btImage, Byte()) End With OraCmd.Parameters.Add(OraPar) SqlBuf = "" SqlBuf = SqlBuf & " UPDATE W_BITMAP " SqlBuf = SqlBuf & " SET WRK_QRCBMP = :QRCODE " Try OraCmd.CommandText = SqlBuf OraCmd.AddRowid = True OraCmd.ExecuteNonQuery() Catch OraExp As OracleException Finally OraCmd.CommandType = CommandType.Text End Try End While a = Nothing Gen_QRCodeUpd = ret End Function --------------------------------------- ・開発環境 言語: VisualStudio.NET 2008 (VB.net) OS: WindowsXP(SP2) ・サーバー環境 OS: Windows Server 2003 Enterprise DB: Oracle 11g [ メッセージ編集済み 編集者: 未記入 編集日時 2009-03-06 15:55 ] | ||||
|
投稿日時: 2009-03-06 15:21
OraCmdにOraParの追加を行っている所が抜けている様子ですが、ソースのコピペミスでしょうか?
OraCmd.ExecuteNonQuery() の前に「OraCmd.Parameters.Add(OraPar)」してやるとどうでしょうか?
あと・・・OracleParameter がなぜか2度Newされていますが・・・ [ メッセージ編集済み 編集者: セラフ 編集日時 2009-03-06 15:23 ] | ||||
|
投稿日時: 2009-03-06 15:47
OraCmdにOraParの追加を行っている所が抜けているのは、コピペミスです。
申し訳ございません。 ------------------------------------------------------------ あと・・・OracleParameter がなぜか2度Newされていますが・・・ ------------------------------------------------------------ こちらもミスです。。。いろいろ試していて、消すのを忘れていました。 元のソースの部分を修正しました。 ご指摘ありがとうございます。 [ メッセージ編集済み 編集者: 未記入 編集日時 2009-03-06 15:57 ] | ||||
|
投稿日時: 2009-03-06 17:24
ですと・・・後は「OraCmd.AddRowid = True」が怪しいぐらいです。
AddRowid = Falseでどうなるでしょうか? | ||||
|
投稿日時: 2009-03-09 09:33
AddRowid = Falseにしても変わらず、「パラメータ・バインディングが無効です」のエラーになりました。。。
| ||||
|
投稿日時: 2009-03-09 12:50
現在提示されているソースのUpdate文をそのまま実行していますか?
ほかにパラメータを使用していませんか? OraCmd.ParametersをClearせずに使っているようですが、「W_BITMAP」テーブルには1行しかデータは無いという前提でOKですか? |
1