接口在ADO.NET中的利用(“provider模式”)

  当我们当接连MSSQLSEVER的时段,一般都是  SqlConnection con = new SqlConnection(ConStr);这样的格式格式来创造连接字符串的,

立是时咱们我们像感到他那个便宜。但是忽然那无异天若的小业主被你让一个Oracle的备份数据库,你是未是还要 OracleConnection con= new OracleConnection(conStr);又陡然老板突发奇想,觉得数据量也非十分,而且ACCESS2010还格外潮流的,你受自己换成ACCESS要自何还可以直接打开,你是不是又如OleDbConnection conn = new OleDbConnection(conStr);刚做好了出人意料老板说客户要DB2了,这孩子到底按耐不住了,这不是折磨人么#·¥%&¥……

乃,他即想了想.NET的思辨就是是供联合的规范化来治本全对象,那么我们不怕来追踪一下溯源,从源头及来化解问题

他就算开始这样查看:

图片 1

他发现IDbConnection接口就提供了咱一般所急需之骨干的道。

见状此他想到了使型转化(将一个接口变量指向实现接口的类的一个实例,当然者也可以书面的首先号隐式转化的部分情节)

这就是说自己还欲如此:

图片 2图片 3OleDbConnection 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 }

或者:

图片 4图片 5OdbcConnection 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 }

或者:

图片 6图片 7OracleConnection 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节点的值了,但是咱可以放心的恢宏数据库,而非用担心他是否会健康实施。

 

 

相关文章