【问题标题】:Saving Byte[] Array to MYSQL将 Byte[] 数组保存到 MYSQL
【发布时间】:2020-03-20 02:35:28
【问题描述】:

可能在这里回答: storing image to byte[] into Mysql using asp.net and c#

using System.Drawing;
using System.Drawing.Imaging;

var imageBytes = imageToByteArray(pictureBox1.Image);     

var insert = new MySqlCommand("Insert INTO itemimage set imageName = '" + imageBytes + "'", _con);

insert.ExecuteNonQuery();   


public byte[] imageToByteArray(Image imageIn)
{
    var ms = new MemoryStream();
    imageIn.Save(ms, ImageFormat.Gif);
    return ms.ToArray();
}

Table: itemimage
2 | System.Byte[]  | 13byte    

3 | System.Byte[]  | 13byte

这段代码有什么问题?谢谢。

【问题讨论】:

    标签: c# mysql arrays


    【解决方案1】:

    这段代码有什么问题?

    您正在使用字符串连接来形成 SQL。这是在字节数组上调用ToString,结果是System.Byte[]

    改为使用参数化查询,并将参数值设置为字节数组。

    类似这样的:

    var data = ImageToByteArray(pictureBox.Image);
    using (var cmd = new MySqlCommand("INSERT INTO itemimage SET imageName = @image",
                                      _con))
    {
        cmd.Parameters.Add("@image", MySqlDbType.Blob).Value = data;
        cmd.ExecuteNonQuery();
    }
    

    请注意,我有点担心这里的列名 - 它真的是图像的 name(这是列名所暗示的)还是 图像中的数据(这是您的代码所建议的)?这是两个非常不同的东西,你应该清楚哪个是哪个。

    您应该始终使用参数化查询:

    • 他们阻止SQL injection attacks
    • 它们减少了数据转换问题
    • 他们更清晰地将代码与数据分开

    【讨论】:

    • Jon 先生,你能做一个示例代码吗,对不起这里的菜鸟。感谢您的考虑。
    • 现在我得到了:(二进制/图像)。再次感谢您对示例的慷慨。现在我可以理解更多了。我希望这也可以帮助像我这样的其他人。美好的一天!
    • 是的,当然。遇到了同样的问题。相同的解决方案有效。赞成。非常感谢! :)
    猜你喜欢
    • 2017-11-29
    • 2021-05-13
    • 2010-12-31
    • 2018-07-07
    • 2013-02-13
    • 1970-01-01
    • 1970-01-01
    • 2012-09-29
    • 1970-01-01
    相关资源
    最近更新 更多