1

SqlTransactionロールバックの目的で、コードで s を使用しています。トランザクション内で、複数のステートメントを実行して、挿入と更新の選択を含めることができます。これらのステートメントはすべて、 の範囲内にありsqltransactionます。1 つの問題だけで、すべてが正常に機能します。datareaderselect ステートメントに s を使用しています。そして、これらのリーダーは一度使用すると閉じられます。これにより、接続が失われ、すべてが失敗します。datareader内で sを使用できるかどうかについての解決策はありますかsqltransaction??

4

2 に答える 2

4

DataReader はCommandBehavior.CloseConnection、呼び出し時にオプションが設定されている場合にのみ接続を閉じます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 に答える