H!我試圖在DB2數據庫中上傳圖像。 圖片大小爲JPG(6.76 kb - 6924字節)。圖像上載和從DB2檢索
該數據庫表具有長度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讀取/編碼圖像二進制文件的方式,但我不確定。 有人可能請突出顯示錯誤的可能原因?有關使這項工作或調試的任何建議?
如果正在使用的SQL的「WHERE」子句具有多個參數,我該如何進行此項工作。 我的意思是,對於HttpHandler來說,SQL就像是SELECT IMAGE FROM xxx_TBL WHERE vendor = x,report = y和SEQ = 1。 圖像按供應商,每份報告存儲,按序號(SEQ)排序。 如果我遞增SEQ號。在一個循環中,我如何確定HttpHandler將返回與我正在返回的其他數據相對應的圖像,如圖片註釋。 –
是否有可能獲得在HttpHandler中生成的整個DataTable? –
爲了讓你的想法,以下是數據庫表中的列: '報告編號(唯一), 供應商編號, 圖像評論, 圖片, 圖像序列No.' 可以有每個報告多幅圖像,所以SEQ號碼。給出了與其他列標題相關的順序。它的類型爲INTEGER,從1-'n'出現,其中'n'將是數據庫中同一報表編號的行數(每個圖像一行) –