Ошибка при вставке изображения в 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-кода (и если это медицинские данные, как показывает ваш код, штрафы за компрометацию таких данных в США и многих других компаниях очень высоки). дорого). Это очень, очень плохая привычка, которую лучше всего сломать как можно скорее.

Другие вопросы по тегам