C# GetBytes()只能在二进制或GUID列上调用
我正在用C语言开发一个带有.NET和MySQL数据库的应用程序。我需要能够在数据库内外插入和检索图像,为此,我有一个名为“Image”的LONGBLOB类型的列。插入进行得很顺利,但当我尝试检索blob时,会弹出以下错误:C# GetBytes()只能在二进制或GUID列上调用,c#,mysql,.net,blob,mysqldatareader,C#,Mysql,.net,Blob,Mysqldatareader,我正在用C语言开发一个带有.NET和MySQL数据库的应用程序。我需要能够在数据库内外插入和检索图像,为此,我有一个名为“Image”的LONGBLOB类型的列。插入进行得很顺利,但当我尝试检索blob时,会弹出以下错误: GetBytes() can only be called on binary or GUID columns 我使用以下代码从数据库中进行选择: Conn.Open(); string sql = @"SELECT `ID`
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[Image]强制转换为字节[]吗?您是否尝试过使用rdr.GetValue1或rdr.GetValues。。。要查看实际返回的内容,GetBytes只能用于Image type或varbinaryN。请确保您使用的是those@Corey现在我做到了,它是数据库中空值的和空字符串。旁注:在组合查询时,不需要所有字符串连接-前面的@使您的字符串可以是多行-您可以通过制作一个大字符串而不是一堆小字符串来更轻松地复制粘贴,而且你也不必担心每行的前导空格。唯一的缺点是你的陈述会稍微大一点,但除非你进行微优化,否则这不会有什么不同。@JoeEnos谢谢Joe,我会这么做的。我不想在查询中使用\r\n,因此连接了:它说:无法将对象og类型字符串强制转换为字节[]。那么您没有字节[],您有一个字符串。上帝只知道MySQL对这些字节字符串编码什么,所以您必须参考他们的文档来解析它