Не подставляется значение в представление через windows forms
Существует таблица Заказ, имеющая следующую структуру:
CREATE TABLE [dbo].[Заказ](
[IDзаказа] [int] NOT NULL,
[IDкурьера] [int] NOT NULL,
[IDклиента] [int] NOT NULL,
[IDадресата] [int] NOT NULL,
[IDдоставки] [int] NOT NULL,
[НомерЗаказа] [int] NOT NULL,
[Вес] [float] NULL,
[МанипуляционныйЗнак] [varchar](20) NULL,
[Комментарий] [varchar](50) NULL,
[ВидДоставки] [varchar](20) NOT NULL,
[ДатаОформления] [date] NOT NULL,
[ДатаИсполнения] [date] NOT NULL
В windows forms создается форма, где данные этой таблицы представлены с неким изменением через созданное представление: ID людей заменены на их ФИО из соответствующих таблиц (пример: IDкурьера - ФИОкурьера из таблицы Курьер) ФИО выбираются из комбобоксов
Представление имеет следующую структуру:
ALTER PROCEDURE [dbo].[NewOrder]
@id_order INT OUTPUT, @id_courier INT OUTPUT, @fio_courier VARCHAR(50), @id_client INT OUTPUT, @fio_client VARCHAR(50), @id_adresat INT OUTPUT, @fio_adresat VARCHAR(50),
@id_delivery INT OUTPUT, @number INT, @weight FLOAT, @sign VARCHAR(50), @comment VARCHAR(100), @kind_delivery VARCHAR(20), @reg_date DATE, @exec_date DATE, @res INT OUTPUT
AS
BEGIN
IF NOT EXISTS (SELECT НомерЗаказа FROM Заказ WHERE НомерЗаказа = @number)
BEGIN
SET @id_order = (SELECT MAX(IDзаказа)+1 FROM Заказ)
SET @id_courier = (SELECT IDкурьера FROM Курьер WHERE ФИО = @fio_courier)
SET @id_client = (SELECT IDклиента FROM Клиент WHERE ФИО = @fio_client)
SET @id_adresat = (SELECT IDадресата FROM Адресат WHERE ФИО = @fio_adresat)
SET @id_delivery = (SELECT IDдоставки FROM Доставка WHERE ВидДоставки = @kind_delivery)
INSERT INTO Заказ VALUES (@id_order, @id_courier, @id_client, @id_adresat, @id_delivery, @number, @weight, @sign, @comment, @kind_delivery, @reg_date, @exec_date)
SET @res = 1
END
ELSE
SET @res = 0
END
Но при работе с формой, при подставлении значений, вылезает исключение "Не удалось вставить значение NULL в столбец "IDкурьера", таблицы "Chi.dbo.Заказ"; в столбце запрещены значения NULL. Ошибка в INSERT.Выполнение данной инструкции было прервано." Коллекция в sqlcommand и само подключение настроены верно (все переменные с собачкой, инпуты и аутпуты прописаны). Код C#:
myCommand.Connection = mySqlConnection;
myCommand.CommandType = System.Data.CommandType.StoredProcedure;
myCommand.Parameters["@fio_courier"].Value = comboBoxCourier.SelectedValue;
myCommand.Parameters["@fio_client"].Value = comboBoxClient.SelectedValue;
myCommand.Parameters["@fio_adresat"].Value = comboBoxAdresat.SelectedValue;
myCommand.Parameters["@weight"].Value = Convert.ToInt32(txtWeight.Text);
myCommand.Parameters["@number"].Value = Convert.ToInt32(txtNumber.Text);
myCommand.Parameters["@sign"].Value = txtSign.Text;
myCommand.Parameters["@comment"].Value = txtCom.Text;
myCommand.Parameters["@kind_delivery"].Value = comboBoxKind.SelectedValue;
myCommand.Parameters["@reg_date"].Value = dateTimePickerReg.Value;
myCommand.Parameters["@exec_date"].Value = dateTimePickerExec.Value;
mySqlConnection.Open();
myCommand.ExecuteNonQuery();
mySqlConnection.Close();
int result = (int)myCommand.Parameters["@res"].Value;
if (result == 1)
{
MessageBox.Show("Заказ успешно добавлен!");
}
if (result == 0)
{
MessageBox.Show("Что-то пошло не так... Проверьте таблицу и повторите действие, если потребуется.");
}
Почему так происходит и как решить данную проблему? уже что только не пробовала, быть может глаза не замечают чего-то простого? очень прошу, помогите
Ответы (1 шт):
Ошибка заключалась в том, что эти строки комбобоксов, а именно:
myCommand.Parameters["@id_courier"].Value = comboBoxCourier.SelectedValue;
myCommand.Parameters["@id_client"].Value = comboBoxClient.SelectedValue;
myCommand.Parameters["@id_adresat"].Value = comboBoxAdresat.SelectedValue;
возвращали не ФИО (которые в них высвечивались), а как раз нужные мне IDшники