这是我的成功代码:
Private Sub dg1_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles dg1.CellContentClick
Label5.Text = dg1.Item(0, e.RowIndex).Value
Label6.Text = dg1.Item(2, e.RowIndex).Value
con.ConnectionString = "Data Source=(LocalDB)\v11.0;AttachDbFilename=C:\USERS\USER\DOWNLOADS\SDP(BACKUP1)\SDP(BACKUP)\SDP.MDF;Integrated Security=True"
con.Open()
cmd.Connection = con
cmd.CommandText = "select picture from Announcement where name = @name"
cmd.Parameters.AddWithValue("@name", dg1.CurrentRow.Cells(0).Value())
da.SelectCommand = cmd
Dim imageData As Byte() = DirectCast(cmd.ExecuteScalar(), Byte())
If Not imageData Is Nothing Then
Using ms As New MemoryStream(imageData, 0, imageData.Length)
ms.Write(imageData, 0, imageData.Length)
PictureBox2.Image = Image.FromStream(ms, True)
End Using
End If
End Sub
我成功从数据库中获取了我的照片。将paramater添加到name,然后使用@name添加参数名称。
答案 0 :(得分:1)
您根本没有加载DataGridView
的图片。您正在尝试查询数据库,但它失败了。与网格或图像无关。简单明了,你编写了错误的SQL代码。如果你要包含一个文本文字,那么它需要在它周围加上单引号。更好的是,正确地使用参数。
正如我所说,问题在于您的SQL代码:
cmd.CommandText = "select picture from Announcement where name =" & dg1.Item(0, e.RowIndex).Value & ""
您正在将name
列的值插入到该SQL代码中,以便它成为文本文字。正如我所说,文字文字需要单引号。你的单引号在哪里?你没有。这就是问题所在。如果你打算使用这样的字符串连接,你不应该这样,那么它需要看起来像这样:
cmd.CommandText = "select picture from Announcement where name = '" & dg1.Item(0, e.RowIndex).Value & "'"
如果你要正确地做,这涉及使用参数,正如我所说,那么它看起来像这样:
cmd.CommandText = "select picture from Announcement where name = @name"
cmd.Parameters.AddWithValue("@name", CStr(dg1.Item(0, e.RowIndex).Value))
或者像这样:
cmd.CommandText = "select picture from Announcement where name = @name"
cmd.Parameters.Add("@name", SqlDbType.VarChar, 50).Value = CStr(dg1.Item(0, e.RowIndex).Value)