0

厳密に型指定されたデータセット (XSD で実行される MSDataSetGenerator) を使用して、作業中のプロジェクトで DB アクセスの一部を実行していますが、少し問題が発生しました。

テーブルの主キーとして ID 列を使用しているため、Insert() メソッドを呼び出すときに、新しく生成された ID を返したいと考えています。ただし、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());

代わりに次のことを行うことで、明らかに ID を返すために使用できます。

public int Insert(...stuff...)
{
    // Sets up the command..

    return (int)this.InsertCommand.ExecuteScalar();
}

MSDataSetGenerator で ExecuteNonQuery() ではなく ExecuteScalar 関数を使用する方法があるかどうかは誰にもわかりませんか? 挿入直後に新しいデータを選択する挿入コマンドを生成するのに、そのデータを取得できないのは奇妙に思えます!

ありがとう、エド

4

1 に答える 1

1

クエリのプロパティで、ExecuteMode が Scalar か NonQuery かを確認します。

于 2011-08-12T03:55:39.427 に答える