Невозможно вставить данные во внешний ключ на SQL сервере - PullRequest
0 голосов
/ 14 марта 2020

ClassTable: **

CREATE TABLE ClassTable 
(
    className varchar(255) NOT NULL PRIMARY KEY,  
    classFee  int,
    academicYear int
);

StudentTable:

CREATE TABLE StudentTable  
(
    id int NOT NULL IDENTITY(1,1) PRIMARY KEY,
    firstName varchar(255) NOT NULL,
    lastName varchar(255),
    fatherName varchar(255),
    fatherNo varchar(255),
    motherName varchar(255),
    motherNo varchar(255),
    dob date,
    dor date,
    gender varchar(255),
    className varchar(255),
    healthInsuranceNo varchar(255),
    resAddress varchar(255),
    photo Image,

    CONSTRAINT FK_StudentTable 
        FOREIGN KEY (className) REFERENCES ClassTable(className)
);

C# код:

cmd = new SqlCommand("INSERT INTO StudentTable (firstName, lastName, fatherName, fatherNo, motherName, motherNo, dob, dor, gender, className, healthInsuranceNo, resAddress, photo) VALUES (@firstName, @lastName, @fatherName, @fatherNo, @motherName, @motherNo, @dob, @dor, @gender, @className, @healthInsuranceNo, @resAddress, @photo)", con);
con.Open();

cmd.Parameters.AddWithValue("@firstName", txt_FirstName.Text);
cmd.Parameters.AddWithValue("@lastName", txt_LastName.Text);
cmd.Parameters.AddWithValue("@fatherName", txt_FatherName.Text);
cmd.Parameters.AddWithValue("@fatherNo", txt_FatherNo.Text);
cmd.Parameters.AddWithValue("@motherName", txt_MotherName.Text);
cmd.Parameters.AddWithValue("@motherNo", txt_MotherNo.Text);
cmd.Parameters.AddWithValue("@dob", dateTimePickerDOB.Text);
cmd.Parameters.AddWithValue("@dor", dateTimePickerDOR.Text);
cmd.Parameters.AddWithValue("@gender", cmb_Gender.Text);
cmd.Parameters.AddWithValue("@className", cmb_Class.Text);
cmd.Parameters.AddWithValue("@healthInsuranceNo", txt_HealthInsurance.Text);
cmd.Parameters.AddWithValue("@resAddress", txt_Address.Text);

MemoryStream ms = new MemoryStream();
img_Box.Image.Save(ms, img_Box.Image.RawFormat);
cmd.Parameters.AddWithValue("@photo", ms.ToArray());

cmd.ExecuteNonQuery();
con.Close();
MessageBox.Show("Accountant successfully registered.");

Когда я пишу вручную запрос к SQL серверу позволяет мне вставить данные в столбец внешнего ключа (className), но когда я пытаюсь вставить из моего приложения C# Winforms, я получаю эту ошибку:

Оператор INSERT конфликтовал с ограничением FOREIGN KEY "FK_StudentTable". Конфликт произошел в базе данных «SchoolDatabase», таблице «dbo.ClassTable», столбце «className».

Я использовал этот запрос для ручного ввода записи в базу данных, и он работал:

INSERT INTO StudentTable (firstName, className) 
VALUES ('name here', 'class one');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...