首页 新闻 会员 周边

请高手教教怎么修改数据库角色的权限!

0
悬赏园豆:40 [待解决问题]

数据库中生成一个自定义角色,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,我在另一台相同配置的服务器上运行,不会出现这种情况,两个存储过程都能返回数据内容。


 

ejianya的主页 ejianya | 初学一级 | 园豆:160
提问于:2011-04-09 17:52
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册