ASP:用ADO连接数据库的三种方法及其性能比较

  ADO连接数据库通常有三种方法:System DSN Connection,DSN-less Connection 和 OLE DB Connection,这是大家都非常熟悉的,他们的使用方法如下:
  
  (注:三种方法的差别在于使用的是哪个关键字 - DSN,Driver,Data Source,Provider。UID,PWD 是 ODBC 的标记,User ID,Password 是 OLEDB 的标记。特别指出的是 Data Source 在 ODBC 标记中表示数据源,等同于 DSN,在 OLEDB 标记中表示服务器名或数据库名。)
  
  ’System DSN Connection
  Set cnn = Server.CreateObject("ADODB.Connection")
  cnn.Open "DSN=your_dsn;UID=user_name;PWD=password;"
  ’或用 OLEDB 标记
  cnn.Open "Data Source=your_dsn;User ID=user_name;Password=password;"
  
  ’DSN-less Connection
  ’以SQL Server为例
  Set cnn = Server.CreateObject("ADODB.Connection")
  cnn.Open "driver={SQL Server};server=server_name;uid=user_name;pwd=pwd;database=pubs"
  
  ’OLE DB Connection
  ’以SQL Server为例
  Set cnn = Server.CreateObject("ADODB.Connection")
  cnn.Open "provider=sqloledb;data source=server_name;initial catalog=pubs;user id=user_name;password=pwd;"
  
  下面,我们讨论一下他们各自的性能。
  
  从本质上说,System DSN 和 DSN-less Connection 都是通过 ODBC 和数据库进行连接的,他们之间差别不大(事实上也确实如此)。有非常多人说 DSN-less Connection 要优于 System DSN Connection,对这一点我不反对。(是不是前后有些矛盾,刚说他们差别不大,目前又......)我原来分别对这两种连接测试过,不过失败了。因为我的测试数据没有规律,根本说明不了问题(或许用假设检验能比较两者的性能,不过得算死)。于是我得出了结论:没有结论!后来在网上看到一篇文章 System DSN or DSN-less Connection? 算是有了答案。
  
  结论就是(这是原文):
  
  These tests showed that DSN-less connection were slightly faster than System DSN Connections.The increase in performance was nothing monumental;the greatest performance boost was mere 13% faster with 64 concurrent requests.For one,two,or four concurrent requests,there was virtually no performance improvement.In fact,no noticeable improvement is seen in a DSN-less connection over a System DSN until there are 10 or more concurrent connections.
  
  为什么?因为 System DSN 在连接时要读注册表。
  
  目前只有OLE DB没有说了(打字真累)。OLE DB 比 ODBC 要高效的多。
  
  根本不用测试,这个结论是显而易见的。如果你更有些怀疑,建议去看看 连接池(Connection Pooling)介绍 那里有 MDAC framework 的图示,从图中能看出,经 ODBC 连接是 ADO-->OLE DB-->ODBC Provider-->ODBC-->driver-->数据库;经 OLE DB 是 ADO-->OLE DB-->DB Provider-->数据库。哪个更直接?当然是 OLE DB!
  
  OLE DB 连接数据库比 ODBC 快,检索数据比 ODBC 快。所以,我建议每一个在网上安家的人:用OLE DB!
  
  Set cnn = Server.CreateObject("ADODB.Connection")
  ’Connection string for SQL Server
  cnn.Open "Provider=SQLOLEDB;Data Source=srvName;Initial Catalog=DBname;User ID=user_id;Password=yourPassword;"
  
  ’for Access
  cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db_path"
  
  连接数据库就是这么容易!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值