ZhiYeJianKang_PeiXun/cyqdata-master/DAL/DalCreate.cs

160 lines
5.7 KiB
C#
Raw Normal View History

2025-02-20 15:41:53 +08:00
using System;
using System.Collections.Generic;
using System.Text;
using CYQ.Data.Tool;
using System.Threading;
using System.IO;
using CYQ.Data.Orm;
namespace CYQ.Data
{
/// <summary>
/// <20><><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
internal static class DalCreate
{
//private const string SqlClient = "System.Data.SqlClient";
//private const string OleDb = "System.Data.OleDb";
//private const string OracleClient = "System.Data.OracleClient";
//private const string SQLiteClient = "System.Data.SQLite";
//private const string MySqlClient = "MySql.Data.MySqlClient";
//private const string SybaseClient = "Sybase.Data.AseClient";
//private const string PostgreClient = "System.Data.NpgSqlClient";
//private const string TxtClient = "CYQ.Data.TxtClient";
//private const string XmlClient = "CYQ.Data.XmlClient";
//private const string XHtmlClient = "CYQ.Data.XHtmlClient";
/// <summary>
/// ȫ<>ִ浵<D6B4><E6B5B5><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
private static MDictionary<string, DalBase> dalBaseDic = new MDictionary<string, DalBase>();
public static DalBase Get(string key)
{
if (dalBaseDic.ContainsKey(key))
{
return dalBaseDic[key];
}
return null;
}
public static bool Remove(string key)
{
return dalBaseDic.Remove(key);
}
/// <summary>
/// <20>򵥹<EFBFBD><F2B5A5B9><EFBFBD><EFBFBD><EFBFBD>Factory Method<6F><64>
/// </summary>
public static DalBase CreateDal(string connNameOrString)
{
string key = StaticTool.GetTransationKey(connNameOrString);
//<2F><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
bool isTrans = DBFast.HasTransation(key);
if (isTrans)
{
if (dalBaseDic.ContainsKey(key))
{
return dalBaseDic[key];
}
}
DalBase dal = CreateDalBase(connNameOrString);
if (isTrans)
{
dal.TranLevel = DBFast.GetTransationLevel(key);
dal.IsOpenTrans = true;
dalBaseDic.Add(key, dal);
}
return dal;
}
private static DalBase CreateDalBase(string connNameOrString)
{
//ABCConn
DalBase db = GetDalBaseBy(ConnObject.Create(connNameOrString));
if (!string.IsNullOrEmpty(connNameOrString) && db.ConnObj.Master.ConnName.ToLower() != connNameOrString.ToLower() && connNameOrString.EndsWith("Conn"))//<2F><>Ҫ<EFBFBD>л<EFBFBD><D0BB><EFBFBD><EFBFBD>á<EFBFBD>
{
//Conn A<><41>
//BConn xxx <20>Ҳ<EFBFBD><D2B2><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ĭ<EFBFBD>Ͽ⡣
DBResetResult result = db.ChangeDatabase(connNameOrString.Substring(0, connNameOrString.Length - 4));
if (result == DBResetResult.Yes) // д<><EFBFBD><EBBBBA>
{
db.ConnObj.SaveToCache(connNameOrString);
}
}
return db;
}
private static DalBase GetDalBaseBy(ConnObject co)
{
DataBaseType dalType = co.Master.ConnDataBaseType;
//License.Check(providerName);//<2F><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD>
switch (dalType)
{
case DataBaseType.MsSql:
return new MsSqlDal(co);
case DataBaseType.Access:
case DataBaseType.Excel:
case DataBaseType.FoxPro:
return new OleDbDal(co);
case DataBaseType.Oracle:
return new OracleDal(co);
case DataBaseType.SQLite:
return new SQLiteDal(co);
case DataBaseType.MySql:
return new MySQLDal(co);
case DataBaseType.Sybase:
return new SybaseDal(co);
case DataBaseType.PostgreSQL:
return new PostgreDal(co);
case DataBaseType.DB2:
return new DB2Dal(co);
case DataBaseType.Txt:
case DataBaseType.Xml:
return new NoSqlDal(co);
case DataBaseType.FireBird:
return new FireBirdDal(co);
case DataBaseType.DaMeng:
return new DaMengDal(co);
case DataBaseType.KingBaseES:
return new KingBaseESDal(co);
}
return (DalBase)Error.Throw(string.Format("GetHelper:{0} No Be Support Now!", dalType.ToString()));
}
public static DataBaseType GetDalTypeByReaderName(string typeName)
{
switch (typeName.Replace("DataReader", "").ToLower())
{
case "oracle":
return DataBaseType.Oracle;
case "sql":
return DataBaseType.MsSql;
case "sqlite":
return DataBaseType.SQLite;
case "oledb":
return DataBaseType.Access;
case "mysql":
return DataBaseType.MySql;
case "odbc":
case "ase":
return DataBaseType.Sybase;
case "pgsql":
case "npgsql":
return DataBaseType.PostgreSQL;
case "db2":
return DataBaseType.DB2;
case "fb":
return DataBaseType.FireBird;
case "dm":
return DataBaseType.DaMeng;
case "Kdbndp":
return DataBaseType.KingBaseES;
default:
return DataBaseType.None;
}
}
}
}