(转)用ADO连接数据库的三种方法及其性能比较

上一篇 / 下一篇  2009-03-30 15:54:56 / 个人分类:SQL

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"

连接数据库就是这么容易!

Deer 08:47:54
'for Access
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db_path"


1.
set dbconnection=Server.CREATEOBJECT("ADODB.CONNECTION")
DBPath = Server.MapPath("customer.mdb")
dbconnection.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & DBPath
SQL="select * from auth where id="" & user_id &"""
SET uplist=dbconnection.EXECUTE(SQL)

2.
set dbconnection=Server.CreateObject("ADODB.Connection")
DBPath = Server.MapPath("customer.mdb")
dbconnection.Open "provider=microsoft.jet.oledb.4.0;data source="&dbpath
SQL="select * from auth where id="" & user_id &"""
SET uplist=dbconnection.EXECUTE(SQL)

3.
DBPath = Server.MapPath("customer.mdb")
set session("rs")=Server.CreateObject("ADODB.Recordset")
" rs=Server.CreateObject("ADODB.Recordset")
connstr="provider=microsoft.jet.oledb.4.0;data source="&dbpath
SQL="select * from auth where id="" & user_id &"""
session("rs").Open sql,connstr,1,3

4.
建odbc源xxx
set conn=server.createobject("Adodb.connection")
conn.open "DSN=xxx;UID=;PWD=;Database=customer"


TAG:

 

评分:0

我来说两句

Open Toolbar