I encode a transaction manually in ADO.NET. An example that I use to reuse SqlCommand , which seems like a great idea.
However, I have added options to my team.
My question is: in the following code command.Parameters.Clear() correct? Or am I doing it wrong?
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); } } } }
source share