Если нужно отправить в базу много команд - надо сразу делать вот так:
Тогда в случае 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 уйдёт "наверх", где его можно будет обработать.
Комментариев нет:
Отправить комментарий