分享
 
 
 

防止ADO连接SQL Server时的隐式连接

王朝mssql·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

防止ADO连接SQL Server时的隐式连接

Report Date: 2002/9

Prepared by: 郑 昀

Article last modified on 2002-9

The information in this article applies to:

ü Microsoft SQL Server 2000,7.0

ü Microsoft ADO 2.5

问题陈述:

数据库服务器:Microsoft SQL Server 2000以及7.0;

数据库服务器补丁:Microsoft SQL Server 2000 ServicePack1;

ADO名称:Microsoft Data Access - ActiveX Data Objects 2.5 Type Library

ADO版本:2.61.7326.0

执行下面的VB代码时,我们的开发人员产生了疑问:

cnn.Open "Provider=SQLOLEDB.1;

Persist Security Info=False;User ID=sa;

Initial Catalog=freemail;Data Source=svr;ConnectionTimeout=10", "", "", -1

sql = "select * from users"

Set rs = cnn.Execute(sql)

Set rs2 = cnn.Execute(sql)

Set rs3 = cnn.Execute(sql)

执行这段代码时,在SQL Server Profiler中看到,每个sql语句执行之前都会有一个Audit Login事件。而Audit Login事件的解释是:“收集自跟踪启动后发生的所有新的连接事件,例如客户端请求连接到运行 Microsoft® SQL Server™ 实例的服务器”。也就是说,用Connection对象连接SQL Server之后,每次执行sql语句时仍然会重新建立一次连接,即使用的是同一个Connection?!

建立连接的事件探查记录(按时间顺序)为:

EventClass

Text Data

TraceStart

Audit Login

(第一次连接)

-- network protocol: LPC

set quoted_identifier on

set implicit_transactions off

set cursor_close_on_commit off

set ansi_warnings on

set ansi_padding on

set ansi_nulls on

set concat_null_yields_null on

set language 简体中文

set dateformat ymd

set datefirst 7

SQL:Stm tStarting

Select * from users

Audit Login

(第2次连接)

-- network protocol: LPC

set quoted_identifier on

set implicit_transactions off…略

SQL:Stm tStarting

Select * from users

Audit Login

(第3次连接)

-- network protocol: LPC

set quoted_identifier on

set implicit_transactions off…略

SQL:Stm tStarting

Select * from users

Audit Logout

Audit Logout

Audit Logout

TraceStop

而如果每句cnn.Execute后面加上rs.close(),则每个execute之前不会有Audit Login事件,而是连续的3个SQL:StmtStarting事件。

这样频繁建立物理连接,是否会影响性能?照例说应该重用同一个连接才对呀?

Cause:

这种情况叫做隐式登录。

当set一个ADO.Recordset对象接收ADO.Connection.Execute返回的记录集时,就会出现隐式登录,再次和数据库服务器建立一次物理连接,而且这个连接还没有办法重用,也不能池化。

这个的原因是:

Because the SQL Server OLE DB provider doesn't permit more than one set of results to be pending on a connection where the results are being returned by means of a forward-only, read-only (default-resultset) cursor, the provider needs to create an additional SQL Server connection to execute a second command on the connection. The provider will only do this implicitly if the Data Source property DBPROP_MULTIPLECONNECTIONS is set to VARIANT_TRUE.

可以参考微软的KB文档:

http://support.microsoft.com/default.aspx?scid=kb;EN-GB;q271128&GSSNB=1

《PRB: Implicit Connections Created by the SQL Server OLE DB Provider (SQLOLEDB) Are Not Pooled》

【不会重复建立数据库连接的代码片断】:

通过改变ADO.Recordset的属性避免隐式登录

Dim cn As New ADODB.Connection

Dim rs As New ADODB.Recordset

Dim rs2 As New ADODB.Recordset

cn.open ..........

rs.CursorType = adOpenStatic

rs.ActiveConnection = cn

rs.Open "select * from orders"

rs.CursorType = adOpenStatic

rs2.ActiveConnection = cn

rs2.Open "select * from orders"

看来,确实如微软所说的,只有接收默认的记录集时才会发生隐式连接。如果设置ADO.Recordset为其它类型,如静态集,就不会发生这个问题。

当然,默认的记录集的属性forward-only、read-only情况执行速度最快。

Writen by zhengyun@tomosoft.com

本文档所包含的信息代表了在发布之日,ZhengYun 对所讨论问题的当前看法,Zhengyun 不保证所给信息在发布之日以后的准确性。

本文档仅供参考。对本文档中的信息,Zhengyun 不做任何明示或默示的保证。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有