MSDataSetGenerator с использованием ExecuteScalar () вместо ExecuteNonQuery () - PullRequest
0 голосов
/ 17 февраля 2011

Я использую набор данных со строгой типизацией (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 ()? Кажется странным, что она генерирует команду вставки, которая выбирает новые данные сразу после вставки, но затем не позволяет вам получить эти данные!

Спасибо, Эд

1 Ответ

1 голос
/ 12 августа 2011

Проверьте ExecuteMode, Scalar или NonQuery, в свойствах запроса.

...