SQL server 數據庫連接方式圖示:
ODBC和OLEDB連接的區別
ODBC(開放數據庫互連):是Microsoft引進的一種早期數據庫接口技術。它實際上是ADO的前身。早期的數據庫連接是非常困難的. 每個數據庫的格式都不一樣,開發者得對他們所開發的每種數據庫的底層API有深刻的了解. 因此,能處理各種各樣數據庫的通用的API就應運而生了. 也就是現在的ODBC(Open Database Connectivity), ODBC是人們在創建通用API的早期產物. 有許多種數據庫遵從了這種標准,被稱為ODBC兼容的數據庫.
OLEDB(對象鏈接和嵌入數據庫)位於ODBC層與應用程序之間. 在你的ASP頁面裡,ADO是位於OLEDB之上的"應用程序". 你的ADO調用先被送到OLEDB,然後再交由ODBC處理. 你可以直接連接到OLEDB層,如果你這麼做了,你將看到服務器端游標(recordset的缺省的游標,也是最常用的游標)性能的提升.
用odbc連接數據庫:
odbc中提供三種dsn,它們的區別很簡單:用戶dsn只能用於本用戶。系統dsn和文件dsn的區別只在於連接信息的存放位置不同:系統dsn存放在odbc儲存區裡,而文件dsn則放在一個文本文件中。
它們的創建方法就不說了。
在asp中使用它們時,寫法如下:
A.sql server:
用系統dsn: connstr="DSN=dsnname; UID=xx; PWD=xxx;DATABASE=dbname"
用文件dsn: connstr="FILEDSN=xx;UID=xx; PWD=xxx;DATABASE=dbname"
還可以用連接字符串(從而不用再建立dsn):
connstr="DRIVER={SQL SERVER};SERVER=servername;UID=xx;PWD=xxx"
B.access:
用系統dsn: connstr="DSN=dsnname"
(或者為:connstr="DSN=dsnname;UID=xx;PWD=xxx")
用文件dsn: connstr="FILEDSN=xx"
還可以用連接字符串(從而不用再建立dsn):
connstr="DRIVER={Microsoft Access Driver};DBQ=d:\abc\abc.mdb"
用oledb連接數據庫,寫法如下:
A.sql server:
connstr="PROVIDER=SQLOLEDB;
DATA SOURCE=servername;UID=xx;PWD=xxx;DATABASE=dbname"
B.access:
connstr="PROVICER=MICROSOFT.JET.OLEDB.4.0;
DATA SOURCE=c:\abc\abc.mdb"
值得注意的是,OLE DB對ODBC的兼容性,允許OLE DB訪問現有的ODBC數據源。其優點很明顯,由於ODBC相對OLE DB來說使用得更為普遍,因此可以獲得的ODBC驅動程序相應地要比OLE DB的要多。這樣不一定要得到OLE DB的驅動程序,就可以立即訪問原有的數據系統。
提供者位於OLE DB層,而驅動程序位於ODBC層。如果想使用一個ODBC數據源,需要使用針對ODBC的OLE DB提供者,它會接著使用相應的ODBC驅動程序。如果不需要使用ODBC數據源,那麼可以使用相應的OLE DB提供者,這些通常稱為本地提供者(native provider)。
可以清楚地看出使用ODBC提供者意味著需要一個額外的層。因此,當訪問相同的數據時,針對ODBC的OLE DB提供者可能會比本地的OLE DB提供者的速度慢一些。
OLEDB方式連接
Sql身份驗證模式:Provider="SQLOLEDB;data source=server_name;initial catalog=databasename;uid=username;pwd=password;"
Windows身份驗證模式:ConnectString=”Provider=SQLOLEDB;Data Source=server_name;DataBase=databasename; Integrated Security=SSPI;Persist Security=true”
注釋:(此兩種方式的卻別僅在於windows驗證中用Integrated Security=SSPI代替了sql驗證中的uid=username;pwd=password語句(即指明用戶名、密碼語句))
1.Provider=SQLOLEDB:提供者為SQLOLEDB(此為固定)
2.Integrated Security=SSPI:
集成安全機制采用SSPI
SSPI是Security
Support Provider Interface(Microsoft安全支持提供器接口)SSPI是定義得較全面的公用API,用來獲得驗證、信息完整性、信息隱私等集成安全服務,以 及用於所有分布式應用程序協議的安全方面的服務。
設置Integrated Security為 True 的時候,采用windows身份驗證模式。只有設置為 False 或省略該項的時候,采用 UserID, PWD 來連接。Integrated Security 可以設置為: True, false, yes, no ,還可以設置為:sspi ,相當於 True,建議用這個代替 True。
3.Persist Security Info:堅持安全信息
Persist Security Info屬性的意思是表示是否保存安全信息,其實可以簡單的理解為"ADO在數據庫連接成功後是否保存密碼信息",True表示保存,False表示不保存.ADO缺省為False(即可有可無).總體來說,如果數據庫連接成功後不再需要連接的密碼,出於安全性考慮,還是建議將Persist Security Info設為false,以防止後門程序取得數據庫連接的密碼.
4.initial catalog等同於database(可以互換):指定連接數據庫的名字(如果省略則連接的是當前用戶名的默認數據庫,詳情見下文)
5.DATA SOURCE是SQL服務器的名字
在data source裡用localhost或(local)或“.”都代表本地服務器.
也可用本機的外網IP地址 例如:data
source=192.168.24.71;
ODBC方式連接
使用數據源方式:
此種方式主要是配置odbc數據源,有三種方式,系統dsn、用戶dsn、文件dsn。具體方法這裡不作介紹。配置完數據源以後即可連接:
用系統dsn: connectstring= "DSN=dsnname; UID=username; PWD=password"
用文件dsn: connectstring = "FILEDSN=filedsnname; UID= username; PWD=password "
使用ODBC驅動方式:
使用ODBC 驅動程序, 免去了配置ODBC數據源的步驟, 可以利用ODBC 驅動程序直接與數據庫相連接。
ConnectString="Driver={sql server};server=servername;database=databasename;uid=username;pwd=password;"
詳細注釋(關於windows身份驗證和SQL身份驗證):
Windows身份驗證使用Windows登錄用戶身份連接數據庫,而SQL身份驗證要求顯式地指定SQL Server用戶ID和密碼。要想使用Windows身份驗證,必須在連接字符串中包括 Integrated Security 屬性:
Data
Source=ServerName;Integrated Security=True;
默認情況下,Integrated Security 屬性為 False ,這意味著將禁用Windows身份驗證。如果沒有顯式地把這個屬性的值設置為True,連接將使用SQL Server身份驗證,因此,必須提供SQL Server用戶ID和密碼。Integrated Security屬性還能識別的其他值只有SSPI(Security Support Provider Interface,安全性支持提供者接口).在所有的Windows NT操作系統上,其中包括Windows NT 4.0、2000、XP,都支持值SSPI。它是使用Windows身份驗證時可以使用的惟一接口,相當於把Integrated Security 屬性值設置為True。
在Windows身份驗證模式中,SQL Server使用Windows的安全子系統對用戶連接進行有效性驗證。即使顯示地指定用戶ID和密碼,SQL Server也不檢查連接字符串中的用戶ID和密碼。因為只有Windows NT、2000、XP支持SSPI,因此如果正使用的是這些操作系統,則只能使用Windows集成的安全策略去連接SQL Server。不論使用哪一個操作系統,當使用SQL Server身份驗證時,必須在連接字符串中指定用戶ID和密碼:
Data Source=ServerName;User ID=donaldx;Password=unbreakable
默認情況下,SQL Server 每一個用戶都可指定一個默認數據庫,當在數據庫中創建用戶時,可以設置用戶的默認數據庫。此外,也可以在任意時間更改用戶的默認數據庫。:如下圖
設置好默認數據庫後在連接時可以不指定database(或initial catalog)的值即可連接默認數據庫