SqlConnection.BeginTransaction(IsolationLevel.ReadUncommitted).Commit();

时间:2017-02-24 00:08:18

标签: c# sqltransaction

伙计我遇到了一些代码,我对于最近发生的事情感到困惑。

我正在努力重构代码,而不是处理一些SqlCommands而不是它当前使用的单个SqlCommand。我希望所有的SqlCommands都可以在一个事务中处理。

每个SqlCommand都是一个存储过程,所以实际上我的事务会调用一个(或多个)存储过程 - 首先关闭,甚至可能吗?

无论如何,这是代码块:

public virtual void Execute()
{
  using (SqlConnection conn = new SqlConnection(ConnectionString))
  {
    SqlCommand storedProcedure = new SqlCommand(BlahBah, conn);
    storedProcedure.CommandType = CommandType.StoredProcedure;

    conn.Open();
    **conn.BeginTransaction(IsolationLevel.ReadUncommitted).Commit();**

    storedProcedure.ExecuteNonQuery();
    conn.Close();

  }
}

特别是在Connection对象上设置Transaction的突出显示的语句,附加了“ .Commit()”。

实际的源代码没有 ROLLBACK ,也没有任何 COMMIT 。我基本上看到某种 AutoCommit ?如果例如DB不需要TRANSACTIONal处理,那么在此处使用TRANSACTION是否有意义?

对我的重构工作或许更重要的是,这样的事情是否有意义?那就是问,如果我处理了10个存储过程并且最后一个抛出错误,那么所有10个都会有自动 ROLLBACK 吗?

这是我要降落的地方:

public virtual void ExecuteTest()
{
  using (SqlConnection conn = new SqlConnection(ApplicationConfig.DbConnectInfo.ConnectionString))
  {
    var errorText = string.Empty;
      conn.Open();
      conn.BeginTransaction(IsolationLevel.ReadUncommitted).Commit();

      foreach (var storedProcedure in StoredProcedures)
      {
        storedProcedure.Connection = conn;
        storedProcedure.ExecuteNonQuery();
      }
      conn.Close();
  }
}

编辑:此MS链接表明该方法可行:

SqlConnection.BeginTransaction Method (IsolationLevel)

感谢您的关注。

0 个答案:

没有答案