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)に対してコードを実行しようとしましたが、同じ結果になりました。
私がここで間違っていることについて何か考えはありますか?