2013-03-04 1 views
1

Я разрабатываю приложение на C# с базой данных .NET и MySQL. Мне нужно иметь возможность вставлять и извлекать изображения из базы данных и из нее, и для этой цели у меня есть столбец с именем «Изображение» типа LONGBLOB. Вставка идет хорошо, но когда я пытаюсь извлечь блоб следующее сообщение об ошибке всплывает:GetBytes() можно вызывать только в бинарных или GUID столбцах

GetBytes() can only be called on binary or GUID columns 

Я использую следующий код, чтобы выбрать из базы данных:

  Conn.Open(); 
      string sql = @"SELECT `ID`, `Image`, `Note`" 
         + " FROM `Item`" 
         + " WHERE `ID` = ?ID"; 
      MySqlCommand cmd = new MySqlCommand(sql, Conn); 
      cmd.Parameters.Add(new MySqlParameter("?ID", iD)); 
      cmd.Prepare(); 
      rdr = cmd.ExecuteReader(CommandBehavior.SequentialAccess); 

      while (rdr.Read()) 
      { 
       this.ID= rdr.GetString("ID"); 
       if (!rdr.IsDBNull(1)) 
       { 
        long len = rdr.GetBytes(1, 0, null, 0, 0); 
        byte[] ImageBytes = new byte[len]; 
        rdr.GetBytes(1, 0, ImageBytes, 0, (int)len); 
        MemoryStream ms = new MemoryStream(ImageBytes); 
        this.Image = Image.FromStream(ms); 
       } 
       this.Note = rdr.GetString("Note"); 

Несмотря на изменения столбца типа в binary и varbinary, у меня по-прежнему такая же ошибка.

Кто-нибудь знает, что я здесь делаю неправильно? TIA

+0

Вы пытались использовать 'rdr.GetValue (1)' или 'rdr.GetValues ​​(...)', чтобы увидеть, что на самом деле возвращается? – Corey

+0

GetBytes может использоваться только для типа изображения или varbinary (N). Пожалуйста, убедитесь, что вы используете один из этих –

+0

@Corey Теперь я это сделал, и это пустая строка для нулевых значений в базе данных. – Igor

ответ

0

Не можете ли вы просто нарисовать rdr ["Image"] как byte []?

+0

В нем написано: 'Невозможно вставить строку типа объекта og в byte []'. – Igor

+0

Тогда у вас нет байта [] у вас есть строка. Бог знает только то, что MySQL кодирует там байтовые строки, так что вам придется ссылаться на свою документацию для ее анализа –