0

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 ステートメントの終了後に見つかった文字。

4

1 に答える 1

1

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
     }
}

もちろん、私が言ったように、これは並行性の問題を考慮していません。

于 2012-11-30T10:14:28.727 に答える