如何在VB.NET Windows应用程序中创建ADODB断开连接的记录集?

时间:2011-09-02 19:35:57

标签: vb.net sybase adodb

我正在使用与Sybase数据库的OLEDB连接,ADODB.dll文件版本为7.10.6070.0(来自Sybase 12.5软件包)。我需要能够打开连接,使用命令对象从存储过程填充记录集,然后关闭连接并传回断开连接的记录集。到目前为止,我的尝试都失败了,因为每次关闭连接时,我的记录集也会关闭(这意味着它没有断开连接)。

是否有必须设置的属性以指示记录集应该断开连接?我无法设置Recordset.ActiveConnection = False,因为我得到一个异常(“无法更改具有Command对象作为其来源的Recordset对象的ActiveConnection属性。”)。我设置了Command.ActiveConnection = False,但是一旦关闭连接对象,就不会停止记录集的关闭。

段:

Dim conn as New ADODB.Connection()
conn.Open("connectionString", "UserID", "Password")
Dim cmd as New ADODB.Command()
' Set some parameters on the command.
cmd.ActiveConnection = conn
cmd.CommandText = "StoredProcedureName"
cmd.CommandType = ADODB.CommandTypeEnum.adCmdStoredProc
Dim rs as New ADODB.Recordset()
rs.Open(cmd)
Dim clonedRS as ADODB.Recordset = rs.Clone()  ' one attempt to disconnect recordset
rs.Close()  ' Does not close cloned recordset
cmd.ActiveConnection = Nothing   ' another try at disconnecting recordset
conn.Close()  ' Always closes the recordset, even the cloned one
return clonedRS  ' Sadly, this is closed now.

2 个答案:

答案 0 :(得分:3)

我不知道这是否可以解决您的问题,但我进行了Google搜索并找到了这篇文章Disconnect an ADO Recordset generated from a Command object,您可以使用它来修改代码,如下所示:

Dim conn as New ADODB.Connection()
conn.Open("connectionString", "UserID", "Password")
Dim cmd as New ADODB.Command()
' Set some parameters on the command.
cmd.ActiveConnection = conn
cmd.CommandText = "StoredProcedureName"
cmd.CommandType = ADODB.CommandTypeEnum.adCmdStoredProc

Dim rs As ADODB.Recordset

With rs
    .CursorLocation = adUseClient
    .Open cmd, CursorType:=adOpenStatic, Options:=adCmdStoredProc
    Set .ActiveConnection = Nothing
End With

Dim clonedRS As ADODB.Recordset = rs

Set cmd = Nothing

conn.Close()
rs.Close()
Set conn = Nothing
Set rs = Nothing

Return clonedRS

4GuysFromRolla Using Disconnected Recordsets中的另一个例子具有相同的方法。

修改

充实了这个例子。

答案 1 :(得分:0)

你可以沿着这条线尝试一些事情

Set cmd = New ADODB.command
With cmd
  .ActiveConnection = "your connection"
  .CommandText = "your proc or ssql"
  .CommandType = adCmdStoredProc
  ' .parameter.append  create whether param you need
End With
Set rs = New ADODB.recordset
With rs
  .cursorlocation = adUseClient
  .cursortype = adOpenStatic
  .locktype = adLockBatchOptimistic
  Set rs.Source = cmd    'this is the key
 .Open
 .ActiveConnection = Nothing
End With
' do what ever you need next