[英]How to retrieve image from MySQL database to PictureBox in VB.NET
[英]Getting error as “Parameter is not valid” while fetching image from MySQL database to PictureBox (vb.net)
我拿了一個 DataGridView 並在 MouseClick 上從數據庫表“產品”的“pimg”列中獲取數據。
我參考了這個鏈接https://www.sourcecodester.com/tutorials/visual-basic-net/12592/how-retrieve-image-mysql-database-using-vbnet.html
當我嘗試在圖片框中顯示獲取的圖像時,它會顯示錯誤為“參數無效”
Private Sub DataGridViewdb_MouseClick(sender As Object, e As MouseEventArgs) Handles DataGridViewdb.MouseClick
Dim connection As New MySqlConnection("datasource=localhost;port=3306;username=root;password=;database=id12302075_bdukan")
Dim da As New MySqlDataAdapter
Try
Dim i As Integer
i = DataGridViewdb.CurrentRow.Index
Me.Labelid.Text = DataGridViewdb.Item(0, i).Value
Me.TextBoxpid.Text = DataGridViewdb.Item(1, i).Value
Me.TextBoxcid.Text = DataGridViewdb.Item(2, i).Value
Me.TextBoxuid.Text = DataGridViewdb.Item(3, i).Value
Me.TextBoxpname.Text = DataGridViewdb.Item(4, i).Value
Me.TextBoxpyprice.Text = DataGridViewdb.Item(5, i).Value
Me.TextBoxpprice.Text = DataGridViewdb.Item(6, i).Value
Me.TextBoxpweight.Text = DataGridViewdb.Item(7, i).Value
Me.TextBoxpstock.Text = DataGridViewdb.Item(8, i).Value
connection.Open()
Dim cmd = New MySqlCommand("select pimg from products where id='" &
DataGridViewdb.Item(0, i).Value & "'", connection)
Dim dt As New DataTable
Dim arrImage() As Byte
da.SelectCommand = cmd
da.Fill(dt)
arrImage = dt.Rows(0).Item(0)
Dim mstream As New System.IO.MemoryStream(arrImage)
PictureBox1.Image = Image.FromStream(mstream)
Catch ex As Exception
MessageBox.Show(ex.Message)
da.Dispose()
connection.Close()
End Try
End Sub
我將DataGridView1
的名稱更改為DataGridViewdb
,以便與我的測試程序匹配。 我遺漏了對文本框的分配,例如它不是您問題的一部分。
Using...End Using
塊將負責關閉和處置您的數據庫對象,即使出現錯誤也是如此。
始終使用參數。 它有助於避免 sql 注入並使您的 sql 命令更易於編寫(無需處理單引號)。 它還有助於讓您了解潛在的類型不匹配。 我猜到了你的 id 字段的數據類型。 檢查您的數據庫並相應地調整代碼。 通過連接 sql 命令,您將傳遞一個帶有單引號的字符串。 大多數 id 字段都是整數。
由於您只檢索單行中的單列,因此可以使用.ExecuteScalar
。
Private Sub DataGridView1_MouseClick(sender As Object, e As MouseEventArgs) Handles DataGridView1.MouseClick
Dim i = DataGridView1.CurrentRow.Index
Dim b As Object
Using connection As New MySqlConnection("datasource=localhost;port=3306;username=root;password=;database=id12302075_bdukan"),
cmd As New MySqlCommand("select pimg from products where id= @id;", connection)
cmd.Parameters.Add("@id", MySqlDbType.Int32).Value = CInt(DataGridView1.Item(0, i).Value)
connection.Open()
b = cmd.ExecuteScalar
End Using
Dim arrImage = CType(b, Byte())
Dim mstream As New System.IO.MemoryStream(arrImage)
PictureBox1.Image = Image.FromStream(mstream)
End Sub
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.