将图像从MySQL数据库获取到PictureBox时"Parameter is not valid"出错(vb.net)



我使用DataGridView,并在鼠标上单击从数据库表"products"、列"pimg"中获取数据
我参考了这个链接https://www.sourcecodester.com/tutorials/visual-basic-net/12592/how-retrieve-image-mysql-database-using-vbnet.html
当我试图在picturebox中显示提取的图像时,它会显示错误为"参数无效">

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

在此处输入图像描述

我将DataGridViewdb的名称更改为DataGridView1,以便与我的测试程序相匹配。我把作业留到了文本框里,所以这不属于你的问题。

即使出现错误,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

相关内容

最新更新