关于存储过程的难题,其中涉及到使用asp.net对其的调用

siyu 2003-12-22 04:37:46
我使用带输入参数的存储过程Pro_epfname来解决一个多查询条件的查询问题:
CREATE PROCEDURE Pro_epfname
@type char(400) AS
if @type<>'all'
begin
declare @sql varchar(8000)
set @sql = 'select c_name,i_nameid from t_epfname where c_name='+@type
exec(@sql)
end
其中的@type参数中可能的值为:'aa or c_name='bb' or c_name='cc''
在我的asp.net页面中调用该存储过程,显示错误信息:
Exception Details:System.Data.SqlClient.SqlException: Invalid column name 'aa'.

Source Error:
Line 101:
Line 102: DataSet ds=new DataSet();
Line 103: myCommand.Fill(ds,"t_epfname");

怎么回事?难道:
1、存储过程有问题?
2、参数@sql执行的结果不是预期的列c_name和i_nameid?
3、其他。。。。。

求救呀!(唉,数据库还是很不熟悉)


...全文
4 点赞 收藏 6
写回复
6 条回复
siyu 2003年12月22日
原来我引号的写法错误,现把调试正确的告诉大家:
我使用asp.net页面调用这个过程,在这里的字符串中的单引号的写法如下:
myCommand.SelectCommand.Parameters["@type"].Value="'"+str[1]+"'";
在循环中的写法:
myCommand.SelectCommand.Parameters["@type"].Value=myCommand.SelectCommand.Parameters["@type"].Value+" or c_name='"+str[i]+"'";

再次感谢各位!
回复 点赞
siyu 2003年12月22日
谢谢你的帮助! :)
回复 点赞
LoveSQL 2003年12月22日
给你个例子,关键是字符串里的一个单引号要用两个单引号来替换才不会出错。。。

declare @str varchar(8000),@aa varchar(300)
set @aa='''aa'' or c_name=''bb'' or c_name=''cc'''
set @str='select * from yourtable where c_name='+@aa
print @str
回复 点赞
Rotaxe 2003年12月22日
set @sql = 'select c_name,i_nameid from t_epfname where c_name='''+@type+''''
回复 点赞
siyu 2003年12月22日
所以在这里我只好使用参数@sql来写入查询语句,不知有否更好的方法。
回复 点赞
siyu 2003年12月22日
参数@type也可能是“aa”,或更多的“aa or c_name='bb' or c_name='cc' or c_name='dd' or c_name='ee'”
回复 点赞
发动态
发帖子
疑难问题
创建于2007-09-28

9308

社区成员

12.1w+

社区内容

MS-SQL Server 疑难问题
社区公告
暂无公告