我在ASP.NET中使用事务有问题
每次我使用下面的代码时,我都会得到异常:
这个SqlTransaction已经完成;它不再可用了。
我到处查看(包括堆栈溢出)如何解决这个问题,但是任何事情都有效。
我正在尝试将记录插入到db (我使用的是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();
}我尝试在Server上设置IMPLICIT_TRANSACTIONS,重写代码(使用,不使用数据库方法和其他东西,但我看不出哪里有问题)。
每当我试图使用该命令时,都会引发此异常。
编辑:
变量"rows“在执行后等于1,因此正确地插入了记录,但就在它之后,程序将在"Commit”处抛出一个异常,因此它将捕获语句,在这里调用rollback方法时再次抛出异常。在此崩溃后,数据库将被回滚,没有任何更改。
EDIT2:
它能和命令有关吗?就像只有一个更新,所以它是自动的,或类似的东西?
发布于 2014-04-30 14:55:10
public void EndTransaction()
{
mSqlTransaction.Commit();
Close();
}为什么使用Close()它们不是方法。可能是obj.close();是它们的。
https://stackoverflow.com/questions/23391269
复制相似问题