伙计我遇到了一些代码,我对于最近发生的事情感到困惑。
我正在努力重构代码,而不是处理一些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)
感谢您的关注。