Ошибка при вставке изображения в Mysql
Я использую 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 ответа
Я рекомендую вам использовать параметры. Как это
string query = @"INSERT INTO imagedatabase(IDPatient,Image,DiagnosisDoctor,DiagnosisDate) VALUES(@IDPatient,@Image,@DiagnosisDoctor,@DiagnosisDate)"
MysqlCmd.Parameters.AddWithValue("@Image", arr);
Массив не будет правильно обрабатываться при использовании конкатенации строк.
Вы должны использовать параметры запроса и передавать байтовый массив в параметр. Функции базы данных.net будут правильно обрабатывать двоичные данные. Посмотрите Параметризованный Запрос для MySQL с C# для примера.
Поиск переполнения стека или вашей любимой поисковой системы даст ряд результатов по правильным типам параметров для любого типа данных, с которым вы работаете.
Кроме того, используя конкатенацию строк для написания ваших запросов, вы создаете огромный риск внедрения SQL-кода (и если это медицинские данные, как показывает ваш код, штрафы за компрометацию таких данных в США и многих других компаниях очень высоки). дорого). Это очень, очень плохая привычка, которую лучше всего сломать как можно скорее.