将图像插入Mysql时出错

时间:2017-07-26 03:03:14

标签: c# mysql image insert insert-image

我使用C#将图像插入Mysql数据库。字节数组的长度是51115.但是,当我在数据库中检查时,字段IMage(Long Blob)的长度仅为13个字节。这有什么不对?请帮帮我!

private void saveBtn_Click(object sender, EventArgs e)
{
    try
    {
        Image img = imgBox.Image;
        byte[] arr;
        ImageConverter converter = new ImageConverter();
        arr = (byte[])converter.ConvertTo(img, typeof(byte[]));
        MessageBox.Show(arr.Length.ToString()); // 51115
        string connectionString = "server=localhost;user id=root;password=xrayadmin;database=xraydatabase";
        string query = "INSERT INTO imagedatabase(IDPatient,Image,DiagnosisDoctor,DiagnosisDate) VALUES('" + Convert.ToInt32(labPatID.Text) + "','" +
            arr + "','" + labDocUser.Text + "','" + DateTime.Now.ToString("dd / MM / yyyy") + "')";
        MySqlConnection MysqlConnection = new MySqlConnection(connectionString);
        MySqlCommand MysqlCmd = new MySqlCommand(query, MysqlConnection);
        MySqlDataReader DataReader;
        MysqlConnection.Open();
        DataReader = MysqlCmd.ExecuteReader();
        MessageBox.Show("Save Data");
        while (DataReader.Read())
        {

        }
        MysqlConnection.Close();
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.ToString());
    }

}

2 个答案:

答案 0 :(得分:2)

我建议你使用参数。喜欢这个

string query = @"INSERT INTO imagedatabase(IDPatient,Image,DiagnosisDoctor,DiagnosisDate) VALUES(@IDPatient,@Image,@DiagnosisDoctor,@DiagnosisDate)"
MysqlCmd.Parameters.AddWithValue("@Image", arr);

答案 1 :(得分:2)

使用字符串连接时,将无法正确处理数组。

您需要使用查询参数并将字节数组传递给参数。 .net数据库函数将为您正确处理二进制数据。有关示例,请参阅Parameterized Query for MySQL with C#

搜索堆栈溢出或您最喜欢的搜索引擎,无论您使用哪种数据类型,都会在正确的参数类型上产生大量结果。

顺便说一句,通过使用字符串连接来编写查询,您正在创建巨大的 SQL注入风险(如果这是您的代码所示的医疗数据,那么对此类进行妥协的罚款美国和许多其他公司的数据非常昂贵)。这是一个非常非常坏的习惯,最好尽快打破。