将Byte []数组保存到MYSQL

时间:2013-06-19 07:51:14

标签: c# mysql arrays bytearray

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

            Byte[] bt = null;
            bt = imageToByteArray(pictureBox1.Image);     

            MySqlCommand _insert = new MySqlCommand("Insert INTO itemimage set imageName = '" +bt+ "'", _con);
            _insert.ExecuteNonQuery();   


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

+++++++++++++++

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

3 | System.Byte[]  | 13byte

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

1 个答案:

答案 0 :(得分:2)

  

这段代码有什么问题?

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

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

总是使用参数化查询:

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