若是分配給命令的鏈接位於本地掛起事務中,ExecuteNonQuery 要求命令擁有事務。命令的 Transaction 屬性還沒有初始化

DbConnection dbc = database.CreateConnection();
DbTransaction dbtt = null;
try
{
dbc.Open();
dbtt = dbc.BeginTransaction();
DbCommand storedProcCommand = this.database.GetStoredProcCommand("sp_cc_Category_Create");

storedProcCommand.Connection = dbc;//肯定了command和dbc的關係,肯定關係之後要使用這個dbc開始的事務即dbtt
storedProcCommand.Transaction = dbtt;//這裏就指定了使用的事務
storedProcCommand.ExecuteNonQuery();  //這裏不要忘記或者寫錯

//假如又建立了一個command也是使用的這個連接,也要使用這個事務,還要注意執行

DbCommand storedProcCommandnew = this.database.GetStoredProcCommand("sp_cc_Category_update");

storedProcCommandnew .Connection = dbc;//同上
storedProcCommandnew .Transaction = dbtt;//同上

//storedProcCommand .ExecuteNonQuery();  //若是錯寫成上面的commond會報一樣的錯誤
storedProcCommandnew .ExecuteNonQuery();  //這裏若是是複製過來的不要寫錯哦,

dbtt.Commit();

}
catch
{
dbtt.Rollback();
}
finally
{
if (dbc.State == ConnectionState.Open)
dbc.Close();
}
相關文章
相關標籤/搜索