使用带有sqltransactions的数据引导程序

时间:2012-07-12 13:53:43

标签: c# sql transactions datareader

我在代码中使用SqlTransaction来进行回滚。在事务中,我得到了多个要执行的语句,可能包括选择插入和更新。所有这些陈述都属于sqltransaction的范围。一切都可以解决一个问题。我正在使用datareader s来表示select语句。这些读者一旦使用就会被关闭。这会强制连接丢失,每件事都会失败。有没有人能解决我是否可以在datareader ??

中使用sqltransaction的问题

2 个答案:

答案 0 :(得分:4)

如果在调用CommandBehavior.CloseConnection时设置了ExecuteReader选项,DataReader将仅关闭连接。

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

答案 1 :(得分: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();
}