2013-06-12 62 views
1

我有两个输入文本框:-BookName和作者MS-SQL多个像查询

我想在库管理系统中使用存储过程进行搜索。 程序是:

ALTER PROCEDURE dbo.Library_AdvSearch 
    (
     @BookName varchar(50), 
     @Author varchar(50) 

    ) 
AS 
    Select * from Library_Book 
    where (BookName Like '%'+ @BookName +'%' OR Author Like '%'[email protected]+'%') 

RETURN 

这产生ambiguos结果,并显示所有与表

现在数据我的问题是:我要重新设计我的查询以这样的方式,如果我不中插入任意值BOOKNAME,只有确定作者,应该给我相应的表项

我的表看起来像

BOOk name|Author 
C  |qwerty 
let us C |asdfg 
java  |xyz 
现在

,如果我仅输入XYZ,它应该显示Java和XYZ在GridView控件

所以请帮助我在存储过程

任何帮助将不胜感激

+0

BOOKNAME像@BookName +“%”或作者像@author +“%” –

回答

2

尝试这个

ALTER PROCEDURE dbo.Library_AdvSearch 
(
    @BookName varchar(50) = '', 
    @Author varchar(50) = '' 
) 
AS 
Select * from Library_Book 
WHERE((@BookName = '' OR BookName Like '%'+ @BookName +'%') 
AND (@Author = '' OR Author Like '%'[email protected]+'%')) 

RETURN 
+0

4日Thnx帮助,,,但仍然是生产模棱两可的结果,当我尝试喂“XYZ”是作者的input..I不要知道为什么itz表现出这种行为 – Balram

+0

如何将您的文本框值传递给您的sp,请分享该代码。 –

+0

protected void BtnSearch_Click(object sender,EventArgs e) dataclass ob = new dataclass(); if(Panel1.Visible!= false) { GridView1.DataSource = ob.LibraryBookSearch(TxtSearch.Text); ; GridView1.DataBind(); } 别的 { GridView1.DataSource = ob.LibraryBookSearchAdv(TxtSearch.Text,TxtAuthor.Text,TxtPubYear.Text,TxtPublication.Text); GridView1.DataBind(); } } – Balram

0

如果你离开@BookName空,你基本上搜索BookName Like '%',换句话说:所有的书籍。

我会去用一个参数:

select * from Library_Book 
where (BookName Like '%'+ @Parameter +'%' OR Author Like '%'+ @Parameter +'%') 
+0

如果我更改文本框的属性并将默认值设置为单个空格“”,那么该怎么办? – Balram

+0

根据您使用的位置,它会为您提供包含空白的标题或作者的图书。如果您在作者字段中有全名(“名字姓氏”),则您的查询将返回所有这些作者。 – Alexander

+0

听我想说的是,如果我只提供AUTHOR值,,,并保持BOOKNAME数据为空,,,这表明我错误@BOOKNAME参数不提供,, PLZ帮助我 – Balram

0

如果我理解正确的,问题是,当他们是空白,要排除他们匹配所有书籍/作者。因此,将OR更改为AND,以符合所有标准。 不知道我是否已经正确理解你。

ALTER PROCEDURE dbo.Library_AdvSearch 
     (
      @BookName varchar(50), 
      @Author varchar(50) 

     ) 
    AS 
     Select * from Library_Book 
     where (BookName Like '%'+ @BookName +'%' AND Author Like '%'[email protected]+'%') 

    RETURN 
+0

thnx 4帮助,,,,但笏如果我只为作者提供输入,而不是为书名,,,在这种情况下,它显示错误,书名不提供,,, plz帮助:( – Balram

+0

对不起,队友,但没有人可以正确地用“它显示一个错误”来帮助你。发布你的错误信息!!听起来好像你在客户端有一个错误,而且,正如我写的那样,你需要传递''不是NULL,但这很可能 – LoztInSpace

+0

它被上面提到,,,, styl m再次指定它,,错误是“@BOOKNAME参数不提供”,当我尝试只传递“XYZ”作为作者的价值,根据我的表应该返回一个字段(请参阅表格以供参考),,,,, plz帮助 – Balram