首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用SqlTransaction时出错

使用SqlTransaction时出错
EN

Stack Overflow用户
提问于 2014-04-30 14:47:02
回答 1查看 988关注 0票数 1

我在ASP.NET中使用事务有问题

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

这个SqlTransaction已经完成;它不再可用了。

我到处查看(包括堆栈溢出)如何解决这个问题,但是任何事情都有效。

我正在尝试将记录插入到db (我使用的是Server)。见以下代码:

代码语言:javascript
复制
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;

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

财产:

代码语言:javascript
复制
private SqlTransaction mSqlTransaction = null;

public SqlTransaction SqlTransaction
{
    get { return mSqlTransaction; }
}

方法:

代码语言:javascript
复制
public void BeginTransaction()
{
    mSqlTransaction = mConnection.BeginTransaction(IsolationLevel.Serializable);
}

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

public void Rollback()
{
    mSqlTransaction.Rollback();
}

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

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

编辑:

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

EDIT2:

它能和命令有关吗?就像只有一个更新,所以它是自动的,或类似的东西?

EN

回答 1

Stack Overflow用户

发布于 2014-04-30 14:55:10

代码语言:javascript
复制
public void EndTransaction()
    {
        mSqlTransaction.Commit();
        Close();
    }

为什么使用Close()它们不是方法。可能是obj.close();是它们的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23391269

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档