微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 从MySQL中检索中等blob只返回13个字节

搜索了很多并尝试了各种方法,但无法解决这个问题.
我需要将图像保存到 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,(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查询中. (并且不要在这样的方法中捕获并吞没所有异常.这使得在发生故障时很难调试.)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐