當我們在連接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))
{
connection
Open()
// Do work here
}
或者
OdbcConnection Code
// Assumes connectionString is a valid connection string
using (OdbcConnection connection =
new OdbcConnection(connectionString))
{
connection
Open()
// Do work here
}
或者
OracleConnection Code
// Assumes connectionString is a valid connection string
using (OracleConnection connection =
new OracleConnection(connectionString))
{
connection
Open()
// Do work here
}
OracleConnection nwindConn = new OracleConnection(
Data Source=MyOracleServer;Integrated Security=yes;
)
nwindConn
Open()
事實證明完全可以省略這些繁瑣的步驟
我們現在只需要這樣
IDbConnection conn= new OracleConnection(conStr)
IDbConnection conn= new new OleDbConnection(conStr)
IDbConnection conn= new SqlConnection(ConStr)
是不是感覺依舊繁瑣呢
因為先還沒有直觀的展示給大家
現在我們就上代碼
來展示下他的優點
using System;
using System
Configuration;
using System
Data
OleDb;
using System
Data;
using System
Data
SqlClient;
using System
Data
OracleClient;
namespace IFADO
{
class Program
{
static void Main(string[] args)
{
string conStr = ConfigurationManager
ConnectionStrings[
conStr
]
ConnectionString;
string privider = ConfigurationManager
ConnectionStrings[
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)
{
conn
Open()
using (IDbCommand cmd = conn
CreateCommand())
{
cmd
CommandText =
SELECT * FROM Test_TableORDER BY Test_Table
ID DESC
;
cmd
ExecuteNonQuery()
}
Console
WriteLine(
完成查詢!
)
Console
ReadKey()
}
}
}
}
此時我們操心的只有配置文件中的ProviderName節點的值了
但是我們可以放心的擴展數據庫
而不用擔心他是否會正常執行
From:http://tw.wingwit.com/Article/program/net/201311/13630.html