d49330e697
Add comprehensive XML documentation (param/returns tags) across 132 source files to improve IntelliSense and API discoverability. Include ConfigManager design documents and implementation plans for phases 1-9.
62 lines
2.2 KiB
C#
62 lines
2.2 KiB
C#
using Dapper;
|
|
using JdeScoping.DataAccess.Interfaces;
|
|
using JdeScoping.DataSync.Etl.Contracts;
|
|
|
|
namespace JdeScoping.DataSync.Etl.Scripts;
|
|
|
|
/// <summary>
|
|
/// SQL script runner that executes SQL commands against the database.
|
|
/// </summary>
|
|
public class SqlScriptRunner : IScriptRunner
|
|
{
|
|
private readonly IDbConnectionFactory _connectionFactory;
|
|
private readonly string _sql;
|
|
private readonly object? _parameters;
|
|
private readonly int _timeoutSeconds;
|
|
|
|
/// <summary>
|
|
/// The name of this script.
|
|
/// </summary>
|
|
public string ScriptName { get; }
|
|
|
|
/// <summary>
|
|
/// Initializes a new instance of the <see cref="SqlScriptRunner"/> class.
|
|
/// </summary>
|
|
/// <param name="connectionFactory">The database connection factory.</param>
|
|
/// <param name="sql">The SQL command to execute.</param>
|
|
/// <param name="name">The optional name of the script.</param>
|
|
/// <param name="parameters">The optional parameters for the SQL command.</param>
|
|
/// <param name="timeoutSeconds">The command timeout in seconds.</param>
|
|
public SqlScriptRunner(
|
|
IDbConnectionFactory connectionFactory,
|
|
string sql,
|
|
string? name = null,
|
|
object? parameters = null,
|
|
int timeoutSeconds = 3600)
|
|
{
|
|
ArgumentNullException.ThrowIfNull(connectionFactory);
|
|
ArgumentException.ThrowIfNullOrWhiteSpace(sql);
|
|
|
|
_connectionFactory = connectionFactory;
|
|
_sql = sql;
|
|
_parameters = parameters;
|
|
_timeoutSeconds = timeoutSeconds;
|
|
ScriptName = name ?? "SqlScript";
|
|
}
|
|
|
|
/// <summary>
|
|
/// Executes the SQL script asynchronously.
|
|
/// </summary>
|
|
/// <param name="cancellationToken">The cancellation token.</param>
|
|
public async Task ExecuteAsync(CancellationToken cancellationToken = default)
|
|
{
|
|
await using var connection = await _connectionFactory.CreateLotFinderConnectionAsync(cancellationToken);
|
|
await connection.ExecuteAsync(
|
|
new CommandDefinition(
|
|
_sql,
|
|
_parameters,
|
|
commandTimeout: _timeoutSeconds,
|
|
cancellationToken: cancellationToken));
|
|
}
|
|
}
|