使用SqlTransaction时出错

本文关键字:出错 SqlTransaction 使用 | 更新日期: 2023-09-27 18:01:02

我在ASP.NET 中使用事务时遇到问题

每次我使用下面的代码时,我都会得到异常:

此SqlTransaction已完成;它不再可用。

我到处寻找(包括堆栈溢出(如何解决这个问题,但任何方法都有效。

我正在尝试将一条记录插入数据库(我使用的是SQL Server(。请参阅下面的代码:

Database db = new Database();
db.Connect();
SqlCommand command = new SqlCommand(SQL_UPDATE_ADRESA, db.Connection);
command.Parameters.Add(new SqlParameter("@pPersonID", SqlDbType.Int)).Value = personID;
command.Parameters.Add(new SqlParameter("@pStreet", SqlDbType.VarChar, 30)).Value = street;
command.Parameters.Add(new SqlParameter("@pCity", SqlDbType.VarChar, 30)).Value = city;
db.BeginTransaction();
command.Transaction = db.SqlTransaction;
int rows = 0;
try
{
    rows = db.ExecuteNonQuery(command);
    db.EndTransaction();
}
catch 
{
    rows = -1;
    db.Rollback();
}
db.Close();
return rows;

在类"数据库"中调用的方法和属性是:

属性:

private SqlTransaction mSqlTransaction = null;
public SqlTransaction SqlTransaction
{
    get { return mSqlTransaction; }
}

方法:

public void BeginTransaction()
{
    mSqlTransaction = mConnection.BeginTransaction(IsolationLevel.Serializable);
}
public void EndTransaction()
{
    mSqlTransaction.Commit();
    Close();
}
public void Rollback()
{
    mSqlTransaction.Rollback();
}

我尝试在SQL Server上设置IMPLICIT_TRANSACTIONS ON,重写代码(使用,不使用数据库方法和其他东西,但我看不出哪里有问题(。

每当我尝试使用该命令时,都会引发此异常。

编辑:

变量"rows"在执行后等于1,所以记录被正确插入,但就在它之后,程序在"Commit"处抛出异常,所以它将捕获语句,在这里,它在调用回滚方法时再次抛出异常。在这次崩溃之后,数据库被回滚,并且没有任何更改。

第2版:

它可能与命令有关吗?就像只有一个更新,所以它是自动提交的,还是类似的?

使用SqlTransaction时出错

public void EndTransaction()
    {
        mSqlTransaction.Commit();
        Close();
    }

为什么要使用Close((their is no方法。可能是obj.close((;是他们的。