2

我在使用 SqlTransaction 时遇到问题。这是代码

SqlConnection conn = new SqlConnection(connectionString);
// assume that at this point I add try/catch and the connection is successfully opened.
conn.Open();
SqlTransaction trans = conn.BeginTransaction(IsolationLevel.RepeatableRead);

//.........
// Here I do my action with database, change it, commit, call ExecuteNonQuery, //ExecuteScalar,etc...

// And after that long processing with this transaction, I don't know why trans.Connection //is null. and therefore when I call trans.commit(), an exception was raised?


trans.commit();

有人有任何线索吗?

我认为这可能是因为数据库服务器的内存因连接过多而被占用。但我不确定。

我该如何解决这个问题?

4

4 回答 4

1

好像错字

con.BeginTransaction(IsolationLevel.RepeatableRead)

应该

conn.BeginTransaction(IsolationLevel.RepeatableRead)
于 2012-05-11T10:41:39.980 回答
1

利用使用

using (SqlConnection connection = new SqlConnection(connectionString))
    {
        connection.Open();
        Console.WriteLine("ServerVersion: {0}", connection.ServerVersion);
        Console.WriteLine("State: {0}", connection.State);
    }
于 2012-05-11T10:42:14.367 回答
0

使用using声明:

using (SqlConnection connection = new SqlConnection(connectionString))
{
//your code here
}
于 2012-05-11T10:45:18.057 回答
0

c# - 捕获事务连接后的 SqlTransaction 为空 - 代码日志

Edyn 说:遇到了类似的问题。就我而言,它发生在特定的 SqlException 上。大多数异常都会被很好地捕获和处理,但是每当我遇到转换错误(例如尝试将字符串转换为数字)时,它会自动结束事务。

在我的解决方案中,如果发现底层连接为空,我会重建事务。但这是一项肮脏的工作。

于 2015-04-25T07:13:11.320 回答