厳密に型指定されたデータセット (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 関数を使用する方法があるかどうかは誰にもわかりませんか? 挿入直後に新しいデータを選択する挿入コマンドを生成するのに、そのデータを取得できないのは奇妙に思えます!
ありがとう、エド