Я изменил имя DataGridViewdb
на DataGridView1
, чтобы оно соответствовало моей тестовой программе. Я пропустил назначения текстовым полям, и это не является частью вашей проблемы. Блоки
Using...End Using
позаботятся о закрытии и удалении объектов вашей базы данных даже в случае ошибки.
Всегда используйте параметры. Это помогает избежать внедрения sql и облегчает написание вашей команды sql (без одинарных кавычек). Это также помогает держать вас в курсе возможных несоответствий типов. Я угадал тип данных вашего поля идентификатора. Проверьте свою базу данных и измените код соответствующим образом. С вашей объединенной командой 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