OLE DB中的UPSERT查询/语法(MS Access)

时间:2012-11-30 09:59:29

标签: c# sql oledb

对于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语句结束后找到的字符。

1 个答案:

答案 0 :(得分: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
     }
}

当然,正如我所说,这并没有考虑到并发性问题。