5

単一の接続のみを使用し、トランザクションを使用するコマンドとトランザクションを使用しないコマンドの 2 つのコマンドを一緒に実行しようとしています。

このソリューションは別の場所に展開されているため、トレース/ログ機能はありません。そのため、プロセスが部分的に失敗した場合、少なくともログを追跡できます。

ここにテスト コードを追加します。

SqlConnection connection = GetConnection();
SqlTransaction transaction = null;

try
{
    connection.Open();
    transaction = connection.BeginTransaction();

    SqlCommand logCommand = new SqlCommand("Log before main command", connection);
    logCommand.ExecuteNonQuery();

    string sql = "SELECT 1";
    SqlCommand command = new SqlCommand(sql, connection, transaction);
    int rows = command.ExecuteNonQuery();

    logCommand = new SqlCommand("Log after main command", connection);
    logCommand.ExecuteNonQuery();

    // Other similar code

    transaction.Commit();
    command.Dispose();
}
catch { /* Rollback etc */ }
finally { /* etc */ }

エラーが発生します:

ExecuteNonQuery では、コマンドに割り当てられた接続が保留中のローカル トランザクションにある場合、コマンドにトランザクションが必要です。コマンドのトランザクション プロパティが初期化されていません。

別のトランザクションレス接続なしで、私がやろうとしていることを達成する方法はありますか?

または、別の方法で単一の接続を使用してコードを最適化するためのより良い提案があれば、それについて学ぶことにオープンです.

4

1 に答える 1