SQL Server 2012实施与管理实战指南(笔记)——Ch4数据库连接组件
4.数据库连接组件访问数据库有多种不同的技术,包括ADO,ODBC,OLEDB,ADO.NET等这些都有一些共性。首先要建立连接(Connection),然后通过命令(Command)对数据库进行访问,最后把结果集放到dataset或者recordset上。目录4.数据库连接组件... 14.1数据库应用编程方法概述和组件框架... 14.1.1 WDAC编程... 14.1.2 SNAC编程... 34.1.3 ADO.NET编程... 34.2 连接字符串... 44.3 连接池... 44.4 Connection Timeout和Command Timeout. 44.5 使用BID Tracing来跟踪应用程序的执行... 44.1数据库应用编程方法概述和组件框架数据库编程方法有多种,WDAC(Windows Data Access Components)比较主流,主要包括ADO,OLEDB,ODBC等。随着SQL Server引入新功能,客户端也需要发展没酒有了SNAC(SQL Server Native Client)编程方法来解决问题。编程方法简单介绍WDAC主要包括ADO,ODBC,OLEDB无需安装,不随着sql server变化而变化对新功能的支持不佳包含了70多个dllSNAC只有一个dll,同时包含ODBC和OLEDB功能需要安装,随着SQL Server升级而变化ADO.NET基于.net framework借鉴了ado概念,但是具体实现和ADO不同4.1.1 WDAC编程WDAC之间也成为MDAC(Microsoft Data Access Components)
![](http://pic.ikafan.com/imgp/L3Byb3h5L2h0dHBzL2ltYWdlMTA5LjM2MGRvYy5jbi9Eb3dubG9hZEltZy8yMDIwLzExLzI2MTQvMjA4MzczNTA2XzFfMjAyMDExMjYwMjE0NDY3OTAuZ2lm.jpg)
4.1.1.1 ADOADO在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也可以使用MSDASQLADO可以说是对dsn,odbc,oledb这些系统级的编程接口的汇接。例:
![](http://pic.ikafan.com/imgp/L3Byb3h5L2h0dHBzL2ltYWdlMTA5LjM2MGRvYy5jbi9Eb3dubG9hZEltZy8yMDIwLzExLzI2MTQvMjA4MzczNTA2XzJfMjAyMDExMjYwMjE0NDc5LmdpZg==.jpg)
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'))
![](http://pic.ikafan.com/imgp/L3Byb3h5L2h0dHBzL2ltYWdlMTA5LjM2MGRvYy5jbi9Eb3dubG9hZEltZy8yMDIwLzExLzI2MTQvMjA4MzczNTA2XzJfMjAyMDExMjYwMjE0NDc5LmdpZg==.jpg)
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)的驱动上查看
![](http://n4.ikafan.com/assetsj/blank.gif)
光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所示。
![](http://n4.ikafan.com/assetsj/blank.gif)
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。
![](http://n4.ikafan.com/assetsj/blank.gif)
3. 打开一个命令窗口,编译MOF文件。到MOF_Files文件夹下面,执行命令:mofcomp all.mof。4. 重新启动应用程序。在监控之前,我们需要重新启动应用程序,否则抓不到BID Trace信息。5.在Control_GUID_Files文件夹下面,选定要监控的模块,如ctrl.guid.mdac,再对该文件进行修改,只选择要监控的DLL。6. 开始监控。Logman start MyTrace -pf ctrl.guid.mdac -ct perf -o out.etl -ets