public void ExecuteNonQueryTransactional(ConnectionSettings settings, string sql)
{
//do all this in a single transaction
using (var scope = new TransactionScope())
{
string connectionString = _connectionStringGenerator.GetConnectionString(settings, true);
using (var connection = new SqlConnection(connectionString))
{
connection.Open();
using (var command = new SqlCommand())
{
command.Connection = connection;
command.CommandTimeout = 0;
var scripts = SplitSqlStatements(sql);
foreach (var splitScript in scripts)
{
command.CommandText = splitScript;
try
{
command.ExecuteNonQuery();
}
catch (Exception ex)
{
ex.Data.Add("Custom", "Erroring script was run in a transaction and was rolled back.");
throw ex;
}
}
}
scope.Complete();
}
}
}