Я разрабатываю приложение на 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
Вы пытались использовать 'rdr.GetValue (1)' или 'rdr.GetValues (...)', чтобы увидеть, что на самом деле возвращается? – Corey
GetBytes может использоваться только для типа изображения или varbinary (N). Пожалуйста, убедитесь, что вы используете один из этих –
@Corey Теперь я это сделал, и это пустая строка для нулевых значений в базе данных. – Igor