如何在ADO中使用接口的抽象数据提供程序

在cofig中 appSettings下,配置数据连接类型

 <appSettings>
<!--这个键值映射到枚举值中的某个值-->
<add key="provider" value="SqlServer"/>
<add key="ConnectionString" value="server=服务器名;User ID=用户名;Password=密码;database=数据库名;Max Pool Size=3000;Connect TimeOut=60;Pooling=true"/>
</appSettings>

使用接口的抽象数据提供程序

            Console.WriteLine("******Simple Connecion Factory*****");
IDbConnection mycon = GetConnection(DataProvider.SqlServer);
Console.WriteLine(mycon.GetType()); //通过配置文件
string dataProvString = ConfigurationSettings.AppSettings["provider"];
DataProvider dp = DataProvider.None;
if (Enum.IsDefined(typeof(DataProvider), dataProvString))
{
dp = (DataProvider)Enum.Parse(typeof(DataProvider), dataProvString);
}
else
{
Console.WriteLine("Soryy");
}
IDbConnection myCn = GetConnection(dp);
if (myCn != null)
{
Console.WriteLine(myCn.GetType().Name);
} enum DataProvider
{
SqlServer,
OleDb,
Odbc,
None
} static IDbConnection GetConnection(DataProvider dp)
{
IDbConnection con = null;
switch (dp)
{
case DataProvider.SqlServer:
con = new SqlConnection();
break;
case DataProvider.OleDb:
con = new OleDbConnection();
break;
case DataProvider.Odbc:
con = new OdbcConnection();
break;
case DataProvider.None:
break;
default:
break;
}
return con; ;
}

ADO.NET数据提供程序工厂模型

.NET数据提供程序工厂模式能让我们用多种数据访问类型构建单个代码库。而且通过应用程序配置文件(和全新的<connectionstrings>片段),我们无需重新编译、重新部署程序集就能够更改和获取提供程序和连接字符串。
* 数据提供程序中的类都从相同基类继承并且都被定义在System.Data.Command命名空间内。
*DbCommand:所有命令类的抽象基类
*DbConnction:所有连接类的抽象基类
*DbDataAdapter:所有数据适配器类的抽象基类。
*DbDataReader:所有数据读取器类的抽象基类。
*DbParameter:所有参数类的抽象基类
*DbTransaction :所有事务类的抽象基类
另外,每个微软提供的数据提供程序都有一个继承自System.Data.DbProviderFaCtory 的类。这个基类定义了一些方法来获取某数据提供程序的数据对象

完整的数据提供程序工厂的例子

  string dp = ConfigurationSettings.AppSettings["provider"];
string constr = ConfigurationSettings.AppSettings["ConnectionString"]; DbProviderFactory df = DbProviderFactories.GetFactory(dp);
using (DbConnection cn = df.CreateConnection())
{
Console.WriteLine(cn.GetType().Name);
cn.ConnectionString = constr;
cn.Open(); DbCommand cmd = df.CreateCommand();
Console.WriteLine(cmd.GetType().Name);
cmd.Connection = cn;
cmd.CommandText = "select * from TCustomer";
using (DbDataReader dr = cmd.ExecuteReader())
{
Console.WriteLine(dr.GetType().Name);
while (dr.Read())
{
Console.WriteLine(dr["CreateTime"].ToString());
}
}
}

数据提供程序工厂模型的潜在缺陷

尽管这个模型很强.但是你要知道,代码库其实只能通过抽象基类的成员来使用所有提供程序通用的一些类型和方法。因此在写代码库的时候.你会被局限于system.Data.Common命名空间下的
DbConnection 、 DbCommand 等其他类型公开的成员。

这样,你会发现这种“泛化的”方式使得我们不能直接访问特定DBMS的漂亮功能。如果我们必须调用基础提供程序(比如SqlConnection)的特殊成员,那么可以通过显式强制类型转换就能实现

然而,这样会使代码变得不易维护(也缺乏灵活性).因为我们必须增加许多运行时检测。但如果你希望以最灵活的方式构建数据访问阵,数据提供程序工厂模划提供了一个很好的机制

[connectionstrings]元素

我们的连接字符串数据现在在*.config文件的<appSettings>元素中,应用程序配置文件定义了一个新的元素,叫做<connectionstrings>;你能在这个元素内设置任意多的名称/值组合并且能通过
configurationManager.Connectionstrings 索引器以编程方式访问。这种方式的(相比使用<appsettings>元素和configurationManager.Appsettings 索引器来访问)好处在于它能为你的应用程序以一个统一的方式定义多个连接字符串

具体配置如下

<connectionStrings>
<add name="ECPublic" connectionString="server=服务器名;User ID=用户名;Password=密码;database=数据库名;Min Pool Size=100;Max Pool Size=200;"/>
<add name="CRM" connectionString="server=服务器名;User ID=用户名;Password=密码;database=数据库名;Min Pool Size=100;Max Pool Size=200;"/>
</connectionStrings>

简述在ADO中使用接口的抽象数据提供程序以及ADO.NET数据提供程序工厂模型的更多相关文章

  1. Delphi中的接口和抽象类

    参考:http://blog.csdn.net/xinzheng_wang/article/details/6058643 接口:Interface Delphi中接口中的关键字Interface,但 ...

  2. C#中的接口实现多态

    我们都知道虚方法实现多态,抽象方法实现多态等,我们今天来看看如何使用接口实现多态 1.首先我们先要来了解了解什么是接口,它存在的意识 01.接口就是为了约束方法的格式(参数和返回值类型)而存在的 02 ...

  3. c# 基础(重写与覆盖:接口与抽象,虚函数与抽象函数)

    总结 1:不管是重写还是覆盖都不会影响父类自身的功能(废话,肯定的嘛,除非代码被改). 2:当用子类创建父类的时候,如 C1 c3 = new C2(),重写会改变父类的功能,即调用子类的功能:而覆盖 ...

  4. ADO中最重要的对象有三个:Connection、Recordset和Command

    ConnectionPtr: _ConnectionPtr m_pConnection; HRESULT hr; try{ hr = m_pConnection.CreateInstance(_uui ...

  5. 类与接口(三)java中的接口与嵌套接口

    一.接口 1. 接口简介 接口: 是java的一种抽象类型,是抽象方法的集合.接口比抽象类更加抽象的抽象类型. 接口语法: [修饰符] [abstract] interface 接口名 [extend ...

  6. Java学习笔记二十八:Java中的接口

    Java中的接口 一:Java的接口: 接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明.一个类通过继承接口的方式,从而来继承 ...

  7. 面向对象在JavaScript中的接口实现

    接口是面向对象编程的基础.它是一组包括了函数型方法的数据结构,与类一样.都是编程语言中比較抽象的概念.比方生活中的接口.机顶盒.人们利用它来实现收看不同频道和信号的节目,它宛如对不同类型的信息进行集合 ...

  8. C#中的接口和抽象类学习

    今天学习了接口和抽象类,但并没有很好的进行整理,所以现在写的时候,脑子里多少有点乱乱的,先从接口开始吧. interface 接口,规定了所有派生类的需要遵循的标准,接口定义了需要做些什么,但是没有具 ...

  9. 1-JAVA类、接口、抽象、多态

    类中全部成员变量用priviate修饰,用get获取,set设值 对于boolean类型的值,getter方法也一定要写成isXXX 的形式,而setXXX类型不变 this关键字的作用 当方法的局部 ...

随机推荐

  1. APP界面设计与页面布局的23条基本原则

    一个App的好与不好,很大部分取决于移动App页面布局的合理性,优秀的布局顾名思义就是对页面的文字.图形或表格等进行排版.设计. 优秀的布局,需要对页面信息进行完整的考虑,既要考虑用户需求.用户行为, ...

  2. 循环神经(LSTM)网络学习总结

    摘要: 1.算法概述 2.算法要点与推导 3.算法特性及优缺点 4.注意事项 5.实现和具体例子 6.适用场合 内容: 1.算法概述 长短期记忆网络(Long Short Term Memory ne ...

  3. 自行实现 dotnet core rpc

    前言 小李:“胖子,上头叫你对接我的数据好了没有?” 胖子:“那是你的事,你都不提供数据源,我咋接?” 小李:“你想要什么样的数据源?” 胖子:“我想要一个调用简单点的!” 小李:“我这个数据源是在l ...

  4. RK3399配置笔记

    1. adb shell 默认超级管理员 在build/core/main.mk下将ADDITIONAL_DEFAULT_PROPERTIES += ro.secure=1改成ADDITIONAL_D ...

  5. Github:修改Github仓库中项目语言类型

    前述 有的时候我们把项目上传到github仓库上时语言会显示错误语言 比如一个java项目可能因为有js文件的存在而被识别为js项目 这种时候我们就要手动去修改Github的项目语言类型 解决办法 在 ...

  6. SpringCloud学习系列之四-----配置中心(Config)使用详解

    前言 本篇主要介绍的是SpringCloud中的分布式配置中心(SpringCloud Config)的相关使用教程. SpringCloud Config Config 介绍 Spring Clou ...

  7. 安全研究 | Jenkins 任意文件读取漏洞分析

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由云鼎实验室 发表于云+社区专栏 一.漏洞背景 漏洞编号:CVE-2018-1999002 漏洞等级:高危 Jenkins 7 月 18 ...

  8. Unity_新手必懂知识点

    翻车了!!!一个小例子带你了解闭包.事故现场:场景:6个button,上方1个text.点击button,text会显示button上的数字.代码如下: //在unity里面赋值public List ...

  9. Java基础练习2(构造方法)

    1.以下关于面向对象概念的描述中,不正确的一项是() A.在构造方法中,this()只能出现在构造方法第一行位置 B.在构造方法中,super()只能出现在构造方法第一行位置 C.this()和sup ...

  10. IDEA编写css样式报错

    粗心大意!浪费了30分钟时间,必须记录一下! 报错图片 琢磨了半天,没想出是哪里错了,很无奈!!!!!!!!! 度娘:ctrl+shift+alt+H,设置成NONE就可以了 试了一下,果然好使,不再 ...