大家来看看这个存储过程!!

ahuu 2003-12-10 05:39:59
存储过程如下:
CREATE PROCEDURE [dbo].[myproc]
@usrname varchar(13)
AS
if @usrname <> ''
begin
select * from controller where name=@usrname
end
else
begin
select * from controller
end
GO

在asp页面中调用该过程:
set conn=server.createobject("adodb.connection")
set rs=server.createobject("adodb.recordset")
sql="EXECUTE myproc @usrname='"&name&"'"

执行后,出错:参数类型不正确,或不在可以接受的范围之内,或与其他参数冲突。
修改存储过程后,可以正确执行。修改如下:
CREATE PROCEDURE [dbo].[myproc]
@usrname varchar(13)
AS
select * from controller where name=@usrname
GO
但这并没有达到我的要求。我的本意是在表单中输入用户名,查询后,将该用户的信息列出,若表单为空,则查询所有用户信息,这样的存储过程该怎么写呢?顺便把调用的方法也告诉我(在asp中),谢了!!!
...全文
35 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
ahuu 2003-12-11
  • 打赏
  • 举报
回复
to 楼上的
这样做没错了,但是和我的程序有冲突,看看:
sql = "EXECUTE myproc '"&usrname&"'"
set conn = server.CreateObject("ADODB.connection")
conn.open "fq","admin","admin"
set rs = server.CreateObject("ADODB.recordset")
rs.open sql,conn,1,2
rs.pagesize = 20
if not rs.eof then
total = cstr(rs.pagecount)
if(request.Form("ok") = "确定") then
currentpage = clng(request("txtCurrentpage"))
elseif ( currentpage="" ) then
currentpage = clng(request("page"))
end if
'处理非法页码问题
if currentpage<1 then currentpage=1 end if
if currentpage>rs.pagecount then currentpage=rs.pagecount end if
rs.AbsolutePage = currentpage //就是这里出错,提示:参数类型不正确,或不在可以接受的范围之内,或与其他参数冲突。
如果我把这一句注释掉,可以执行,但是不能翻页,这不是我想要的结果。请问该怎么解决呢?
zjcxc 元老 2003-12-11
  • 打赏
  • 举报
回复
表示设置或返回游标服务的位置。

设置和返回值

设置或返回可设置为以下某个常量的长整型值。

常量 说明
adUseNone 没有使用游标服务。(该常量已过时并且只为了向后兼容才出现)。
adUseClient 使用由本地游标库提供的客户端游标。本地游标服务通常允许使用的许多功能可能是驱动程序提供的游标无法使用的,因此使用该设置对于那些将要启用的功能是有好处的。AdUseClient 具有向后兼容性,也支持同义的 adUseClientBatch。
adUseServer 默认值。使用数据提供者的或驱动程序提供的游标。这些游标有时非常灵活,对于其他用户对数据源所作的更改具有额外的敏感性。但是,Microsoft Client Cursor Provider(如已断开关联的记录集)的某些功能无法由服务器端游标模拟,通过该设置将无法使用这些功能。
ahuu 2003-12-11
  • 打赏
  • 举报
回复
哦,可以了,太感谢了,但

rs.CursorLocation = 3 这个语句表示什么呢?

马上结贴
zjcxc 元老 2003-12-11
  • 打赏
  • 举报
回复
'改为这个,一时不醒起,asp中好像不支持常量:

rs.CursorLocation = 3
ahuu 2003-12-11
  • 打赏
  • 举报
回复
to zjcxc(邹建)

还是不行,同样的错误,但是指向了rs.CursorLocation = adUseClient
郁闷啊,我已经搞了一整天了!!
zjcxc 元老 2003-12-11
  • 打赏
  • 举报
回复
'这个不是存储过程错了,而是你的调用方法错了.


sql = "EXECUTE myproc '"&usrname&"'"
set conn = server.CreateObject("ADODB.connection")
conn.open "fq","admin","admin"
set rs = server.CreateObject("ADODB.recordset")

'加上这句就行了.
rs.CursorLocation = adUseClient


rs.open sql,conn,1,2
rs.pagesize = 20
if not rs.eof then
total = cstr(rs.pagecount)
if(request.Form("ok") = "确定") then
currentpage = clng(request("txtCurrentpage"))
elseif ( currentpage="" ) then
currentpage = clng(request("page"))
end if
'处理非法页码问题
if currentpage<1 then currentpage=1 end if
if currentpage>rs.pagecount then currentpage=rs.pagecount end if
rs.AbsolutePage = currentpage
azsoft 2003-12-10
  • 打赏
  • 举报
回复
大力的经典!

邹建的不错

CREATE PROCEDURE [dbo].[myproc]
@usrname varchar(13)=''
AS
set nocount on
if isnull(@usrname,'') <> ''
select * from controller where name=@usrname
else
select * from controller
set nocount off
GO
hglhyy 2003-12-10
  • 打赏
  • 举报
回复
Try:
CREATE PROCEDURE [dbo].[myproc]
@usrname varchar(13)
AS
SET NOCOUNT ON
if IsNull(@usrname,'') <> ''
begin
select * from controller where name=@usrname
end
else
begin
select * from controller
end
GO
pengdali 2003-12-10
  • 打赏
  • 举报
回复
不用过程呢?

select * from controller where name=isnull('你的参数',name)
zjcxc 元老 2003-12-10
  • 打赏
  • 举报
回复
--试试改为:
CREATE PROCEDURE [dbo].[myproc]
@usrname varchar(13)
AS
set nocount on
if isnull(@usrname,'') <> ''
select * from controller where name=@usrname
else
select * from controller
set nocount off
GO
PPLUNCLE 2003-12-10
  • 打赏
  • 举报
回复
set rs=conn.execute("myproc '"&参数1&",'"&参数2&"...'")
dlpseeyou 2003-12-10
  • 打赏
  • 举报
回复
CREATE PROCEDURE [dbo].[myproc]
@usrname varchar(13)
AS
if @usrname <> '' and @usrname is not null
begin
select * from controller where name=@usrname
end
else
begin
select * from controller
end
GO
1ssp 2003-12-10
  • 打赏
  • 举报
回复
CREATE PROCEDURE [dbo].[myproc]
@usrname varchar(13)
AS
if IsNull(@usrname,'') <> ''
begin
select * from controller where name=@usrname
end
else
begin
select * from controller
end
GO
1ssp 2003-12-10
  • 打赏
  • 举报
回复
检查@usrname 的值是否为空(null) 如果为null ,就会出现上述错误。
txlicenhe 2003-12-10
  • 打赏
  • 举报
回复
CREATE PROCEDURE [dbo].[myproc]
@usrname varchar(13)
AS
if IsNull(@usrname,'') <> ''
begin
select * from controller where name=@usrname
end
else
begin
select * from controller
end
GO
CrazyFor 2003-12-10
  • 打赏
  • 举报
回复
TRY:

CREATE PROCEDURE [dbo].[myproc]
@usrname varchar(13)=''
AS

if @usrname <> ''
select * from controller where name=@usrname
else
select * from controller
GO

...
sql="EXECUTE myproc '"& name &"'"

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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