namespace LaaProductionWeb.Data { using LaaProductionWeb.Data.Interfaces; using Microsoft.Extensions.DependencyInjection; using System; using System.Data.SqlClient; using System.Diagnostics; using System.Threading.Tasks; public static class SqlClientExtensions { public static IServiceCollection AddDbContext(this IServiceCollection services, string connectionString) { services.AddTransient(_ => new SqlClient(connectionString)); return services; } internal static void OpenWithErrorHandling(this SqlConnection sqlConnection, SqlInfoMessageEventHandler messageHandler = null) { sqlConnection.FireInfoMessageEventOnUserErrors = true; sqlConnection.InfoMessage += SqlConnectionInfoMessage; if (messageHandler != null) { sqlConnection.InfoMessage += messageHandler; } sqlConnection.Open(); } internal static async Task OpenWithErrorHandlingAsync(this SqlConnection sqlConnection, SqlInfoMessageEventHandler messageHandler = null) { sqlConnection.FireInfoMessageEventOnUserErrors = true; sqlConnection.InfoMessage += SqlConnectionInfoMessage; if (messageHandler != null) { sqlConnection.InfoMessage += messageHandler; } await sqlConnection.OpenAsync(); } internal static void SqlConnectionInfoMessage(object sender, SqlInfoMessageEventArgs e) { Debug.WriteLine(e); Log($"[{DateTime.Now: hh:mm:ss}] Error: {e.Source} - {e.Message}{Environment.NewLine}{string.Join(Environment.NewLine, e.Errors)}"); // TODO: Handle errors } internal static void Log(string message) { // File.AppendAllText($"{Environment.CurrentDirectory}/App_Data/{DateTime.Now:yyyy_MM_dd}.log", $"{Environment.NewLine}{message}{Environment.NewLine}"); } } }