using System;
using System.Data.SqlClient;
using System.Globalization;
using System.Security.Permissions;
namespace ZeroLevel.SqlServer
{
public sealed class SqlDbConnectionFactory
{
public string ConnectionString
{
get { return dbConnectionString.ConnectionString; }
}
public string Server
{
get { return dbConnectionString.DataSource; }
}
public string Base
{
get { return dbConnectionString.InitialCatalog; }
}
#region Поля
private SqlConnectionStringBuilder dbConnectionString;
///
/// Текущая строка подключения
///
private readonly string _currentConnectionString = String.Empty;
#endregion
public SqlDbConnectionFactory(SqlConnectionStringBuilder builder)
{
_currentConnectionString = builder.ConnectionString;
Initialize();
}
public SqlDbConnectionFactory(string connectionString)
{
_currentConnectionString = connectionString;
Initialize();
}
public SqlDbConnectionFactory(string server, string database, string login, string password)
{
_currentConnectionString = BuildConnectionString(server, database, login, password);
Initialize();
}
private void Initialize()
{
dbConnectionString = new SqlConnectionStringBuilder(_currentConnectionString);
dbConnectionString.Pooling = true;
}
public SqlConnection CreateConnection()
{
try
{
var connection = new SqlConnection(ConnectionString);
connection.Open();
return connection;
}
catch (Exception ex)
{
Log.Error(ex, $"[SqlDbConnectionFactory.CreateConnection] {ConnectionString}");
throw;
}
}
#region Helpers
#region Строки подключения
///
/// Стандартное подключение
///
private const string StandartConnectionString = "Server={0};Database={1};User ID={2};Password=\"{3}\";";
///
/// Доверенное подключение
///
private const string TrustedConnectionString = "Data Source={0};Initial Catalog={1};Integrated Security=SSPI;";
#endregion
internal static string BuildConnectionString(string server, string dataBase, string user, string pwd)
{
if (String.IsNullOrEmpty(user) || String.IsNullOrEmpty(pwd))
{
return String.Format(CultureInfo.CurrentCulture, TrustedConnectionString, server, dataBase);
}
else
{
return String.Format(CultureInfo.CurrentCulture, StandartConnectionString, server, dataBase, user, pwd);
}
}
#endregion
public override int GetHashCode()
{
return this.ConnectionString.GetHashCode();
}
}
}