H!DB2データベースに画像をアップロードしようとしています。画像サイズはJPG(6.76 kb〜6924バイト)です。
データベーステーブルには、長さ1048576のBLOBフィールドがあります。
画像を挿入するための私のコードは次のとおりです。
If fileup.PostedFile IsNot Nothing AndAlso fileup.PostedFile.FileName <> "" Then
Dim imagesize As Byte() = New Byte(fileup.PostedFile.ContentLength - 1) {}
Dim uploadedimage1 As HttpPostedFile = fileup.PostedFile
uploadedimage1.InputStream.Read(imagesize, 0, CInt(fileup.PostedFile.ContentLength))
Dim uploadedimage2 As New OleDbParameter("@Image", OleDbType.VarBinary, imagesize.Length)
uploadedimage2.Value = imagesize
Dim cmd As New OleDbCommand()
cmd.CommandText = "INSERT INTO xxx_TBL(x, IMAGE) VALUES (?, ?)"
cmd.Parameters.Add(x)
cmd.Parameters.Add(uploadedimage2)
cmd.Connection = clsDatabase.Open_DB()
Dim result As Integer = cmd.ExecuteNonQuery()
If result > 0 Then
Return True
画像がデータベースに挿入されます。
データベースからDataTableに画像を取得し、GridViewにバインドしてWebページに表示するコードは次のとおりです。
Dim cmd As New OleDbCommand()
cmd.CommandText = "SELECT x, IMAGE FROM xxx_TBL WHERE y = 1"
cmd.Connection = clsDatabase.Open_DB()
Dim dReader As OleDbDataReader
dReader = cmd.ExecuteReader(CommandBehavior.CloseConnection)
Dim dt As New DataTable
dt.Columns.Add(New DataColumn("Comments", GetType(String)))
dt.Columns.Add(New DataColumn("Picture", GetType(Bitmap)))
Do While (dReader.Read())
Dim dr As DataRow = dt.NewRow()
dr("Comments") = dReader(0).ToString
Dim imageobj = dReader(1)
Using ms As New System.IO.MemoryStream
Dim bm As Bitmap
Dim bytearray = DirectCast(imageobj, Byte())
ms.Write(bytearray, 0, bytearray.length)
bm = New Bitmap(ms)
dr("Picture") = bm
End Using
dt.Rows.Add(dr)
Loop
GridView1.DataSource = dt
GridView1.DataBind()
xはデータベースから正常に取得され、表示されます。ただし、画像が表示されません。小さな「画像がありません(白地に赤い十字)アイコン」だけです。
データベースをチェックすると、BLOBフィールドのイメージの長さは8192です。ただし、「TEST」ファイル(拡張子なし)にコピーすると、サイズは13848バイトでした。DB2が画像のバイナリを読み取ったりエンコードしたりする方法が原因である可能性があると思いますが、よくわかりません。誰かがエラーの考えられる原因を強調していただけますか?これを機能させる、またはデバッグするための提案はありますか?