訪問數據庫有多種不同的技術,包括ADO,ODBC,OLEDB,ADO.NET等這些都有一些共性。首先要建立連接(Connection),然后通過命令(Command)對數據庫進行訪問,最后把結果集放到dataset或者recordset上。
目錄
4.數據庫連接組件... 1
4.1數據庫應用編程方法概述和組件框架... 1
4.1.1 WDAC編程... 1
4.1.2 SNAC編程... 3
4.1.3 ADO.NET編程... 3
4.2 連接字符串... 4
4.3 連接池... 4
4.4 Connection Timeout和Command Timeout. 4
4.5 使用BID Tracing來跟蹤應用程序的執行... 4
4.1數據庫應用編程方法概述和組件框架數據庫編程方法有多種,WDAC(Windows Data access Components)比較主流,主要包括ADO,OLEDB,ODBC等。隨著SQL Server引入新功能,客戶端也需要發展沒酒有了SNAC(SQL Server Native Client)編程方法來解決問題。
編程方法 | 簡單介紹 |
WDAC | 主要包括ADO,ODBC,OLEDB 無需安裝,不隨著sql server變化而變化 對新功能的支持不佳 包含了70多個dll |
SNAC | 只有一個dll,同時包含ODBC和OLEDB功能 需要安裝,隨著SQL Server升級而變化 |
ADO.NET | 基于.net framework 借鑒了ado概念,但是具體實現和ADO不同 |
WDAC之間也成為MDAC(Microsoft Data Access Components)
ADO在WDAC中出于最高層,可以被VB,VBS,C++語言使用
例:
set conn = CreateObject("ADODB.CONNECTION")
set rs=CreateObject("ADODB.Recordset")
set cmd=CreateObject("ADODB.Command")
conn.open "PRovider=sqloledb;Server=xxx;Trusted_Connection=Yes"
當然這里的provider也可以使用MSDASQL
ADO可以說是對dsn,odbc,oledb這些系統級的編程接口的匯接。
例:
set conn = CreateObject("ADODB.Connection") Set rs = CreateObject("ADODB.RECORDSET") 'conn.Open "Driver=SQL Server;server=127.0.0.1;Database=master;uid=sa;pwd=xxx;" 'ODBC'conn.Open "DSN=local;uid=sa;pwd=xxx;" 'DSNconn.Open "Provider=sqloledb.1;server=127.0.0.1;Database=master;uid=sa;pwd=xxx;" 'oledbset rs = conn.Execute("select servername=@@servername") MsgBox( rs("servername"))4.1.1.2 OLEDB Core Services
主要提供一些規范檢查和連接池的支持
4.1.1.3 OLEDB ProvidersWDAC自導的Provider有SQLOLEDB和MSDASQL,SQLOLEDB開發比ADO麻煩,ADO對方法方法進行了封裝。所以比較簡單。
4.1.1.4 ODBC Driver ManagerODBC上面有一層ODBC Driver Manager 主要是保證不同驅動支持的ODBC API的統一。
4.1.1.5 ODBC Dirvers可以在管理工具的數據源(ODBC)的驅動上查看
光WDAC都有很多種訪問數據的方法,但是最終都是使用TDS協議和數據庫進行交互。查看TDS協議可以使用:
1.可以用網絡監控工具來監控
2.開啟trace flag 4052,4055,3605可以把TDS數據發送到錯誤日志上。
4.1.2 SNAC編程SQL Server Native Client是在sql server 2005之后引入的OLEDB,ODBC編程方法。只要是為了支持新的功能。
4.1.3 ADO.NET編程主要用于.net framework開發,ADO.NET也可以調用WDAC或者SNAC來實現。
4.2 連接字符串略
4.3 連接池連接池的存在是為了減少tcp連接的時間,從而提高性能。當以非連接池方式連接數據庫時,profile中audit login事件的eventsubclass為nonpooled,如果為連接池方式連接,那么eventsubclass為pooled。
對于ado.net建議使用using來使用連接池,這樣using塊結束后會馬上釋放到連接池。
4.4 Connection Timeout和Command TimeoutConnection Timeout是連接超時
Command Timeout是命令超時
超時主要有以下幾方面:
1.從連接池獲取一個連接超時
2.創建一個新的連接超時
3.發送一個命令(Command)到數據庫超時
4.使用帶有context connection=true的屬性連接發送命令(Command)到數據庫超時。
5.當不是顯示的發送命令(implicitly)到數據庫超時。
6.執行異步命令時超時
7.從服務端獲取記錄時超時
8.使用bulk copy時超時。
上面8個,最有前面2個是屬于 Connection Timeout,其他都是Command Timeout。
Connection TimeOut和Command Timeout報錯的命令也不同。
對于ado.net默認超時時間都是15s,如果為0表示無限等待。
4.5 使用BID Tracing來跟蹤應用程序的執行所謂的BID跟蹤是在源代碼關鍵位置的信息打印,平時會影響性能。所以沒有開啟。
步驟:
1. 下載BID TRACE所需要的文件
http://download.microsoft.com/download/e/d/3/ed3cdde1-0ffc-4abc-8bc2-d62f206d1a3d/Data_Access_Tracing_2008.exe,解壓縮后,文件目錄結構如圖4-9所示。
2. 修改注冊表HKEY_LOCAL_MACHINE/Software/Microsoft/BidInterface/Loader, 加:Path值,如圖4-10所示。
注意a:如果是32位應用程序跑在64位系統上,則修改相應的HKLM/Software/Wow6432Node/Microsoft/BidInterface/Loader。
注意b:Path前面有一個冒號。
注意c:如果是跟蹤ADO.NET2.0,則注冊表值為%SYSTEMROOT%/Microsoft.NET/Framework/v2.0.50727/ADONETDiag.dll,如果是跟蹤WDAC或SNAC,則值為msdadiag.dll。
3. 打開一個命令窗口,編譯MOF文件。
到MOF_Files文件夾下面,執行命令:mofcomp all.mof。
4. 重新啟動應用程序。
在監控之前,我們需要重新啟動應用程序,否則抓不到BID Trace信息。
5.在Control_GUID_Files文件夾下面,選定要監控的模塊,如ctrl.guid.mdac,再對該文件進行修改,只選擇要監控的DLL。
6. 開始監控。
LogmanstartMyTrace-pfctrl.guid.mdac-ctperf-oout.etl-ets
參考:
新聞熱點
疑難解答