[英]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.