将 Byte[] 数组保存到 MYSQL

rah*_*ame 2 c# mysql arrays

可能在这里回答: 使用 asp.net 和 c# 将图像存储到 byte[] 到 Mysql 中

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();
}
Run Code Online (Sandbox Code Playgroud)
Table: itemimage
2 | System.Byte[]  | 13byte    

3 | System.Byte[]  | 13byte
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*eet 5

这段代码有什么问题?

您正在使用字符串连接来形成 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();
}
Run Code Online (Sandbox Code Playgroud)

请注意,我有点担心这里的列名称 - 它真的意味着图像的名称(这是列名称所建议的)还是图像中的数据(这是您的代码所建议的)?这是两个截然不同的事情,你应该分清楚哪个是哪个。

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

  • 它们可以防止SQL 注入攻击
  • 它们减少了数据转换问题
  • 他们更干净地将代码与数据分开