public void ExecuteNonQuery(string sql, int timeout = 30, IDictionary<string, object> parameters = null)
{
parameters = parameters ?? new Dictionary<string, object>();
var regex = new Regex("^GO", RegexOptions.IgnoreCase | RegexOptions.Multiline);
var allScripts = regex.Split(sql);
var statements = allScripts.Where(x => !string.IsNullOrWhiteSpace(x));
HandleWithRetry(sql, s =>
{
using (var connection = _openConnection())
{
using (var transaction = connection.BeginTransaction())
{
using (var command = connection.CreateCommand())
{
command.Transaction = transaction;
command.CommandTimeout = timeout;
foreach (var statement in statements)
{
command.Parameters.Clear();
foreach (var parameter in parameters)
{
if (statement.Contains(parameter.Key))
{
command.Parameters.AddWithValue(parameter.Key, parameter.Value);
}
}
command.CommandText = statement;
command.CommandType = CommandType.Text;
command.ExecuteNonQuery();
}
transaction.Commit();
}
}
}
}, 0);
}