我搜索了很多并尝试了各种方法,但无法解决这个问题。我需要将图像保存到 mysql 文件中。
我使用下面的代码将图像保存到数据库中。
try
{
string location = @"C:\Users\test\Downloads\Photos\batman-greenscreen.jpg";
FileStream fs = new FileStream(location, FileMode.Open, FileAccess.Read);
UInt32 fileLength = (UInt32)fs.Length;
byte[] buffer = new byte[fileLength];
fs.Read(buffer, 0, (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"), 0, rawData, 0, (Int32)fileSize);
photo.imageByte = rawData;
}
}
catch (Exception e)
{}
但是当我检索文件时,它只检索前 13 个字节。之后它的值为零并且检索值存在差异。
我已按照使用 Connector/Net 处理 BLOB 数据中提到的说明进行操作。
据此,我已将设置更改如下:
这就是数据保存在数据库中的方式
我无法获得正确值的原因是什么?数据保存或数据检索或数据库配置有什么问题吗?