Вставка автоматически сгенерированного идентификатора в столбец ForeignKey с помощью параметризованных запросов
Не знаете, как подойти к этому с помощью параметризованных запросов SQL. В настоящее время я могу вставить данные (клиент в этом сценарии) в таблицу SQL и позволить базе данных генерировать и обрабатывать идентификаторы первичного ключа, а не вставлять идентификатор вручную вместе с остальными атрибутами.
Мой вопрос: как мне вставить этот автоматически сгенерированный идентификатор в другую таблицу в соответствующий столбец внешнего ключа с помощью параметризованных запросов? Примером может служить то, что вторая таблица предназначена для бронирования и должна была получить значение идентификатора (таблица клиента) клиента, который совершил бронирование, и вставить его в столбец FK ID в таблице бронирования.
Я посмотрел на код в сети и на переполнение стека, и это не совсем то, что я ищу, поскольку они либо используют процедуры SQL в конструкторе базы данных, либо имеют дело с вставленными вручную идентификаторами.
Пример кода, который я написал:
//Insert CustomerID into TestTable
public void AddCustomerIdToForeignKeyColumnInNewTable()
{
string connectionString = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;
SqlConnection myConnection = new SqlConnection(connectionString);
String query;
query = "INSERT INTO TestTable VALUES (@CustomerID)";
SqlCommand dbCommand = new SqlCommand(query, myConnection);
dbCommand.Parameters.AddWithValue("@CustomerID", whateverIdValueGoesHere);
try
{
myConnection.Open();
dbCommand.ExecuteNonQuery();
myConnection.Close();
}
catch (Exception ex)
{
Exception e = ex;
myConnection.Close();
}
}
1 ответ
Ты можешь использовать:
Select SCOPE_IDENTITY();
Сразу после вставки заявления.
Другими словами:
query = "INSERT INTO TestTable VALUES (@CustomerID); SELECT SCOPE_IDENTITY();";
А потом:
var cid= dbCommand.ExecuteScalar();
cid будет содержать значение идентификатора клиента, сгенерированного базой данных