1

SqlTransaction在我的代码中使用 s 来进行回滚。在事务中,我有多个要执行的语句可能包括选择插入和更新。所有这些陈述都在sqltransaction. 一切正常,只针对一个问题。我将datareaders 用于选择语句。这些阅读器一旦使用就关闭。这迫使连接丢失,一切都失败了。有人对我是否可以datareader在 a 中使用 s有解决方案sqltransaction吗?

4

2 回答 2

4

CommandBehavior.CloseConnection只有在调用时设置了该选项,DataReader 才会关闭连接ExecuteReader

如果您避免设置此选项,您应该没问题。

于 2012-07-12T14:01:25.123 回答
2

您应该自行打开 SqlConnection。
关闭 DataReader 时,SqlDataReader 不会关闭 SqlConnection

例如:

using(SqlConnection cn = GetConnection())
{
    cn.Open();
    SqlTransaction tr = cn.BeginTransaction("myTransaction");
    .....

    SqlCommand command = new SqlCommand(sqlString, cn);

    using(SqlDataReader reader = command.ExecuteReader())
    {
        .....
    }

    SqlCommand command1 = new SqlCommand(sqlString1, cn);
    using(SqlDataReader reader1 = command1.ExecuteReader())
    {
        .....
    }
    tr.Commit();
}
于 2012-07-12T14:02:04.017 回答