关于存储过程的难题,其中涉及到使用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、其他。。。。。

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


...全文
31 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
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'”

22,301

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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