4.数据库连接组件

访问数据库有多种不同的技术,包括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不同

4.1.1 WDAC编程

WDAC之间也成为MDAC(Microsoft Data Access Components)

4.1.1.1 ADO

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;" 'DSN
conn.Open "Provider=sqloledb.1;server=127.0.0.1;Database=master;uid=sa;pwd=xxx;" 'oledb
set rs = conn.Execute("select servername=@@servername")
MsgBox( rs("servername"))

4.1.1.2 OLEDB Core Services

主要提供一些规范检查和连接池的支持

4.1.1.3 OLEDB Providers

WDAC自导的Provider有SQLOLEDB和MSDASQL,SQLOLEDB开发比ADO麻烦,ADO对方法方法进行了封装。所以比较简单。

4.1.1.4 ODBC Driver Manager

ODBC上面有一层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 Timeout

Connection 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.NET
2.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. 开始监控。

Logman start MyTrace -pf ctrl.guid.mdac -ct perf -o out.etl -ets

参考:

http://book.51cto.com/art/201303/386758.htm

http://blog.csdn.net/ithomer/article/details/6624684

SQL Server 2012实施与管理实战指南(笔记)——Ch4数据库连接组件的更多相关文章

  1. SQL Server 2012实施与管理实战指南(笔记)——Ch3Alwayson可用组

    3.AlwaysOn可用组 Alwayson支持的,是一个可用性组,每个可用性组是包含了多个用户数据库的容器,可用性组内的数据库可以作为一个整体进行故障转移. AlwaysOn关键特性: 一.类似集群 ...

  2. SQL Server 2012实施与管理实战指南(笔记)——Ch5启动SQL Server服务和数据库

    5.启动SQL Server服务和数据库 在数据库和服务启动过程中,经常会出现的问题: 1.SQL Server实例无法正常启动 2.系统数据库无法正常启动 3.网络配置失败 4.用户数据库无法启动 ...

  3. SQL Server 2012实施与管理实战指南(笔记)——Ch6连接的建立和问题排查

    6.连接的建立和问题排查 会话的建立分成2个部分: 1.连接,即找到这个实例 2.认证,告诉sql server谁要连接 目录 6.连接的建立和问题排查 6.1协议选择和别名 6.1.1 服务器网络配 ...

  4. 《SQLSERVER2012实施与管理实战指南》前4章节笔记内容

    <SQLSERVER2012实施与管理实战指南>前4章节笔记内容 <SQLSERVER2012实施与管理实战指南>的前面4章是<SQLSERVER企业级平台管理实践> ...

  5. SQL Server 2012 AlwaysOn集群配置指南

    1. AlwaysOn介绍 AlwaysOn是SQL Server 2012提供的全新综合.灵活.高效经济的高可用性和灾难恢复解决方案.它整合了镜像和群集的功能,基于OS 故障转移群集(Windows ...

  6. SQL Server 2012故障转移的looksalive check和is alive check

    什么是looksalive check和is alive check SQL Server故障转移集群是建立在windows集群服务上的一种热备的高可用方案.在集群运行过程中,windows集群服务定 ...

  7. SQL server 2012 阻塞分析查询

    最近公司的数据库并发有点大,由于CPU不高.内存不高.硬盘正常.网络也正常等等,但系统还是会卡,所以就怀疑是数据库阻塞导致的,于是去查询资料,看书及经过用以下sql观查,经过几天对数据的分析找到原因并 ...

  8. SQL Server 2012 内存管理 (memory management) 改进

    SQL Server 2012 的内存管理和以前的版本相比,有以下的一些变化. 一.内存分配器的变化 SQL Server 2012以前的版本,比如SQL Server 2008 R2等, 有sing ...

  9. 【转】SQL Server 2012 配置AlwaysOn(三)

    转载自:http://www.cnblogs.com/lyhabc/p/4682986.html 从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn) 第一篇http:/ ...

随机推荐

  1. LocalDB:微软的新生代轻量级数据库

    什么是LocalDB 随着SQL Server 2012的发布,LocalDB跃入我们的视线,它可以被看做是SQL Server Express的轻量级版本.LocalDB专门为开发人员创建,它非常易 ...

  2. Ajax中传递Json格式的参数

    $.ajax({ type: "post", url: baseUrl+"sys/login", dataType: "json", con ...

  3. Spring web应用最大的败笔

    第一篇 介绍下IOC DI Spring主要是业务层框架,现在已经发展成为一个完整JavaEE开发框架,它的主要特点是IoC DI和AOP等概念的融合,强项在面向切面AOP.推出之初因为Ioc/AOP ...

  4. 配置WCF Test Client

    用vs2010建立了一个wcf项目,通过F5直接运行那服务文件,就出现了一个”The dependent tool 'svcutil.exe' is not found“, , 之后想通过“tool- ...

  5. socket.io,系统api,

    原文:http://www.cnblogs.com/xiezhengcai/p/3956401.html 1. 服务端 io.on('connection',function(socket)); 监听 ...

  6. Java实现多线程并发

    import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util ...

  7. I am back

    2012年11月13日,博客园最后一篇日志,三年半,i am back.

  8. Centos安装Memcached和(Nginx)Memcache扩展详细教程

    下载memadmin,下载地址:http://www.junopen.com/memadmin/ 并在IIS新建站点. 测试地址:http://wap.yousawang.com/mem , 1.重启 ...

  9. 使用ruby搭建简易的http服务和sass环境

    使用ruby搭建简易的http服务和sass环境 由于在通常的前端开发情况下,我们会有可能需要一个http服务,当然你可以选择自己写一个node的http服务,也比较简单,比如下面的node代码: v ...

  10. Linux下Oracle重启问题

    一.切换成oracle用户 $ su - oracle 注意:不要写成“su oracle ”不然是没办法使用下面的命令的. 如下所示:将会报:command not found的错误 二.使用命令 ...