using NetCore.Common;
using NetCore.Model.enums;
using System;
using System.Collections.Generic;
using System.Data;
namespace NetCore.BLL
{
public class Connection
{
public DatabaseType databaseType { get; set; }
public string connectionString { get; set; }
}
public class ConnectionFactory
{
///
/// 转换数据库类型
///
/// 数据库类型
///
private static DatabaseType GetDataBaseType(string databaseType)
{
DatabaseType returnValue = DatabaseType.SqlServer;
foreach (DatabaseType dbType in Enum.GetValues(typeof(DatabaseType)))
{
if (dbType.ToString().Equals(databaseType, StringComparison.OrdinalIgnoreCase))
{
returnValue = dbType;
break;
}
}
return returnValue;
}
//private static string _type { get; set; }
//private static string _connstr { get; set; }
protected static Dictionary _mydic { get; set; }
protected static Connection qwConnect = null;//数据源
protected static Connection crmConnect = null;//数据源
protected static Connection wxConnect = null;//数据源
protected static Connection qwConnect_targt = null;//目标数据库
protected static Connection crmConnect_targt = null;//目标数据库
protected static Connection wxConnect_targt = null;//目标数据库
private static Connection GetConnStr(ContextType contextType, string comcode, bool istargt)
{
switch (contextType)
{
case ContextType.crmContext:
if (crmConnect == null || string.IsNullOrEmpty(crmConnect.connectionString))
{
crmConnect = GetRealtimeStr(contextType, comcode, false);
}
if (crmConnect_targt == null || string.IsNullOrEmpty(crmConnect_targt.connectionString))
{
crmConnect_targt = GetRealtimeStr(contextType, comcode, true);
}
return istargt ? crmConnect_targt : crmConnect;
case ContextType.qwContext:
if (qwConnect == null || string.IsNullOrEmpty(qwConnect.connectionString))
{
qwConnect = GetRealtimeStr(contextType, comcode, false);
}
if (qwConnect_targt == null || string.IsNullOrEmpty(qwConnect_targt.connectionString))
{
qwConnect_targt = GetRealtimeStr(contextType, comcode, true);
}
return istargt ? qwConnect_targt : qwConnect;
case ContextType.wxContext:
if (wxConnect == null || string.IsNullOrEmpty(wxConnect.connectionString))
{
wxConnect = GetRealtimeStr(contextType, comcode, false);
}
if (wxConnect_targt == null || string.IsNullOrEmpty(wxConnect_targt.connectionString))
{
wxConnect_targt = GetRealtimeStr(contextType, comcode, true);
}
return istargt ? wxConnect_targt : wxConnect;
default:
return qwConnect;
}
}
private static Connection GetRealtimeStr(ContextType contextType, string comcode, bool istargt)
{
return new Connection()
{
connectionString = ConfigHelper.GetSectionValue($"{comcode}_Config:{contextType.ToString()}:{(istargt ? "targtConectStr" : "connectionString")}"),//从配置中获取配置
databaseType = GetDataBaseType(ConfigHelper.GetSectionValue($"{comcode}_Config:{contextType.ToString()}:databaseType")),//从配置中获取配置
};
}
///
/// 获取数据库连接
///
/// SqlServer,MySql,Oracle 如果不传递指定数据库,则按照配置的来
/// 事业部的编码
/// true:目标库 flase:数据源库
///
public static IDbConnection CreateConnection(ContextType contextType, string comcode, bool istargt = true)
{
IDbConnection connection = null;
Connection database = GetConnStr(contextType, comcode, istargt);
switch (database.databaseType)
{
case DatabaseType.SqlServer:
connection = new System.Data.SqlClient.SqlConnection(database.connectionString);
break;
case DatabaseType.MySql:
connection = new MySql.Data.MySqlClient.MySqlConnection(database.connectionString);
break;
case DatabaseType.Oracle:
connection = new Oracle.ManagedDataAccess.Client.OracleConnection(database.connectionString);
break;
}
return connection;
}
public static IDbConnection CreatePushConnection()
{
IDbConnection connection = null;
string connectionstr = ConfigHelper.GetSectionValue($"PushConfig:connectionString");
string contype = ConfigHelper.GetSectionValue($"PushConfig:databaseType");
DatabaseType databaseType = GetDataBaseType(contype);
switch (databaseType)
{
case DatabaseType.SqlServer:
connection = new System.Data.SqlClient.SqlConnection(connectionstr);
break;
case DatabaseType.MySql:
connection = new MySql.Data.MySqlClient.MySqlConnection(connectionstr);
break;
case DatabaseType.Oracle:
connection = new Oracle.ManagedDataAccess.Client.OracleConnection(connectionstr);
break;
}
return connection;
}
}
}