public override async Task RunInTransactionAsync(Action <IDbChange> dbChange) { var transaction = new SqlServerTransactionBuilder(Dialect); dbChange(transaction); using (var connection = await _connectionProvider.GetOpenConnectionAsync().ConfigureAwait(false)) using (var trans = connection.BeginTransaction()) using (var command = connection.CreateCommand()) { command.Transaction = trans; try { command.CommandType = CommandType.Text; foreach (var cmd in transaction.Commands) { command.CommandText = _useStatement + cmd.CommandText; cmd.CommandParameters.ForEach(parameter => { command.Parameters.Add(new SqlParameter(parameter.Key, parameter.Value ?? DBNull.Value)); }); command.ExecuteNonQuery(); command.Parameters.Clear(); } trans.Commit(); } catch { trans?.Rollback(); throw; } } }
public async Task <int> ExecuteAsync(CancellationToken cancellationToken = default) { using (var connection = await _dbConnectionProvider.GetOpenConnectionAsync(cancellationToken)) using (var command = BuildDbCommand(connection)) { return(await command.ExecuteNonQueryAsync(cancellationToken).ConfigureAwait(false)); } }
private async Task <TResult> ExecuteReader <TResult>(string useStatement, string commandText, IEnumerable <KeyValuePair <string, object> > parameters, Func <IDbReader, TResult> readerMapper) { using (var connection = await _connectionProvider.GetOpenConnectionAsync().ConfigureAwait(false)) using (var command = connection.CreateCommand()) { command.CommandType = CommandType.Text; command.CommandText = useStatement + commandText; parameters.ForEach(parameter => command.Parameters.Add(new SqlParameter(parameter.Key, parameter.Value ?? DBNull.Value))); using (var reader = command.ExecuteReader()) { var r = new DbReader(reader); return(readerMapper(r)); } } }
public override async Task <TResult> ExecuteReaderAsync <TResult>(string commandText, IDictionary <string, object> parameters, Func <IDbReader, TResult> readerMapper) { using (var connection = await _connectionProvider.GetOpenConnectionAsync().ConfigureAwait(false)) using (var command = (SqliteCommand)connection.CreateCommand()) { command.CommandType = CommandType.Text; EnableForeignKeys(command); command.CommandText = commandText; parameters.ForEach( parameter => command.Parameters.Add(new SqliteParameter(parameter.Key, parameter.Value ?? DBNull.Value))); using (var reader = await command.ExecuteReaderAsync()) using (var r = new DbReader(reader)) { return(readerMapper(r)); } } }