1

ユーザーが複数の sql ステートメントを文字列配列形式で渡すことができるメソッドをコーディングしようとしています。そしてトランザクションを作成します。必要に応じてロールバックします。現時点では、トランザクションにはコマンドを実行する必要があるというエラーが表示されます。アドバイスをいただければ幸いです。おそらく、私が必要なことを行う別の(または正しい)方法です。以下は既存のコードです。

public bool Scalar(params string[] sqlTexts)
{
    SqlTransaction tran = null;

    try
    {
        using (SqlConnection connection = new SqlConnection(strConnectionString)) // Auto dispose of connection
        {
            connection.Open(); // Open the connection
            using (tran = connection.BeginTransaction())
            {
                using (SqlCommand cmdCommand = connection.CreateCommand()) // Auto dispose of command
                {
                    foreach (string currentSQL in sqlTexts)
                    {
                        cmdCommand.CommandText = currentSQL;
                        cmdCommand.ExecuteScalar();
                    }
                }

                tran.Commit();
            }
        }
        return true;
    }
    catch (Exception)
    {
        if (tran != null)
            tran.Rollback();
        return false;
    }
}
4

1 に答える 1

4

コマンドを実行する前に、トランザクションをコマンドに渡す必要があります。

cmdCommand.Transaction = tran;

さらに、注意したいことがあります。あなたはブロック内usingのトランザクションですが、後でブロック内で参照しています。try/catch をブロック内に移動することをお勧めします。trantrycatchusing(tran=...)

于 2013-07-22T09:02:28.320 に答える