相关疑难解决方法(0)

如果发生错误,using语句是否会回滚数据库事务?

我在using语句中有一个IDbTransaction,但我不确定如果在using语句中抛出异常,它是否会被回滚.我知道using语句会强制调用Dispose()......但是有人知道Rollback()是否也是如此?

更新:此外,我是否需要显式调用Commit(),如下所示,还是由using语句处理吗?

我的代码看起来像这样:

using Microsoft.Practices.EnterpriseLibrary.Data;

...

using(IDbConnection connection = DatabaseInstance.CreateConnection())
{
    connection.Open();

    using(IDbTransaction transaction = connection.BeginTransaction())
    {
       //Attempt to do stuff in the database
       //potentially throw an exception
       transaction.Commit();
    }
}
Run Code Online (Sandbox Code Playgroud)

c# transactions using-statement rollback

81
推荐指数
3
解决办法
3万
查看次数

在单个事务中发送多个SQL命令

我有一个庞大的INSERT INTO ... 字符串列表.目前我运行它们:

using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();
    foreach (var commandString in sqlCommandList)
    {
        SqlCommand command = new SqlCommand(commandString, connection);
        command.ExecuteNonQuery();
    }
}
Run Code Online (Sandbox Code Playgroud)

我看到每个ExecuteNonQuery()也执行提交.

  1. 有没有办法在单个事务中插入所有行(最后提交)?
  2. 我想要一个单一事务的原因是让我的"插入"过程更快.单笔交易是否也会更快?

.net c# sql-server

17
推荐指数
3
解决办法
5万
查看次数

SQLTransaction已完成错误

我在申请中遇到了一次错误.

这个SQLTransaction已经完成; 它不再可用

堆栈跟踪附在下面 - 它说Zombie CheckRollback.

代码中的错误是什么?

注意:此错误只出现一次.

UPDATE

MSDN - SqlTransaction.Rollback方法

如果连接终止或者事务已在服务器上回滚,则Rollback会生成InvalidOperationException.

僵尸检查交易 - 错误

我在各种应用程序中看到此错误的最常见原因之一是,在我们的应用程序中共享 SqlConnection.

public int SaveUserLogOnInfo(int empID)
{
        int? sessionID = null;
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            connection.Open();
            SqlTransaction transaction = null;
            try
            {
                transaction = connection.BeginTransaction();
                sessionID = GetSessionIDForAssociate(connection, empID, transaction);

                    //Other Code

                //Commit
                transaction.Commit();
            }
            catch
            {
                //Rollback
                if (transaction != null)
                {
                    transaction.Rollback();
                    transaction.Dispose();
                    transaction = null;
                }

                //Throw exception
                throw; …
Run Code Online (Sandbox Code Playgroud)

.net c# ado.net transactionscope

12
推荐指数
2
解决办法
2万
查看次数