- PR -

BLOBデータが更新できない

1
投稿者投稿内容
未記入
会議室デビュー日: 2005/02/03
投稿数: 3
投稿日時: 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 ]
セラフ
ベテラン
会議室デビュー日: 2005/12/01
投稿数: 95
お住まい・勤務地: 東北の顔の形といえば
投稿日時: 2009-03-06 15:21
OraCmdにOraParの追加を行っている所が抜けている様子ですが、ソースのコピペミスでしょうか?

OraCmd.ExecuteNonQuery() の前に「OraCmd.Parameters.Add(OraPar)」してやるとどうでしょうか?
引用:

Dim OraPar As New OracleParameter

OraPar = New OracleParameter



あと・・・OracleParameter がなぜか2度Newされていますが・・・

[ メッセージ編集済み 編集者: セラフ 編集日時 2009-03-06 15:23 ]
未記入
会議室デビュー日: 2005/02/03
投稿数: 3
投稿日時: 2009-03-06 15:47
OraCmdにOraParの追加を行っている所が抜けているのは、コピペミスです。
申し訳ございません。

------------------------------------------------------------
あと・・・OracleParameter がなぜか2度Newされていますが・・・
------------------------------------------------------------
こちらもミスです。。。いろいろ試していて、消すのを忘れていました。

元のソースの部分を修正しました。
ご指摘ありがとうございます。

[ メッセージ編集済み 編集者: 未記入 編集日時 2009-03-06 15:57 ]
セラフ
ベテラン
会議室デビュー日: 2005/12/01
投稿数: 95
お住まい・勤務地: 東北の顔の形といえば
投稿日時: 2009-03-06 17:24
ですと・・・後は「OraCmd.AddRowid = True」が怪しいぐらいです。
AddRowid = Falseでどうなるでしょうか?
未記入
会議室デビュー日: 2005/02/03
投稿数: 3
投稿日時: 2009-03-09 09:33
AddRowid = Falseにしても変わらず、「パラメータ・バインディングが無効です」のエラーになりました。。。
セラフ
ベテラン
会議室デビュー日: 2005/12/01
投稿数: 95
お住まい・勤務地: 東北の顔の形といえば
投稿日時: 2009-03-09 12:50
現在提示されているソースのUpdate文をそのまま実行していますか?
ほかにパラメータを使用していませんか?

OraCmd.ParametersをClearせずに使っているようですが、「W_BITMAP」テーブルには1行しかデータは無いという前提でOKですか?
1

スキルアップ/キャリアアップ(JOB@IT)