Soll ich Parameters.Clear aufrufen, wenn ein SqlCommand mit einer Transition wiederverwendet wird?

Ich codiere eine Transaktion manuell in ADO.NET. Das Beispiel, an dem ich arbeite, verwendet dasSqlCommand Das scheint eine gute Idee zu sein.

Ich habe meinem Befehl jedoch Parameter hinzugefügt.

Meine Frage ist: In folgendem Code stehtcommand.Parameters.Clear() richtig? Oder mache ich es falsch?

using (var connection = new SqlConnection(EomAppCommon.EomAppSettings.ConnStr))
{
    connection.Open();
    SqlTransaction transaction = connection.BeginTransaction();
    SqlCommand command = connection.CreateCommand();
    command.Transaction = transaction;
    try
    {
        foreach (var itemIDs in this.SelectedItemIds)
        {
            command.CommandText = "UPDATE Item SET payment_method_id = @batchID WHERE id in (@itemIDs)";
            // IS THE FOLLOWING CORRECT?
            command.Parameters.Clear();

            command.Parameters.Add(new SqlParameter("@batchID", batchID));
            command.Parameters.Add(new SqlParameter("@itemIDs", itemIDs));
            command.ExecuteNonQuery();
        }
        transaction.Commit();
    }
    catch (Exception ex)
    {
        MessageBox.Show("Failed to update payment batches, rolling back." + ex.Message);
        try
        {
            transaction.Rollback();
        }
        catch (Exception exRollback)
        {
            if (!(exRollback is InvalidOperationException)) // connection closed or transaction already rolled back on the server.
            {
                MessageBox.Show("Failed to roll back. " + exRollback.Message);
            }
        }
    }
}

Antworten auf die Frage(2)

Ihre Antwort auf die Frage