Id
、Field1
およびの 3 つの列を持つテーブルを持つ SQL Server Compact Edition データベースがありますField2
。Id
ですIDENTITY(1,1) NOT NULL
。
const string SQL_INSERT = @"INSERT INTO Table(Field1, Field2) VALUES(@Param1, @Param2)";
const string SQL_SELECT_IDENTITY = @"SELECT @@IDENTITY AS ID";
SqlCeConnection cn = null;
SqlCeTransaction tr = null;
SqlCeCommand cm = null;
try
{
cn = Utility.GetConnection();
cn.Open();
tr = cn.BeginTransaction();
cm = new SqlCeCommand(SQL_INSERT, cn);
cm.Transaction = tr;
cm.Parameters.AddWithValue("@Param1", data.Data1);
cm.Parameters.AddWithValue("@Param2", (int)data.Data2);
cm.ExecuteNonQuery();
cm = new SqlCeCommand(SQL_SELECT_IDENTITY, cn);
object o = cm.ExecuteScalar();
data.Id = Convert.ToInt32(o);
// other operations
}
問題は、それcm.ExecuteScalar()
が null を返すことです。トランザクションを削除すると、クエリは適切な値を返します。SQL Server CE ではサポートされていないため、単に使用するSCOPE_IDENTITY()
と失敗します。
挿入された ID 値を取得するにはどうすればよいですか? この問題を解決するための回避策はありますか?