SQL Serverの場合、これを行うことができました
UPDATE [Table] SET b=2, c=3 WHERE a=1;
IF @@ROWCOUNT=0
INSERT INTO [Table] (a,b,c) VALUES (1,2,3)
MS Access (OleDbConnection を使用) で同様のことを行うにはどうすればよいですか?
私が得たことをする
SQL ステートメントの終了後に見つかった文字。
Jet/ACE OleDB エンジンには、この種の問題に対する T-SQL 構文と同等のものはないと思います。
レコードが存在するかどうかを確認する長いルートをたどってから、INSERT または UPDATE を決定する必要があります。
ただし、Access は主に単一/ローカル ユーザー データベース システムであるため、次の疑似コードのような処理を行う際に多くの問題は発生しないはずです。
using(OleDbConnection cn = new OleDbConnection(constring))
{
cn.Open();
using(OleDbCommand cmd = new OleDbCommand("select count(*) from table where pkID = ?", cn);
{
cmd.Parameters.AddWithValue("pk", myID);
int result = Convert.ToInt32(cmd.ExecuteScalar());
if(result == 0)
// do your insert command here
else
// do your update command here
}
}
もちろん、私が言ったように、これは並行性の問題を考慮していません。