加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

VB6.0 ADODB.Recordset 对象已关闭问题

发布时间:2020-12-16 22:56:42 所属栏目:大数据 来源:网络整理
导读:VB 6.0 下经常用到 ADODB.Record ,用于获取查询结果(select查询、存储过程返回的查询结果集 等) 其中,select查询一般不会有什么问题,但是 返回存储过程中的查询结果集却容易出问题。特别是 VB6.0 + SQL2000 的情况。 下面举例: procedure-- sp_rpt1 中

VB 6.0 下经常用到 ADODB.Record ,用于获取查询结果(select查询、存储过程返回的查询结果集 等)

其中,select查询一般不会有什么问题,但是 返回存储过程中的查询结果集却容易出问题。特别是 VB6.0 + SQL2000 的情况。

下面举例:

procedure-- sp_rpt1 中有如下语句:

CREATE TABLE ##tmp_2
(
calltype NVARCHAR(30),
calldesStrCollection NVARCHAR(4000)
)

INSERT INTO ##TMP_2 calltype='1'calldesStrCollection ='abcdefghijk'

....

select * from ##TMP_2

VB 6.0 中有如下语句:

Dim cmd As ADODB.Command
Dim Rs_Data As ADODB.Recordset
Dim Irowcount As Integer
Dim Icolcount As Integer

Set Rs_Data = New ADODB.Recordset
Set cmd = New ADODB.Command
cmd.CommandTimeout = 0
If g_Conn Is Nothing Then OpenConn

g_Conn.CommandTimeout = 6000
cmd.CommandTimeout = 6000
cmd.ActiveConnection = g_Conn
cmd.CommandType = adCmdStoredProc
cmd.CommandText = ProcedureName 'sp_rpt1
cmd.Parameters("@Dt1") = par1
cmd.Parameters("@Dt2") = par2

Set Rs_Data = cmd.Execute

If Rs_Data.State = 1 Then
MsgBox "Rs_Data is Opened!"
Else
MsgBox "Rs_Data is closed!连接已经关闭或未返回任何数据"
Exit Sub
End If

在VB6.0程序执行中,会出现 Rs_Data.State = 0 的情况。
经过分析才知道,在 sql 2000 DB中执行sp_rpt1 会产生一些警告信息:
“已经创建##tmp_2.但其行大小(8085字节)超出最大行大小(8086字节)限制。对此表的update insert操作将失败。”

正是这些警告信息,导致 sp_rpt1没有返回"结果集"给Rs_Data,由于Rs_Data没有获得结果集,所以自动关闭了。

解决方法是: 修改表##tmp_2定义,calldesStrCollection NVARCHAR(4000) 改成 calldesStrCollection NVARCHAR(3000) 或者 将Nvarchar 改成 Ntext 类型。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读