使用ADONET通用接口的另一个好处是它能被继承用于建立强类型的DataSet强类型DataSet的好处包括设计时的检查和强类型DataSet 的Visual Studio NET语句填充
对于ADONET通用接口的相关使用还是比较常见就使用ADONET DbProviderFactories并扩充兼容mysql我深入的研究了一下我们现在一起来看看吧ADONET 为各种ADONET类引入了一个提供程序工厂的模型以及通用基类
ADONET通用接口的限制接口不易扩展ADONET无法创建某些类的实例ADONET无法判断可用的NET数据提供程序提供工厂模型如何解决上述限制通过抽象积累来扩展ADONET模型
使用ADONET DbProviderFactories类来创建对象提供程序工厂模型的限制许多查询结构都是数据库特有的为参数化查询设置CommandText时可能需要提供程序特有的代码指定参数数据类型可能需要提供程序特有的代码为了使开发的代码通用
不局限于特定的数据库本次开发中决定使用DbProviderFactory+标准SQL以开发一个适用于mysql和 sqlserver的封装但DbProviderFactories 并没有提供对mysql的DbProviderFactory的支持所以需要扩充ADONET通用接口兼容mysql而且在 中mysql和sqlserver的ParameterMarkerFormat都有bugADONET通用接口所以扩展类要解决这个bug
public static class DbProviderFactoriesEx
{
public static DbProviderFactory GetFactory(string providerName)
{
if (providerName == null) throw new ArgumentNullException(providerName);
DbProviderFactory dbFactory; switch (providerName)
{
case MySqlDataMySqlClient: return new MySqlClientFactory(); default: return DbProviderFactoriesGetFactory(providerName);
}
}
public static string GetParameterMarkerFormat(DbConnection connect)
{
if (connect == null)
throw new ArgumentNullException(connect);
Type type = connectGetType();
if (type == typeof(MySqlDataMySqlClientMySqlConnection))
return ?{};//mysql bug
if (type == typeof(SystemDataSqlClientSqlConnection))
return @{};//ms bug connectOpen();
string result = connectGetSchema(DataSourceInformation)Rows[][ParameterMarkerFormat]ToString();
connectClose(); return result;
}
}