/// <summary> /// 获取该数据库提供程序的名称。 /// </summary> /// <param name="factory">表示一个 <see cref="System.Data.Common.DbProviderFactory"/> 对象。</param> /// <returns>该数据库提供程序的名称,例如 <see cref="System.Data.SqlClient.SqlClientFactory"/> 对象返回 "System.Data.SqlClient"。</returns> public static string GetProviderName(this DbProviderFactory factory) { Type factoryType = factory.GetType(); string providerName = null; if (!_factoryMappings.Value.TryGetValue(factoryType, out providerName)) { DbProviderFactoryClass factoryClass = DbProviderFactoryClasses.FirstOrDefault(item => Type.GetType(item.AssemblyQualifiedName) == factoryType); providerName = factoryClass == null ? factoryType.Namespace : factoryClass.InvariantName; _factoryMappings.Value.Add(factoryType, providerName); } return(providerName); }
private static DbProviderFactoryClass[] GetDbProviderFactoryClasses() { List<DbProviderFactoryClass> list = DbProviderFactories.GetFactoryClasses().ToList<DbProviderFactoryClass>(); var types = typeof(DbProviderFactory).GetSubClass().Where(t => !t.IsAbstract); foreach (Type type in types) { if (!list.Any(item => item.AssemblyQualifiedName == type.AssemblyQualifiedName || item.InvariantName == type.Namespace)) { DbProviderFactoryClass item = new DbProviderFactoryClass(); string name = type.Name.Replace("Factory", ""); item.Name = name + " Data Provider"; item.Description = ".NET Framework Data Provider for " + name; item.InvariantName = type.Namespace; item.AssemblyQualifiedName = type.AssemblyQualifiedName; list.Add(item); } } DbProviderFactoryClass[] factories = list.Where( item => { Type type = null; return Types.TryGetType(item.AssemblyQualifiedName, out type); }).ToArray(); return factories; }
/// <summary> /// 根据数据库提供程序的描述信息对象获取其 SQL 脚本环境下的查询参数名称前缀字符。 /// </summary> /// <param name="providerFactory">数据库提供程序的描述信息对象 <see cref="DbProviderFactoryClass"/> 。</param> /// <returns>根据数据库提供程序的描述信息对象获取其 SQL 脚本环境下的查询参数名称前缀字符。</returns> public static string GetParameterToken(this DbProviderFactoryClass providerFactory) { return(GetParemeterToken(providerFactory.InvariantName)); }