导航
  • 主页
  • .NET Framework
  • ASP
  • Web Services
  • .NET互联网桌面应用
  • VB
  • 图表区
  • 分析与设计
  • 组件/控件开发
  • AppLauncher
  • 问答

存储过程问题 !恳请指教!

HuanXun 2004-03-22 09:58:42
cmd=new SqlCommand("newsSearch",conn);
cmd.CommandType=CommandType.StoredProcedure;
cmd.Parameters.Add("@Board",board);
cmd.Parameters.Add("@KeyWord1",keyword1);
cmd.Parameters.Add("@KeyWord2",keyword2);
cmd.Parameters.Add("@pageindex",pager.CurrentPageIndex);
cmd.Parameters.Add("@pagesize",pager.PageSize);
cmd.Parameters.Add("@docount",false);
conn.Open();
repList.DataSource=cmd.ExecuteReader();
repList.DataBind();
conn.Close();

存储过程
CREATE procedure newsSearch
(@Board VarChar,
@KeyWord1 VarChar,
@KeyWord2 VarChar,
@pagesize int,
@pageindex int,
@docount bit)
as
set nocount on
if(@docount=1)
select count(ID) from News where (board like '%"+@board+"%') and ((title like '%"+@keyword1+"%') or (content like '%"+@keyword2+"%'))
else
begin
declare @indextable table(id int identity(1,1),nid int)
declare @PageLowerBound int
declare @PageUpperBound int
set @PageLowerBound=(@pageindex-1)*@pagesize
set @PageUpperBound=@PageLowerBound+@pagesize
set rowcount @PageUpperBound
insert into @indextable(nid) select ID from News where (board like '%"+@board+"%') and ((title like '%"+@keyword1+"%') or (content like '%"+@keyword2+"%')) order by SendTime desc
select O.ID,O.Title,O.SendTime from News O,@indextable t where O.ID=t.nid
and t.id>@PageLowerBound and t.id<=@PageUpperBound order by t.id
end
set nocount off
GO


我用的是webdiyer的分页控件
为什么即使把上面代码中的参数KeyWord1,KeyWord2,Board换成"s","s","%"还是能返回任何数据 但是将存储过程中的查询语句换成 select ID from News where (board like '%') and ((title like '%s%') or (content like '%s%')) order by SendTime desc
就可以正确返回数据呢
时间仓促,不能祥说!
恳请指教啊
...全文
11 点赞 收藏 5
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
HuanXun 2004-03-22
谢谢困扰多时的问题解决了!
能不能详细说说这方面的问题啊
为什么有时可以这样用呢?
回复
freexin 2004-03-22
不要采用双引号
回复
cpp2017 2004-03-22
board like '%"+@board+"%' ==> like '%'+@board +'%' 其他的@keyword1,@keyword2也是如此
回复
wangsaokui 2004-03-22
如果参数是字符串在where子句中需要用' '把变量包含
如:select * from tablename where column_name = 'ABC'
查出column_name为ABC的纪录
select * from tablename where column_name like 'ABC%'
查出column_name为ABC开头的纪录

因为我们经常把查询命令先赋上一个字符串再去执行,比如:
SqlCommand SelectCMD_ABC = New SqlCommand(selectcommandtext,myconnect)
其中selectcommandtext就是一个字符串,为保证字符串中的变量
如:selectcommandtext="select * from tablename where column_name = 'ABC'"
这样写还是查出column_name为ABC的纪录,如果ABC是变量当赋予不同的值时得到不同的结果
就不能这样写了。
string ABC;
ABC="ABC";
selectcommandtext="select * from tablename where column_name = '" + ABC + "'";
//当变量ABC赋值为“ABC”时查询语句为
//select * from tablename where column_name = 'ABC'
ABC="PLANE"
selectcommandtext="select * from tablename where column_name = '" + ABC + "'";
//当变量ABC赋值为“PLANE”时查询语句为
//select * from tablename where column_name = 'PLANE'
赋给变量ABC不同的值得到不同的结果,这就是符号的区别。
回复
bitsbird 2004-03-22
收藏
回复
发动态
发帖子
.NET技术社区
创建于2007-09-28

5.8w+

社区成员

.NET技术交流专区
申请成为版主
社区公告
暂无公告