3

INSERTの後に値を取得したいID列を持つテーブルがあります。パラメータを使用しない次のコードは完全に機能しています。

string query = "INSERT INTO aTable ([aColumn]) VALUES (42)";
SqlCommand command = new SqlCommand(query, connection);
command.ExecuteNonQuery();

query = "SELECT CAST(SCOPE_IDENTITY() AS bigint)";
command = new SqlCommand(query, connection);
object identity = command.ExecuteScalar();

上記のコードのINSERT部分を変更してパラメーター化されたクエリを使用すると、ExecuteScalar()突然System.DBNull値が返されます。パラメータ化されたクエリコードは次のようになります。

string query = "INSERT INTO aTable ([aColumn]) VALUES (@aColumn)";
SqlCommand command = new SqlCommand(query, connection);
command.Parameters.AddWithValue("@aColumn", 42);
command.ExecuteNonQuery();

SCOPE_IDENTITYコードを変更して、出力パラメーターを使用してを呼び出すExecuteNonQuery()ようにしましたが、outパラメーターでnull値を取得します。また、2つの異なるバージョンのSQL Server(2012と2008、どちらもExpress Edition)に対してコードを実行しようとしましたが、同じ結果になりました。

私がここで間違っていることについて何か考えはありますか?

4

1 に答える 1

6

INSERTとSELECTを1つのステートメントに組み合わせてみてください

string query = "INSERT INTO aTable ([aColumn]) VALUES (@aColumn);SELECT CAST(SCOPE_IDENTITY() AS bigint)"; 
SqlCommand command = new SqlCommand(query, connection); 
command.Parameters.AddWithValue("@aColumn", 42); 
object identity = command.ExecuteScalar(); 
于 2012-09-27T13:30:05.220 に答える