Zikhona Ntinganti Ответов: 1

Как я могу...сохранить изображение в базе данных n SQL с помощью C# и SQL


У меня есть форма windows, которая получает входные данные от пользователя, а затем сохраняет данные в базе данных sql. Один из фейлов-это picturebox. Я хочу сохранить изображение в двоичном виде, а затем сохранить его вместе с другими значениями в базе данных sql. Мой код для кнопки Сохранить выглядит следующим образом:
SqlConnection cs = new SqlConnection ("Data Source=LAPTOP-QB470LUM\\SQLEXPRESS01;Initial Catalog=AssertManagement;Integrated Security=True");
SqlDataAdapter da = new SqlDataAdapter();
da.InsertCommand  = new SqlCommand ("Insert into Road_Sign values (@sign_id, @year_made, @route, @section, @date_intalled, @expiry_date, @position, @condition, @chainage_from,  @chainage_to, @picture)",cs);
            
da.InsertCommand.Parameters.Add("@sign_id", SqlDbType.Text).Value = txtSignId.Text;
da.InsertCommand.Parameters.Add("@year_made", SqlDbType.Date).Value =dtpYearMade.Value;
da.InsertCommand.Parameters.Add("@route", SqlDbType.Text).Value = txtRoute.Text;
da.InsertCommand.Parameters.Add("@section", SqlDbType.Text).Value = txtSection.Text;
da.InsertCommand.Parameters.Add("@date_intalled", SqlDbType.Date).Value = dtpDateInstalled.Value;
da.InsertCommand.Parameters.Add("@expiry_date", SqlDbType.Date).Value = dtpExpiryDate.Value;
if (radioButton1.Checked == true)
{
    da.InsertCommand.Parameters.Add("@position", SqlDbType.Text).Value = radioButton1.Checked;
}
else if (radioButton2.Checked == true)
{
    da.InsertCommand.Parameters.Add("@position", SqlDbType.Text).Value = radioButton2.Checked;
}
else
{
    da.InsertCommand.Parameters.Add("@position", SqlDbType.Text).Value = radioButton3.Checked;
}
da.InsertCommand.Parameters.Add("@condition", SqlDbType.Text).Value = txtCondition.Text;
da.InsertCommand.Parameters.Add("@chainage_from", SqlDbType.Text).Value = txtChainfrom.Text;
da.InsertCommand.Parameters.Add("@chainage_to", SqlDbType.Text).Value = txtChainTo.Text;
da.InsertCommand.Parameters.Add("@picture", SqlDbType.VarBinary).Value = DBNull.Value;
           
        
cs.Open();
da.InsertCommand.ExecuteNonQuery();
cs.Close();

btnSave.Enabled = false;

MessageBox.Show("Data Saved Successfully");

При отладке я получаю следующую ошибку: столкновение типов операндов: текст не совместим с датой.

Тип данных столбца в SQL картина является varbinary.

Есть ли ошибка в моем коде, которую я не улавливаю? Или мне нужно изменить свой подход к проекту? Пожалуйста, помогите.

Что я уже пробовал:

Когда я комментирую это da.InsertComand.ExecuteNonQuery(); он идет, чтобы отключить кнопку сохранения и отображает окно сообщения. Очевидно, что это не помогает, потому что данные не сохраняются.

Richard Deeming

(Перешел к решению)

phil.o

Я все еще удивляюсь, почему вы не представили это в качестве решения :)

Richard Deeming

Сделано. :)

1 Ответов

Рейтинг:
2

Richard Deeming

Ошибка, которую вы получаете, не имеет никакого отношения к картинке (который вы на самом деле не экономите в данный момент).

Это означает, что один из столбцов в таблице не соответствует типу данных, которые вы пытаетесь вставить в нее.

Начните с указания явного списка столбцов в инструкции insert:

INSERT INTO Road_Sign (sign_id, year_made, route, section, date_intalled, expiry_date, position, condition, chainage_from, chainage_to, picture) VALUES (@sign_id, @year_made, @route, @section, @date_intalled, @expiry_date, @position, @condition, @chainage_from, @chainage_to, @picture)

Если это все еще не работает, сравните типы столбцов в вашей таблице с типами параметров, которые вы передаете.