Member 13554627 Ответов: 2

Как я могу заполнить свои внешние ключи?


'Cannot insert the value NULL into column 'GroepID', table 'C:\USERS\ALAINDEVRIJ\SOURCE\REPOS\KILLER APP FUN 12\BOWLINGSCORE\BIN\DEBUG\DATABASE1.MDF.dbo.Reservering'; column does not allow nulls. INSERT fails.
The statement has been terminated.'



я не знаю, какое значение я должен дать, потому что я хочу вставить это.
SqlConnection data = new SqlConnection(connectionstring);
           data.Open();
          SqlCommand cmd = new SqlCommand("INSERT INTO Reservering(Banen,Tijdsduur,Datum,GroepID) VALUES (@Tijdsduur,@Banen, @Datum,@GroepID)", data);
           cmd.Parameters.AddWithValue("@Tijdsduur", numtijd.Value);
           cmd.Parameters.AddWithValue("@Banen", numaantbn.Value);
           cmd.Parameters.AddWithValue("@Datum", SqlDbType.Date).Value= dateTimePicker1.Value.Date;
           cmd.Parameters.AddWithValue("@GroepID", )
           cmd.ExecuteScalar();

данных.рядом();

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

это мой стол.:
Создайте таблицу [dbo].[Резервирование] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[GroepID] INT NOT NULL,
[Datum] дата не нулевая,
[Tijdsduur] INT NOT NULL,
[Banen] INT NOT NULL,
Кластеризованный первичный ключ ([Id] ASC),
Ограничение ReserveringFK внешний ключ ([GroepID]) ссылки [dbo].[Groep] ([Id])

an0ther1

Где вы должны получить значение для вашего идентификатора группы?
Если вы вставляете дочернюю запись (например, вы составляете маршрут (групповую таблицу), а таблица резервирования-это строка), вы вставляете свою родительскую запись и извлекаете идентификатор записи, а затем вставляете дочернюю запись.
Взгляните на следующую ссылку; https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/retrieving-identity-or-autonumber-values
Если идентификатор группы выбран пользователем (обычно через раскрывающийся список), то передайте это значение

с уважением

2 Ответов

Рейтинг:
2

RickZeeland

В линии:

cmd.Parameters.AddWithValue("@GroepID", )
вы должны передать значение, которое существует в таблице Компании Groep, если вы не знаете значения во время вставки, вы можете передать значение по умолчанию, например 0, которое, как вы знаете, всегда существует в Компании Groep.

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


Рейтинг:
1

Dave Kreskowiak

Ну, у вас должен быть идентификатор записи связанной таблицы. Я понятия не имею, что означают те имена, которые вы используете, поэтому мне придется пойти с общим описанием.

У вас есть две таблицы с отношением 1 ко многим. Родительская таблица и дочерняя таблица, мы будем называть их Master и Detail. В главной таблице есть столбец masterid. Это первичный ключ для главной таблицы и содержит уникальное, автоматически генерируемое значение для каждой записи в таблице. Остальные колонки не имеют значения.

В таблице сведений также есть столбец для первичного ключа, называемый DetailId. Опять же, это автоматически генерируемое значение, которое уникально идентифицирует каждую запись в таблице. Теперь, чтобы связь работала там, где каждая группа записей принадлежит записи главной таблицы, необходим второй столбец. Это столбец внешнего ключа, содержащий значение MasterId записи, к которой принадлежит подробная запись. Этот столбец не может быть нулевым, поскольку каждая детальная запись должна быть связана с основной записью, никаких исключений!

Итак, в этом примере, чтобы это сработало, вы должны создать запись главной таблицы, получить ее значение MasterId обратно из базы данных, а затем использовать это значение в столбце внешнего ключа при вставке связанных записей в детальную таблицу. Вы не можете сделать вставку без него, потому что значение не может быть нулевым.

Итак, в вашем коде, откуда должен быть взят этот GroepId?