AliaSQL.Core.Services.Impl.QueryExecutor.ExecuteNonQueryTransactional C# (CSharp) Method

ExecuteNonQueryTransactional() public method

Runs larger queries that may be multiline separated with GO Runs entire sql block in a single transaction that will rollback if any part of the query errors
public ExecuteNonQueryTransactional ( AliaSQL.Core.Model.ConnectionSettings settings, string sql ) : void
settings AliaSQL.Core.Model.ConnectionSettings
sql string
return void
        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();
                }
            }
        }