2013-09-24 6 views
0

У меня есть поле под названием «Фото» в MySQL DB. Это поле является блобом. Когда я использовал SQL Server, следующий код работает:VB.NET: Извлечь изображение (blob) из MySQL DB

Dim conn As New MySqlConnection 
    conn.ConnectionString = ConnectionString 
    Dim cmd As New MySqlCommand 
    cmd.Connection = conn 
    conn.Open() 
    cmd.CommandText = "SELECT Foto FROM MyTable WHERE ID = '" & IDtxt.ToString & "'" 
    Dim reader As MySqlDataReader 

     reader = cmd.ExecuteReader 
     While reader.Read 
      If (IsDBNull(reader("Foto"))) Then 
       frmCartaIdentitaView.pctImage.Image = Nothing 
      Else 
       Dim byteImage() As Byte = reader("Foto") 
       Dim frmImageView stmFoto As New System.IO.MemoryStream(byteImage) 
       frmImageView.pctImage.Image = Image.FromStream(stmFoto) 
       frmImageView.pctImage.SizeMode = PictureBoxSizeMode.Zoom 
       frmImageView.Show() 
      End If 
     End While 

Но теперь, когда я использую MySQL, производится следующая ошибка: недопустимый параметр.

+0

Вашего поля «ID» это символ? Не числовое? – Steve

+1

Поле ID моего идентификатора - целое. – Pinturikkio

ответ

1

Если ваше поле идентификатора является целым числом, посмотрите, не прошло ли оно этой ошибки. Вместо этого:

cmd.CommandText = "SELECT Foto FROM MyTable WHERE ID = '" & IDtxt.ToString & "'" 

Попробуйте это:

cmd.CommandText = "SELECT Foto FROM MyTable WHERE ID = " & ctype(int32,IDtxt).ToString 
+0

К сожалению, это не проблема – Pinturikkio

+0

Тогда, возможно, вы могли бы опубликовать, какая строка дает вам информацию об ошибке и стеке. – Steve

+0

Проблема заключается в конкатенации, а не в том, как вы проверяете/лидируете идентификатор. Гораздо лучше использовать параметр int вместо casting для int –

0

У меня была такая же проблема. Я получил эту ошибку, когда столбец BLOB был пуст, то я решил так: Извините, но я нашел этот пост только сейчас

Dim conn As New MySqlConnection 
conn.ConnectionString = ConnectionString 
Dim cmd As New MySqlCommand 
cmd.Connection = conn 
conn.Open() 
cmd.CommandText = "SELECT Foto, length(Foto) AS picLen FROM MyTable WHERE ID = '" & IDtxt.ToString & "'" 
Dim reader As MySqlDataReader 

    reader = cmd.ExecuteReader 
    While reader.Read 
     If (reader("picLen "))=0 Then 
      frmCartaIdentitaView.pctImage.Image = Nothing 
     Else 
      Dim byteImage() As Byte = reader("Foto") 
      Dim frmImageView stmFoto As New System.IO.MemoryStream(byteImage) 
      frmImageView.pctImage.Image = Image.FromStream(stmFoto) 
      frmImageView.pctImage.SizeMode = PictureBoxSizeMode.Zoom 
      frmImageView.Show() 
     End If 
    End While 
+0

Решен как? Как это отличается от другого исходного кода или другого ответа? Кроме того, этот код открыт для SQL-инъекции и может случайным образом завершиться, если 'ID' является целым числом. –

Смежные вопросы