ado执行存储过程的问题

kanghuaxing 2004-11-11 09:06:07

adoConn.Open
adoRecordset.Open SqlStr, adoConn, adOpenKeyset
在sqlserver2000下执行一个存储过程并将返回的结果集存在adorecordset中后,adorecoredset的state始终是0(关闭),调用其中的如recordset等方法会出错3704(对象关闭,无法操作)。
存储过程如下:
create procedure xt_batch_oper_dkh
(
@p_oper char(1) ,--操作类别,1:添加,2:修改,3:删除
--
@p_czgy varchar(8)
)
as
declare @v_txtfile varchar(100)
begin
--添加
if @p_oper='1'
begin
select @v_txtfile = setvalue from T_CONFIG where SETNAME = 'DKHBATCH'
if @v_txtfile = ''
begin
select MSGNO = '0001',MSG = '无此文件路径配置'
return
end
delete from T_DKHBATCH

select MSG='ok'
end
end
但该存储过程在查询分析器中执行一切正常(有返回结果集)。
将其中的 delete from T_DKHBATCH
注释掉,adorecordset又能正常,不知何故,望高手指点
...全文
143 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
kanghuaxing 2004-11-12
  • 打赏
  • 举报
回复
谢谢了,知道问题了
zhujiechang 2004-11-11
  • 打赏
  • 举报
回复
返回记录集的存储过程在开头一定要加上.
set nocount on
对于有ansi警告信息的还要加上SET ANSI_WARNINGS OFF
否则记录集取不到.
Andy__Huang 2004-11-11
  • 打赏
  • 举报
回复
大概改了一下﹐你試試

create procedure xt_batch_oper_dkh
(
@p_oper char(1) ,--操作类别,1:添加,2:修改,3:删除
@p_czgy varchar(8)
)
as
BEGIN TRAN
SET NOCOUNT ON
SET ANSI_WARNINGS OFF
declare @v_txtfile varchar(100)
declare @MSGNO varchar(100),@MSG varchar(1000) -->加這個變量

begin
--添加
if @p_oper='1'
begin
select @v_txtfile = setvalue from T_CONFIG where SETNAME = 'DKHBATCH'
if @v_txtfile = ''
begin
select @MSGNO = '0001',@MSG = '无此文件路径配置'
end
else
begin
delete from T_DKHBATCH
if @@error<>0 goto errhandle
select @MSGNO = null,@MSG = 'OK'
end
commit tran ------>加這句
select @MSGNO,@MSG
end
end

errhandle:
IF @@ERROR<>0
BEGIN
ROLLBACK TRAN
SELECT '刪除失敗'
END


go
zjcxc 2004-11-11
  • 打赏
  • 举报
回复
delete from T_DKHBATCH --这句会返回一个结果信息,告诉调用者删除了多少记录

不加set nocount on的话,调用得到的就是上面那个结果信息,加了的话,存储过程就不返回那个结果信息,所以加上就正常了



如果不加的话,也可以通过下面的语句得到正确结果:
adoConn.Open
adoRecordset.Open SqlStr, adoConn, adOpenKeyset
set adoRecordset=adoRecordset.nextrecordset
zjcxc 2004-11-11
  • 打赏
  • 举报
回复
create procedure xt_batch_oper_dkh
(
@p_oper char(1) ,--操作类别,1:添加,2:修改,3:删除
--
@p_czgy varchar(8)
)
as
set nocount on ---------------------*****加上此句
declare @v_txtfile varchar(100)
begin
--添加
if @p_oper='1'
begin
select @v_txtfile = setvalue from T_CONFIG where SETNAME = 'DKHBATCH'
if @v_txtfile = ''
begin
select MSGNO = '0001',MSG = '无此文件路径配置'
return
end
delete from T_DKHBATCH

select MSG='ok'
end
victorycyz 2004-11-11
  • 打赏
  • 举报
回复

你的存储过程中,除了delete语句,还有几个select语句,其实都是赋值语句,并没有select查询语句。哪来的返回结果集?
你在最后加一句试试:

......

select msg='OK'
select msg --加这一句

end


Andy__Huang 2004-11-11
  • 打赏
  • 举报
回复
--delete from T_DKHBATCH

因為用到insert ,update,delete時﹐一般要用到事務提交﹐而你沒有進行事務處理
lxcc 2004-11-11
  • 打赏
  • 举报
回复
VB中访问存储过程的几种办法

http://blog.csdn.net/online/archive/2004/08/05/66376.aspx
yas 2004-11-11
  • 打赏
  • 举报
回复
楼主发错区了

1,216

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧