SQL数据库模糊查询问题,高手进~

何以笙箫 2010-11-26 11:12:40
这是一个根据图书的书名、作者、译者、以及出版商查询图书的相关信息。代码可以运行,但是达不到查询的目的,无论书名、作者、译者、以及出版商的文本框输入任意值或者都为空时,点击查询按钮时都会显示全部的图书信息。找来找去都找不出什么问题来,麻烦大家了~~
存储过程:
alter procedure SearchBook
@Name VarChar(100),
@Author VarChar(30),
@Translator VarChar(30),
@Publisher VarChar(100)
as
select * from Book where Name like '%'+@Name+'%' or Author like '%'+@Author+'%' or Translator like '%'+@Translator+'%' or Publisher like '%'+@Publisher+'%'
GO
后台代码:
//获取连接数据库字符串
string strconn = ConfigurationManager.ConnectionStrings["connectionStr"].ToString();
//连接数据库
SqlConnection conn = new SqlConnection(strconn);
conn.Open();
SqlCommand cmd = new SqlCommand("SearchBook", conn);
//设置sql命令变量类型为存储过程
cmd.CommandType = CommandType.StoredProcedure;
//清掉公用类中上次的使用的参数
cmd.Parameters.Clear();
SqlParameter[] paras = new SqlParameter[]{
new SqlParameter("@Author",text_author.Text as object),
new SqlParameter("@Name",text_name.Text as object),
new SqlParameter ("@Translator",text_translator.Text as object),
new SqlParameter ("@Publisher",text_publisher.Text as object)
};
cmd.Parameters.AddRange(paras);
SqlDataReader dr = cmd.ExecuteReader();
DataTable dt = new DataTable();
dt.Load(dr);
Repeater1.DataSource = dt;
Repeater1.DataBind();
...全文
311 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuczerwca 2010-11-27
  • 打赏
  • 举报
回复
学习,谢谢
何以笙箫 2010-11-27
  • 打赏
  • 举报
回复
问题解决了,谢谢大家了~
hdhxtwinner 2010-11-27
  • 打赏
  • 举报
回复
winner_hdhxt
何以笙箫 2010-11-27
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 abcjun188 的回复:]

引用 8 楼 mbydzyr 的回复:
引用 5 楼 abcjun188 的回复:

SQL code
alter procedure SearchBook
@Name VarChar(100),
@Author VarChar(30),
@Translator VarChar(30),
@Publisher VarChar(100)
as
declare @sql varc……
[/Quote]试过了,这种方法也可以用
何以笙箫 2010-11-27
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 huanshayi 的回复:]

为空查出所有的信息不对吗?那你想要为空时出现什么样的信息?
[/Quote]也是哦,为空时查询出全部信息是可以的
何以笙箫 2010-11-27
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 deoing 的回复:]

“无论书名、作者、译者、以及出版商的文本框输入任意值或者都为空时,点击查询按钮时都会显示全部的图书信息”
---------------------------
原因还是挺简单的,因你的SQL语句:
select * from Book where Name like '%'+@Name+'%' or Author like '%'+@Author+'%' or Translator li……
[/Quote]当有输入查询条件时,这种方法可以用,但是当查询条件都为空时,会显示全部的图书信息
打一壶酱油 2010-11-27
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 mbydzyr 的回复:]
引用 5 楼 abcjun188 的回复:

SQL code
alter procedure SearchBook
@Name VarChar(100),
@Author VarChar(30),
@Translator VarChar(30),
@Publisher VarChar(100)
as
declare @sql varchar(500)
set @sql = '……
[/Quote]
我搞错了
应该是
alter procedure SearchBook
@Name VarChar(100),
@Author VarChar(30),
@Translator VarChar(30),
@Publisher VarChar(100)
as
select * from Book where Name like '%'+@Name+'%' and Author like '%'+@Author+'%'
and Translator like '%'+@Translator+'%' and Publisher like '%'+@Publisher+'%'
GO


你把 or 都改成 and 应该就可以了
huanshayi 2010-11-27
  • 打赏
  • 举报
回复
为空查出所有的信息不对吗?那你想要为空时出现什么样的信息?
何以笙箫 2010-11-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 abcjun188 的回复:]

SQL code
alter procedure SearchBook
@Name VarChar(100),
@Author VarChar(30),
@Translator VarChar(30),
@Publisher VarChar(100)
as
declare @sql varchar(500)
set @sql = 'select * from Book where Name l……
[/Quote]这种方法刚试过,还是一样
deoing 2010-11-27
  • 打赏
  • 举报
回复
“无论书名、作者、译者、以及出版商的文本框输入任意值或者都为空时,点击查询按钮时都会显示全部的图书信息”
---------------------------
原因还是挺简单的,因你的SQL语句:
select * from Book where Name like '%'+@Name+'%' or Author like '%'+@Author+'%' or Translator like '%'+@Translator+'%' or Publisher like '%'+@Publisher+'%'

当有值为空时(如:@Name),结果会是:
select * from Book where Name like '%%' or Author like '%'+@Author+'%' or Translator like '%'+@Translator+'%' or Publisher like '%'+@Publisher+'%'

“Name like '%%'”是永远都为True的,这样就返回所有的记录了。

---------------------------
如果当条件为空时,不想返回所有记录,可以这样做:
DECLARE @sql NVARCHAR(1000)
SET @sql = 'select * from Book WHERE 1=1 '
IF( LEN(@Name) > 0 ) SET @sql = sql + ' AND Name LIKE ''%'+ @name +'%'''
--其它参数类似
exec( @sql )
sbc86 2010-11-27
  • 打赏
  • 举报
回复
你可以试着调试一下存储过程,把生成的SQL语句拷贝下来,在查询分析器里查看,就会检查出写法想法得当 。
打一壶酱油 2010-11-27
  • 打赏
  • 举报
回复
alter procedure SearchBook
@Name VarChar(100),
@Author VarChar(30),
@Translator VarChar(30),
@Publisher VarChar(100)
as
declare @sql varchar(500)
set @sql = 'select * from Book where Name like ''%'+@Name+'%'' or Author like ''%'+
@Author+'%'' or Translator like ''%'+@Translator+'%'' or Publisher like ''%'+@Publisher+'%'''

exec(@sql)
GO
ds252743641 2010-11-26
  • 打赏
  • 举报
回复
declare @sql nvarchar(4000)
set @sql = 'select * from Book where Name like '+'''%'+rtrim(@Name)+'%'''
EXEC (@sql)
ds252743641 2010-11-26
  • 打赏
  • 举报
回复
按照这种方法写

declare @sql nvarchar(4000)
set @sql = 'select * from Book where Name like'+'''%'+rtrim(@Name)+'%'''

62,054

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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