2012-11-30 62 views
0

對於SQL Server,我能做到這一點UPSERT查詢/語法OLE DB(MS接入)

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語句的結束後發現

人物。

+0

沒辦法,看看這個問題http://stackoverflow.com/questions/6199417/upserting-in-ms-access – Steve

回答

1

我不認爲Jet/ACE OleDB引擎有這種問題的T-SQL語法的等價物。

如果記錄存在,您應該檢查長路徑,然後決定是INSERT還是UPDATE。
然而,作爲訪問主要是單/本地用戶數據庫系統,你應該不會有很多問題做這樣的僞代碼:

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

當然,正如我剛纔所說,這並沒有考慮到併發問題。