/// <summary> /// 根据数据库类型获取所对应的数据库操作实例 /// </summary> /// <param name="providerType"></param> /// <returns></returns> internal static DbProviderFactory GetDbProviderFactory(EDbProviderType providerType) { if (!ProviderFactoryDict.ContainsKey(providerType)) { ProviderFactoryDict.Add(providerType, DbProviderFactories.GetFactory(ProviderNameDict[providerType])); } return(ProviderFactoryDict[providerType]); }
/// <summary> /// 提供连接和使用SQL操作不同类型的数据库(数据源)的方法 /// </summary> /// <param name="connectionString">数据库连接字符串</param> /// <param name="providerType">数据库类型</param> /// <param name="commandTimeOut">执行一条命令的超时时间(以秒为单位)</param> protected DbHelper(string connectionString, EDbProviderType providerType, int commandTimeOut = 30) { ConnectionString = connectionString; CommandTimeOut = commandTimeOut; _providerFactory = ProviderFactory.GetDbProviderFactory(providerType); if (_providerFactory == null) { throw new ArgumentException($"无法加载数据源类型为“{providerType.ToString()}”的数据库操作对象(ProviderFactory)"); } }
/// <summary> /// 从数据库中获取字典表,注意字典表只有两个字段即“编码”、“名称” /// </summary> /// <param name="connectString"></param> /// <param name="tableName"></param> /// <param name="eDbProviderType"></param> /// <param name="codeField">编码字段名</param> /// <param name="nameField">名称字段名</param> /// <returns></returns> protected static DictionaryTable GetDictionaryTableFromDb(string connectString, string tableName, EDbProviderType eDbProviderType, string codeField = "编码", string nameField = "名称") { var sql = $"select {codeField},{nameField} from " + tableName; var dbHelper = DbHelper.GetDbHelper(connectString, eDbProviderType); var dataTable = dbHelper.GetDataTable(sql); var dictTable = new DictionaryTable(tableName); foreach (DataRow row in dataTable.Rows) { dictTable.CodeNameDict.Add(row[0].ToString(), row[1].ToString()); } dbHelper.Close(); return(dictTable); }
/// <summary> /// 构建操作数据库(数据源)的帮助类 /// </summary> /// <param name="connectionString">数据库连接字符串</param> /// <param name="providerType">数据库类型</param> /// <param name="commandTimeOut">执行一条命令的超时时间(以秒为单位)</param> public static DbHelper GetDbHelper(string connectionString, EDbProviderType providerType, int commandTimeOut = 30) => new DbHelper(connectionString, providerType, commandTimeOut);
/// <summary> /// 根据数据库类型获取所对应的数据提供程序名 /// </summary> /// <param name="providerType">数据库类型</param> /// <returns></returns> internal static string GetProviderName(EDbProviderType providerType) { return(ProviderNameDict[providerType]); }
/// <summary> /// 从数据库中获取字典表 /// </summary> /// <param name="connectString"></param> /// <param name="tableName">字典表名称</param> /// <param name="eDbProviderTyp"></param> /// <returns></returns> public static DictionaryTable GetDictionaryTable(string connectString, string tableName, EDbProviderType eDbProviderTyp) { var dictTables = new Dictionary <string, DictionaryTable>(); if (dictTables.ContainsKey(tableName)) { return(dictTables[tableName]); } var tableFields = GetDictionaryTableFromDb(connectString, tableName, eDbProviderTyp); dictTables.Add(tableName, tableFields); return(tableFields); }