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上显示的网页为如下:
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读取/编码图像二值,但我不知道。 可能有人请突出错误的可能原因是什么? 进行此工作或调试任何建议?