我使用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());
}
}
答案 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注入风险(如果这是您的代码所示的医疗数据,那么对此类进行妥协的罚款美国和许多其他公司的数据非常昂贵)。这是一个非常非常坏的习惯,最好尽快打破。