C# SqlTransaction.Commit 引发异常,因为连接为空

本文关键字:因为 连接 异常 SqlTransaction Commit | 更新日期: 2023-09-27 18:34:02

我在使用 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();

有人有任何线索吗?

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

我该如何解决这个问题?

C# SqlTransaction.Commit 引发异常,因为连接为空

利用使用

using (SqlConnection connection = new SqlConnection(connectionString))
    {
        connection.Open();
        Console.WriteLine("ServerVersion: {0}", connection.ServerVersion);
        Console.WriteLine("State: {0}", connection.State);
    }

似乎是错别字

con.BeginTransaction(IsolationLevel.RepeatableRead)

应该是

conn.BeginTransaction(IsolationLevel.RepeatableRead)

使用 using 语句:

using (SqlConnection connection = new SqlConnection(connectionString))
{
//your code here
}

C# - 捕获事务连接后的 Sql事务为空 - 堆栈溢出捕获事务连接后的 Sql事务为空

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

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

相关文章: