2016-11-14 100 views
1

我的程序有在線和離線模式。用SqlCeCommand插入後選擇SCOPE_IDENTITY

  • 在線它使用C#SqlCommand類連接到SQL Server實例。
  • 脫機它使用C#SqlCeCommand類連接到本地.SDF文件。

現在我想,當在在線模式下

GetSqlCommand("insert into my_table (col1) values (@c1); SELECT SCOPE_IDENTITY()", conn)) 

所以我插入一條記錄一個找回那種新記錄的ID與SELECT SCOPE_IDENTITY()做這工作的下面。

但是,當處於使用SQL Server CE的脫機模式時,會引發錯誤。有沒有辦法從SQL Server CE插入返回ID而無需運行單獨的查詢?

回答

1

的SQL Server CE不支持多個查詢單指令,嘗試如下

SqlCeCommand cmd = new SqlCeCommand("insert into my_table (col1) values (@c1)", conn); 
//set paremeter values 
//execute insert 
cmd.ExecuteNonQuery(); 
//now change the sql statment to take identity 
cmd.CommandText = "SELECT @@IDENTITY"; 
int id = Convert.ToInt32(cmd.ExecuteScalar()); 

https://stackoverflow.com/a/6480017/2558060

0

雖然Damith答案是正確的,是的,我們不能運行的SQL Server CE多個查詢。

我以相同的代碼爲例。

SqlCeCommand cmd = new SqlCeCommand("insert into my_table (col1) values (@c1)", conn); 
    //set paremeter values 
    //execute insert 
    cmd.ExecuteNonQuery(); 
    //now change the sql statment to take identity 
    ////////////////**CONNECTION SHOULD NOT BE CLOSED BETWEEN TWO COMMANDS**///// 
    cmd.CommandText = "SELECT @@IDENTITY"; 
    int id = Convert.ToInt32(cmd.ExecuteScalar()); 

注意:連接應該在兩個命令之間打開,否則第二個查詢將失敗。

更好的是你在Transaction中使用這段代碼。

注意:SQL Server CE對象不是線程安全的,如果跨線程共享SqlCeConnectionSqlCeTransaction的實例,則可能會導致訪問衝突異常。建議每個線程應該使用單獨的連接,不應該在多個線程之間共享。