今天在作dapper的事務操做的時候,遇到了好幾個坑,要麼提示連接被關閉,要麼提示須要「若是分配給命令的鏈接位於本地掛起事務中,ExecuteNonQuery 要求命令擁有事務。命令的 Transaction 屬性還沒有初始化。「html
找了一會找到一位前輩的博客,完美解決了我這幾個問題,特此標記一下。sql
一、報錯信息:
若是分配給命令的鏈接位於本地掛起事務中,ExecuteNonQuery 要求命令擁有事務。命令的 Transaction 屬性還沒有初始化。app
出現這種緣由是在執行Execute語句時,沒有把獲得的IDbTransaction傳入Execute方法中。以下代碼,在執行第二個Execute時就報上述錯誤。spa
IDbTransaction transaction = dbConnection.BeginTransaction(); dbConnection.Execute(sql1,null,transaction); dbConnection.Execute(sql2); transaction.Commit();
二、事務操做例子:
注意要加上dbConnection.Open(),由於在BeginTransaction時要求鏈接是打開的。而在不使用事務的時候,簡單的增刪改查能夠不用這一句,由於Execute方法中有Open。不然會報錯:無效操做。鏈接被關閉。code
public ActionResult Tran() { string sql1 = "insert into UserInfo values('zhao',23,'上海')"; string sql2 = "insert into Teacherinfo values('tt1',40','sdfsdfs')"; using (IDbConnection dbConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["default"].ToString())) { dbConnection.Open(); IDbTransaction transaction = dbConnection.BeginTransaction(); try { dbConnection.Execute(sql1,null,transaction); dbConnection.Execute(sql2,null,transaction); transaction.Commit(); } catch (Exception exception) { transaction.Rollback(); return Content("Fail"); } } return Content("OK"); }
原文地址:https://www.cnblogs.com/zhaoyihao/p/5341958.htmlhtm