数据库中生成一个自定义角色,vdruser,然后用这个角色进行数据库的操作。现在发现,这个角色,可以添加,删除,修改。可以生成存储过程。可以在SQL的企业管理器中执行存储过程。
但是问题出现了,在页面调用中,如果PROC中有临时变量表,则无法向WEB页面返回数据集
例子如下:
SQL的PROC
A:
create proc Test_Porc_A
as
begin
declare @Tab table(ID varchar(20),name_id varchar(20))
insert into @tab values('Test','有一行数据')
insert into @Tab values('Test','有二行数据')
insert into @Tab values('Test','有三行数据')
insert into @Tab values('Test','有四行数据')
----@Tab是临时表变量
select * from @Tab
/***
select * from shiptocode***/
end
B:
create proc Test_Porc_B
as
begin
---- shiptocode是数据库中实体表
select * from shiptocode
end
=============================
页面代码:
Set OrderDBcn = Server.CreateObject("ADODB.Connection")
Set OrderDBRs = Server.CreateObject("ADODB.Recordset")
OrderDBcn.ConnectionString = ConnectionString
OrderDBcn.Open
''------------------前段格式验证及转换------------------
''-----------------------------------------------------------------------------
''OrderDBRs.CursorLocation = 3
OrderDBRs.Open "Execute Test_Porc_A",OrderDBcn,1,1
response.Write "<br>"
response.Write OrderDBcn.state
response.Write "<br>"
response.Write OrderDBRs.state
response.Write "<br>"
if OrderDBRs.BOF then ''------------1-------
response.Write "没有返回数据"
elseif OrderDBRs.fields(0)="3" then
msg="数据库连接不正常或格式不对!"
else
response.Write "有返回数据"
do while not OrderDBRs.EOF
response.Write "<br>->"
response.Write OrderDBRs.fields(1)
response.Write "<-<br>"
OrderDBRs.movenext
loop
end if ''-------1------
''-------------------------------------------------------------------------------------------------
OrderDBRs.close
OrderDBcn.close
set OrderDBcn=nothing
set OrderDBRs=nothing
===================
在页面代码的黄色部分,分别使用:
A:OrderDBRs.Open "Execute Test_Porc_A",OrderDBcn,1,1
B:OrderDBRs.Open "Execute Test_Porc_B",OrderDBcn,1,1
问题出来了:
使用A的写法,WEB页面将会报错,出现数据集被强制关闭,或者说WEB页面没有取到SQL的数据集内容。也就是没有取到Execute Test_Porc_A这个存储过程中的值(注意,这个过程是有数据集的。),页面显示的内容是:
1
0
ADODB.Recordset 错误 '800a0e78'
对象关闭时,不允许操作。
/vdr/upload/SaveSDExcelFile.asp,行 32
行32是:蓝色的部分。
而使用B的写法,则不会有这样的问题。使用B的内容,页面返回的数据是:
1
1
有返回数据
->7781<-
->7782<-
->7783<-
->7790<-
->7791<-
请高手解释一下,而这两个PROC,我在另一台相同配置的服务器上运行,不会出现这种情况,两个存储过程都能返回数据内容。