Если нужно отправить в базу много команд - надо сразу делать вот так:
Тогда в случае exception-а произойдёт Rollback и ничего не случится.
А Exception уйдёт "наверх", где его можно будет обработать.
List < sqlcommand > sqlCommands = new List < sqlcommand > (); foreach (ParsedAddress parsedAddress in parsedAddresses) { if (parsedAddress.IsError) continue; SqlCommand sqlCommand = new SqlCommand(sqlcmd_SAVE_PARSED_VALUES); sqlCommand.Parameters.Add(new SqlParameter("Param1", "Param1")); SqlParameter NullableParameter = new SqlParameter("NullableParameter", SqlDbType.Int); NullableParameter.IsNullable = true; if (itemToWrite.NullableValue != null) NullableParameter.Value = itemToWrite.NullableValue.ID; else NullableParameter.Value = DBNull.Value; sqlCommand.Parameters.Add(NullableParameter); sqlCommand.Parameters.Add(new SqlParameter("Param2", "Param2")); sqlCommand.Parameters.Add(new SqlParameter("Param3", 13)); sqlCommands.Add(sqlCommand); } SqlConnection connection = new SqlConnection(connectionStringWrite); connection.Open(); SqlTransaction transaction = connection.BeginTransaction(); try { foreach (SqlCommand cmd in sqlCommands) { cmd.Connection = connection; cmd.Transaction = transaction; cmd.ExecuteNonQuery(); cmd.Dispose(); } transaction.Commit(); } catch (SqlException sqlError) { transaction.Rollback(); throw sqlError; } finally { connection.Close(); }
Тогда в случае exception-а произойдёт Rollback и ничего не случится.
А Exception уйдёт "наверх", где его можно будет обработать.
Комментариев нет:
Отправить комментарий