当我们在连接MSSQLSEVER的时候一般都是 SqlConnection con = new SqlConnection(ConStr);这样的格式格式来创建连接字符串的这是时候我们我们似乎感觉他很方便但是突然那一天你的老板给你给一个Oracle的备份数据库你是不是还要 OracleConnection con= new OracleConnection(conStr);又突然老板突发奇想觉得数据量也不大而且ACCESS还蛮潮流的你给我换成ACCESS要我哪里都可以直接打开你是否又要OleDbConnection conn = new OleDbConnection(conStr);刚做好了突然老板说客户需要DB了这孩子终于按耐不住了这不是折腾人么#·¥%&¥……
于是乎他就想了想NET的思想就是提供统一的规范化来管理一切对象那么我们就来追蹤一下本源从源头上来解决问题
他就开始这样查看
他发现IDbConnection接口已经提供了我们通常所需要的基本的方法
看到这里他想到了利用类型转化(将一个接口变量指向实现接口的类的一个实例当然这个也可以书面的第一位隐式转化的部分内容)
那么我还需要这样
OleDbConnection Code
// Assumes connectionString is a valid connection string
using (OleDbConnection connection =
new OleDbConnection(connectionString))
{
connectionOpen()
// Do work here
}
或者
OdbcConnection Code
// Assumes connectionString is a valid connection string
using (OdbcConnection connection =
new OdbcConnection(connectionString))
{
connectionOpen()
// Do work here
}
或者
OracleConnection Code
// Assumes connectionString is a valid connection string
using (OracleConnection connection =
new OracleConnection(connectionString))
{
connectionOpen()
// Do work here
}
OracleConnection nwindConn = new OracleConnection(Data Source=MyOracleServer;Integrated Security=yes;)
nwindConnOpen()
事实证明完全可以省略这些繁琐的步骤
我们现在只需要这样
IDbConnection conn= new OracleConnection(conStr)
IDbConnection conn= new new OleDbConnection(conStr)
IDbConnection conn= new SqlConnection(ConStr)
是不是感觉依旧繁琐呢因为先还没有直观的展示给大家现在我们就上代码来展示下他的优点
using System;
using SystemConfiguration;
using SystemDataOleDb;
using SystemData;
using SystemDataSqlClient;
using SystemDataOracleClient;
namespace IFADO
{
class Program
{
static void Main(string[] args)
{
string conStr = ConfigurationManagerConnectionStrings[conStr]ConnectionString;
string privider = ConfigurationManagerConnectionStrings[conStr]ProviderName;
IDbConnection conn;
switch (privider)
{
case Access: conn = new OleDbConnection(conStr) break;
case SQLSever: conn = new SqlConnection(conStr) break;
case Oracle: conn = new OracleConnection(conStr) break;
default: throw new Exception(未找到合适的数据库请扩展!)
}
using(conn)
{
connOpen()
using (IDbCommand cmd = connCreateCommand())
{
cmdCommandText = SELECT * FROM Test_TableORDER BY Test_TableID DESC;
cmdExecuteNonQuery()
}
ConsoleWriteLine(完成查询!)
ConsoleReadKey()
}
}
}
}
此时我们操心的只有配置文件中的ProviderName节点的值了但是我们可以放心的扩展数据库而不用担心他是否会正常执行