Dapper事務操做

今天在作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

相關文章
相關標籤/搜索