我使用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