c# – 从MySQL中检索中等blob只返回13个字节
发布时间:2020-12-16 01:54:08 所属栏目:百科 来源:网络整理
导读:我搜索了很多并尝试了各种方法,但无法解决这个问题. 我需要将图像保存到 mysql文件中. 我使用下面的代码将图像保存到数据库中. try{ string location = @"C:UserstestDownloadsPhotosbatman-greenscreen.jpg"; FileStream fs = new FileStream(location
我搜索了很多并尝试了各种方法,但无法解决这个问题.
我需要将图像保存到 mysql文件中. 我使用下面的代码将图像保存到数据库中. try { string location = @"C:UserstestDownloadsPhotosbatman-greenscreen.jpg"; FileStream fs = new FileStream(location,FileMode.Open,FileAccess.Read); UInt32 fileLength = (UInt32)fs.Length; byte[] buffer = new byte[fileLength]; fs.Read(buffer,(int)fileLength); string sqlPhotoQuery = "INSERT INTO tab_photo VALUES('" + photo.PhotoId + "','" + photo.ProjectID + "','" + photo.Day + "','" + photo.Barcode + "','" + photo.Photoname + "','" + photo.PhotoXml + "','" + buffer + "','" + fileLength + "')"; int result = MySqlHelper.ExecuteNonQuery(connectionString,sqlPhotoQuery); if (result > 0) return true; else return false; } catch (Exception e) { return false; } 在此文件中图像长度为12428, 我试图从数据库中检索数据: Photo photo = new Photo(); try { string sqlQuery = "SELECT * FROM tab_photo where PhotoId='"+photoId+"'"; MySqlDataReader rdr = MySqlHelper.ExecuteReader(connectionString,sqlQuery); while (rdr.Read()) { photo.PhotoId = rdr.GetString("PhotoId"); photo.ProjectID = rdr.GetString("ProjectID"); photo.Day = rdr.GetInt32("Day"); photo.Barcode = rdr.GetString("Barcode"); photo.Photoname = rdr.GetString("Photoname"); photo.PhotoXml = rdr.GetString("PhotoXml"); MemoryStream ms; UInt32 FileSize; Bitmap outImage; int fileSize = rdr.GetInt32(rdr.GetOrdinal("PhotoSize")); byte[] rawData = new byte[fileSize]; rdr.GetBytes(rdr.GetOrdinal("Photo"),rawData,(Int32)fileSize); photo.imageByte = rawData; } } catch (Exception e) {} 但是当我检索文件时,它只检索前13个字节.之后,它的值为零,并且检索值存在差异. 我遵循了Handling BLOB Data With Connector/Net中提到的说明. 根据我已经改变我的设置如下: 这是数据保存在数据库中的方式 我无法获得正确值的原因是什么?在数据保存或数据检索或数据库配置方面有任何问题吗? 解决方法
您无法在数据库中拥有正确的数据.通过将缓冲区连接到查询字符串中,“System.Byte []”将被插入到数据库中,因为insert语句基本上看起来像
INSERT INTO tab_photo VALUES(...,'System.Byte[]',...)"; 像在示例中一样使用参数化查询,你应该很好. 不要只是将某些字符串连接到SQL查询中. (并且不要在这样的方法中捕获并吞没所有异常.这使得在发生故障时很难调试.) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |