Я использую набор данных со строгой типизацией (MSDataSetGenerator, запускаемый на XSD), чтобы выполнить часть доступа к БД в проекте, над которым я работаю, и столкнулся с небольшой проблемой.
Поскольку я использую столбцы Identity в качестве первичного ключа моих таблиц, я хочу вернуть сгенерированный идентификатор при вызове метода Insert (). Однако TableAdapter создается с помощью метода вставки следующим образом:
public int Insert(...stuff...)
{
// Sets up the command..
return this.InsertCommand.ExecuteNonQuery();
}
, который возвращает количество затронутых строк (т.е. 1).
Это несмотря на тот факт, что InsertCommandText генерируется как:
INSERT INTO table VALUES (values...);
SELECT Id, ...stuff... FROM table WHERE (Id = SCOPE_IDENTITY());
Который, очевидно, может быть использован для возврата идентификатора, вместо этого сделав следующее:
public int Insert(...stuff...)
{
// Sets up the command..
return (int)this.InsertCommand.ExecuteScalar();
}
Кто-нибудь знает, есть ли способ заставить MSDataSetGenerator использовать функцию ExecuteScalar в отличие от ExecuteNonQuery ()? Кажется странным, что она генерирует команду вставки, которая выбирает новые данные сразу после вставки, но затем не позволяет вам получить эти данные!
Спасибо, Эд