欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

接口在ADO.NET中的应用

程序员文章站 2022-03-26 11:06:39
当我们在连接mssqlsever的时候,一般都是  sqlconnection con = new sqlconnection(constr);这样的格式格式来创建连接字...

当我们在连接mssqlsever的时候,一般都是  sqlconnection con = new sqlconnection(constr);这样的格式格式来创建连接字符串的,

这是时候我们我们似乎感觉他很方便。但是突然那一天你的老板给你给一个oracle的备份,你是不是还要 oracleconnection con= new oracleconnection(constr);又突然老板突发奇想,觉得数据量也不大,而且access2010还蛮潮流的,你给我换成access要我哪里都可以直接打开,你是否又要oledbconnection conn = new oledbconnection(constr);刚做好了突然老板说客户需要db2了,这孩子终于按耐不住了,这不是折腾人么#·¥%&¥……

于是乎,他就想了想.net的思想就是提供统一的规范化来管理一切对象,那么我们就来追踪一下本源,从源头上来解决问题

他就开始这样查看:

 接口在ADO.NET中的应用

 


他发现idbconnection接口已经提供了我们通常所需要的基本的方法。
看到这里他想到了利用类型转化(将一个接口变量指向实现接口的类的一个实例,当然这个也可以书面的第一位隐式转化的部分内容)
那么我还需要这样:
  oledbconnection code
 
1 // assumes connectionstring is a valid connection string.
2 using (oledbconnection connection =
3   new oledbconnection(connectionstring))
4 {
5     connection.open();
6     // do work here.
7 }
 
或者:
  odbcconnection code
 
1 // assumes connectionstring is a valid connection string.
2 using (odbcconnection connection =
3   new odbcconnection(connectionstring))
4 {
5     connection.open();
6     // do work here.
7 }
 
或者:
  oracleconnection code
 
 1 // assumes connectionstring is a valid connection string.
 2
 3 using (oracleconnection connection =
 4
 5   new oracleconnection(connectionstring))
 6
 7 {
 8
 9     connection.open();
10
11     // do work here.
12
13 }
14
15 oracleconnection nwindconn = new oracleconnection("data source=myoracleserver;integrated security=yes;");
16
17 nwindconn.open();
 
 
事实证明完全可以省略这些繁琐的步骤。
我们现在只需要这样:
idbconnection conn= new oracleconnection(constr);
idbconnection conn= new new oledbconnection(constr);
idbconnection conn= new sqlconnection(constr);
是不是感觉依旧繁琐呢,因为先还没有直观的展示给大家,现在我们就上代码,来展示下他的优点:
 
 1 using system;
 2 using system.configuration;
 3 using system.data.oledb;
 4 using system.data;
 5 using system.data.sqlclient;
 6 using system.data.oracleclient;
 7
 8 namespace ifado
 9
10 {
11     class program
12     {
13         static void main(string[] args)
14         {
15             string constr = configurationmanager.connectionstrings["constr"].connectionstring;
16             string privider = configurationmanager.connectionstrings["constr"].providername;
17             idbconnection conn;
18             switch (privider)
19             {
20                 case "access": conn = new oledbconnection(constr); break;
21
22                 case "sqlsever": conn = new sqlconnection(constr); break;
23
24                 case "oracle": conn = new oracleconnection(constr); break;
25
26                 default: throw new exception("未找到合适的数据库,请扩展!);
27             }
28           using(conn)
29
30           {
31                 conn.open();
32                 using (idbcommand cmd = conn.createcommand())
33                 {
34                     cmd.commandtext = "select * from test_tableorder by test_table.id desc";
35
36                     cmd.executenonquery();
37                 }
38                 console.writeline("完成查询!");
39
40                 console.readkey();
41             }
42         }
43     }
44 }
 
此时我们操心的只有配置文件中的providername节点的值了,但是我们可以放心的扩展数据库,而不用担心他是否会正常执行。

 

作者 谢舸哥