如何在ado中使用connection 对象

作者:网络 来源:佚名 更新时间:2008-07-07 10:50:19 点击:
什么是connection对象?

一个connection对象描述了到数据源的物理连接。你可以使用odbc也可以利用ole db来连接数据源。当你打开一个connectiont对象时你就会试图连接数据库。connection对象的state属性会告诉我们连接是否成功。通过connection对象的execute方法向数据源发送sql语句或运行存存储过程。如果你向数据源发送的命令要求数据源返回记录集,那么记录集对象会自动的被创建。当你连接上数据库后你可以关闭connection对象。

connection 对象的方法和属性有哪些呢?

下表列出了connection一些常用的方法。

方法
描述

open
打开一个数据源连接

close
关闭与数据源的连接以及相关的对象

execute
执行一个相关的查询(sql语名或存储过程,或数据提供者特定文本)

begintrans
开始一个新事务

committrans
.

保存一些改变或当前的事务目的是为开始一个新事务

rollbacktrans
取消一些改变在当前事务和结束事务时,目的是开始一个新事务



下表列出了一些常用的connection对象的属性。

属性
描述

connectionstring
包含建立与数据源的连接的相关信息

connectiontimeout
显示尝试建立与数据源的连接和产生错误所花去的时间

commandtimeout
显示在中断一个尝试和返回一个错误前执行该项指令所花去的时间

state
表明是否与数据源连接上或已关闭或正在连接中

provider
显示连接提供者的名称

version
显示ado版本号

cursorlocation
设定或返回一个提供者光标函数的定值


如何利用connection对象连接数据源?

用一个connnection 对象,只要指定一个connection字符串,目的是用来指定你想要联结的数据源,然后调用open方法来建立链接。

通过connection string提供的信息用open方法可以非常轻松的建立与数据的连接。如果你决定用connection对象进行工作,那么你可以用它的state属性。如果connection对象被打开了那么它的返回值为adstateopen,如果不是它的返回值为adstateclosed.下面的例子是利用odbc建立与sql的连接。

sub connectionexample1()
dim cnn as adodb.connection
set cnn = new adodb.connection
' 用odbc打开连接.
cnn.open "pubs", "sa", ""
' 检查是否完成连接
if cnn.state = adstateopen then
msgbox "welcome to pubs!"
else
msgbox "sorry. no pubs today."
end if
关闭connection对象
cnn.close
end sub
如果你只需要连接一个数据源。下面的代码要比上面的简单。作为选择,你可以创建一个connection对象,在调用open方法前你可以先设置connectionstring属性。这种方法容许你连接一个数据源后再重新用这个对象再连接另一个数据源。
sub connectionexample2()
dim cnn as adodb.connection
set cnn = new adodb.connection
' 用odbc dsn 建立连接
cnn.connectionstring = "dsn=pubs;uid=sa;pwd=;"
cnn.open
' 检查是否与数据源建立了连接.
if cnn.state = adstateopen then
msgbox "welcome to pubs!"
else
msgbox "sorry. no pubs today."
end if
'关闭connection对象
cnn.close
end sub
在你对connection对象建立连接前,你可以设置它的其它属性。例如,你可以设置连接超时。

sub connectionexample3()
dim cnn as adodb.connection
set cnn = new adodb.connection
' 设置connection属性
cnn.connectionstring = "dsn=pubs;uid=sa;pwd=;"
cnn.connectiontimeout = 30
' 打开connection 对象
cnn.open
' 检查是否已经连接上数据源
if cnn.state = adstateopen then
msgbox "welcome to pubs!"
else
msgbox "sorry. no pubs today."
end if
' 关闭connection对象
cnn.close
end sub
connectionstring属性的语法结构假定数据源已经被建立或利用系统管理员的身份使用odbc.不依靠存在的odbc数据源变得流行起来。这样就减轻了安装的负担。下面的例子是一个连接sql server的可选择性的方法,仅依靠本身存在的odbc driver

. sub connectionexample4()
dim cnn as adodb.connection
set cnn = new adodb.connection
'利用引用odbc driver打开connection对象
cnn.connectionstring = "driver={sql server};" & _
"server=rgreennt;uid=sa;pwd=;database=pubs"
cnn.open
' find out if the attempt to connect worked.
'检查是否已经建立连接
if cnn.state = adstateopen then
msgbox "welcome to pubs!"
else
msgbox "sorry. no pubs today."
end if
' 关闭connection对象
cnn.close
end sub
现在odbc driver 有更广的变化,你可以用ado和数据源对话。不久将会有更的的ole db提供者与数据源建立连接。the microsoft® ole db provider for odbc是当前ado默认的提供者。你能用不同的提供者设置connection对象的provider属性。

sub connectionexample5()
dim cnn as adodb.connection
set cnn = new adodb.connection
'设置provider属性利用ole db provider for odbc
cnn.provider = "msdasql"
'用odbc dsn打开connection对象
cnn.connectionstring = "driver={sql server};" & _
"server=rgreennt;uid=sa;pwd=;database=pubs"
cnn.open

'检查是否连接上数据源
if cnn.state = adstateopen then
msgbox "welcome to pubs!"
else
msgbox "sorry. no pubs today."
end if

'关闭connection对象
cnn.close

end sub
上面的代码设置provider属性不是必须因为ado的默认提供者就是ole db provider for odbc.这里只是认你知道当你用其它的ole db providers时如何设置。

我如何用connection对象执行command?

connnetion的execute方法用来发送一个command(一个sql指令或其它的文本信息)到数据源。如果在sql指令中要求返回几行记录集,一个recordset对象将会被自动的建立。

sub connectionexample6()
dim cnn as adodb.connection
dim rs as adodb.recordset
set cnn = new adodb.connection
' 引用 odbc driver 建立连接.
cnn.connectionstring = "driver={sql server};" & _
"server=rgreennt;uid=sa;pwd=;database=pubs"
cnn.open
' 执行sql 语句创立一个recordset对象.
set rs = cnn.execute("select * from authors")
' 显示第一个 author.
msgbox rs("au_fname") & " " & rs("au_lname")
' 断开连接
rs.close
end sub
记住用execute返回的recordset是只读的,并且是仅向前光标。如果你需要用recordset物件的更多函数,你首先要创建recordset物件并设置想要设置的属性然后用open方法打开它来执行查询和返回想要得到的光标类型.

在下面的例子中,command物件执行删除指令,由于没有数据集需要返回,你不需要额外的用recordset物件.删除了多少行数据?你可以通过recordsaffected参数知道它.

sub connectionexample7()
dim cnn as adodb.connection
dim rs as adodb.recordset
set cnn = new adodb.connection
'引用odbc driver建立连接
cnn.connectionstring = "driver={sql server};" & _
"server=rgreennt;uid=sa;pwd=;database=pubs"
cnn.open
'向数据源发送删除指令
cnn.execute ("delete from authors where au_id = '011-01-0111'")
' 检查有多少行数据被删除
set rs = cnn.execute("select @@rowcount")
' 显示第一个字段
msgbox rs(0) & " rows deleted"
'关闭连接
rs.close
end sub
下面的例子,这个command通过指定的存储过程的名字运行数据源的存储过程.由于需要返回数据,所以你必需建立recordset物件。

sub connectionexample8()
dim cnn as adodb.connection
dim rs as adodb.recordset
set cnn = new adodb.connection
' 引用odbc driver来建立连接
cnn.connectionstring = "driver={sql server};" & _
"server=rgreennt;uid=sa;pwd=;database=pubs"
cnn.open
' 建立recordset对象来运行存储过程
set rs = cnn.execute("exec byroyalty 50")
' 通过循环来显示author的id
do while not rs.eof
msgbox rs("au_id")
rs.movenext
loop
' 断开连接
rs.close
end sub