238 lines
8.1 KiB
C#
238 lines
8.1 KiB
C#
namespace LaaProductionWeb.Data
|
|
{
|
|
using LaaProductionWeb.Data.Interfaces;
|
|
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data;
|
|
using System.Data.SqlClient;
|
|
|
|
public class SqlClient : ISqlClient
|
|
{
|
|
private readonly string connectionString;
|
|
|
|
public SqlClient(string connectionString)
|
|
=> this.connectionString = connectionString;
|
|
|
|
public SQLCommand CreateCommand(string commandText)
|
|
=> new SQLCommand(this, commandText);
|
|
|
|
public int ExecuteNonQuery(string query, Action<SqlParameters> parameters, SqlInfoMessageEventHandler errorCallback = null)
|
|
{
|
|
var rowsAffected = 0;
|
|
|
|
using (var sqlConnection = new SqlConnection(this.connectionString))
|
|
{
|
|
sqlConnection.OpenWithErrorHandling(errorCallback);
|
|
|
|
using (var sqlCommand = sqlConnection.CreateCommand())
|
|
{
|
|
parameters(sqlCommand.Parameters);
|
|
|
|
sqlCommand.CommandText = query;
|
|
rowsAffected = sqlCommand.ExecuteNonQuery();
|
|
}
|
|
}
|
|
|
|
return rowsAffected;
|
|
}
|
|
|
|
public IEnumerable<T> ExecuteReader<T>(string query, Func<ISqlReader, T> reader, SqlInfoMessageEventHandler errorCallback = null)
|
|
{
|
|
using (var sqlConnection = new SqlConnection(this.connectionString))
|
|
{
|
|
sqlConnection.OpenWithErrorHandling(errorCallback);
|
|
|
|
using (var sqlCommand = sqlConnection.CreateCommand())
|
|
{
|
|
sqlCommand.CommandText = query;
|
|
|
|
using (SqlReader sqlReader = sqlCommand.ExecuteReader())
|
|
{
|
|
while (sqlReader.Read())
|
|
{
|
|
yield return reader(sqlReader);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public IEnumerable<T> ExecuteReader<T>(string query, Action<SqlParameters> parameters, Func<ISqlReader, T> reader, SqlInfoMessageEventHandler errorCallback = null)
|
|
{
|
|
using (var sqlConnection = new SqlConnection(this.connectionString))
|
|
{
|
|
sqlConnection.OpenWithErrorHandling(errorCallback);
|
|
|
|
using (var sqlCommand = sqlConnection.CreateCommand())
|
|
{
|
|
parameters(sqlCommand.Parameters);
|
|
|
|
sqlCommand.CommandText = query;
|
|
|
|
using (SqlReader sqlReader = sqlCommand.ExecuteReader())
|
|
{
|
|
while (sqlReader.Read())
|
|
{
|
|
yield return reader(sqlReader);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public IEnumerable<T> ExecuteReader<T>(string query, Func<ISqlReader, T> reader, Action<string[]> columns, SqlInfoMessageEventHandler errorCallback = null)
|
|
{
|
|
using (var sqlConnection = new SqlConnection(this.connectionString))
|
|
{
|
|
sqlConnection.OpenWithErrorHandling(errorCallback);
|
|
|
|
using (var sqlCommand = sqlConnection.CreateCommand())
|
|
{
|
|
sqlCommand.CommandText = query;
|
|
|
|
using (SqlReader sqlReader = sqlCommand.ExecuteReader())
|
|
{
|
|
columns(sqlReader.GetColumns());
|
|
|
|
while (sqlReader.Read())
|
|
{
|
|
yield return reader(sqlReader);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public IEnumerable<T> ExecuteReader<T>(string query, Action<SqlParameters> parameters, Func<ISqlReader, T> reader, Action<string[]> columns, SqlInfoMessageEventHandler errorCallback = null)
|
|
{
|
|
using (var sqlConnection = new SqlConnection(this.connectionString))
|
|
{
|
|
sqlConnection.OpenWithErrorHandling(errorCallback);
|
|
|
|
using (var sqlCommand = sqlConnection.CreateCommand())
|
|
{
|
|
parameters(sqlCommand.Parameters);
|
|
|
|
sqlCommand.CommandText = query;
|
|
|
|
using (SqlReader sqlReader = sqlCommand.ExecuteReader())
|
|
{
|
|
columns(sqlReader.GetColumns());
|
|
|
|
while (sqlReader.Read())
|
|
{
|
|
yield return reader(sqlReader);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public T ExecuteScalar<T>(string query, Action<SqlParameters> parameters, SqlInfoMessageEventHandler errorCallback = null)
|
|
{
|
|
var scalarResult = default(T);
|
|
|
|
using (var sqlConnection = new SqlConnection(this.connectionString))
|
|
{
|
|
sqlConnection.OpenWithErrorHandling(errorCallback);
|
|
|
|
using (var sqlCommand = sqlConnection.CreateCommand())
|
|
{
|
|
parameters(sqlCommand.Parameters);
|
|
|
|
sqlCommand.CommandText = query;
|
|
|
|
var scalarObject = sqlCommand.ExecuteScalar();
|
|
|
|
if (scalarObject is T scalarValue)
|
|
{
|
|
scalarResult = scalarValue;
|
|
}
|
|
}
|
|
}
|
|
|
|
return scalarResult;
|
|
}
|
|
|
|
internal T FirstOrDefault<T>(SQLCommand command, Func<ISqlReader, T> expression)
|
|
{
|
|
var firstOrDefaultResult = default(T);
|
|
|
|
using (var sqlConnection = new SqlConnection(this.connectionString))
|
|
{
|
|
sqlConnection.OpenWithErrorHandling();
|
|
|
|
using (var sqlCommand = sqlConnection.CreateCommand())
|
|
{
|
|
sqlCommand.CommandText = command.CommandText;
|
|
|
|
sqlCommand.Parameters.AddRange(command.Parameters);
|
|
|
|
using (SqlReader sqlReader = sqlCommand.ExecuteReader(CommandBehavior.SequentialAccess))
|
|
{
|
|
if (sqlReader.Read())
|
|
{
|
|
firstOrDefaultResult = expression(sqlReader);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return firstOrDefaultResult;
|
|
}
|
|
|
|
public T FirstOrDefault<T>(string query, Func<ISqlReader, T> reader, SqlInfoMessageEventHandler errorCallback = null)
|
|
{
|
|
var firstOrDefaultResult = default(T);
|
|
|
|
using (var sqlConnection = new SqlConnection(this.connectionString))
|
|
{
|
|
sqlConnection.OpenWithErrorHandling(errorCallback);
|
|
|
|
using (var sqlCommand = sqlConnection.CreateCommand())
|
|
{
|
|
sqlCommand.CommandText = query;
|
|
|
|
using (SqlReader sqlReader = sqlCommand.ExecuteReader(CommandBehavior.SequentialAccess))
|
|
{
|
|
if (sqlReader.Read())
|
|
{
|
|
firstOrDefaultResult = reader(sqlReader);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return firstOrDefaultResult;
|
|
}
|
|
|
|
public T FirstOrDefault<T>(string query, Action<SqlParameters> parameters, Func<ISqlReader, T> reader, SqlInfoMessageEventHandler errorCallback = null)
|
|
{
|
|
var firstOrDefaultResult = default(T);
|
|
|
|
using (var sqlConnection = new SqlConnection(this.connectionString))
|
|
{
|
|
sqlConnection.OpenWithErrorHandling(errorCallback);
|
|
|
|
using (var sqlCommand = sqlConnection.CreateCommand())
|
|
{
|
|
parameters(sqlCommand.Parameters);
|
|
|
|
sqlCommand.CommandText = query;
|
|
|
|
using (SqlReader sqlReader = sqlCommand.ExecuteReader(CommandBehavior.SequentialAccess))
|
|
{
|
|
if (sqlReader.Read())
|
|
{
|
|
firstOrDefaultResult = reader(sqlReader);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return firstOrDefaultResult;
|
|
}
|
|
}
|
|
}
|