2013-05-13 127 views
0

我在我的系統中有多個文本框和一個下拉列表,我使用查詢構建器從數據庫中的多個表(SQL服務器)中選擇數據,並顯示他們在網格視圖asp.net中的多重搜索文本框

建議ID:(文本) 員工ID:(文本) 狀態:(下拉列表) 職員名稱:(文本)

......... .....................

我想通過輸入一個字段或多個字段來搜索結果。 問題是,當我在互聯網上瀏覽以測試查詢是否有效時,我發現它只能通過輸入所有字段纔有效。

這是HTML內部產生查詢生成器(Visual Studio 2010中)

SELECT 
SuggestionDetail.SuggestionDescription, SuggestionDetail.SuggestionID, 
SuggestionDetail.DateOfSubmission, Employee.EmployeeID, Employee.City, 
Employee.EmployeeName, Category.CategoryName, SuggestionStatusDetail.DateOfLastUpdate, 
SuggestionStatus.StatusName 

FROM 
Employee 

INNER JOIN 
SuggestionDetail 

ON 
Employee.EmployeeID = SuggestionDetail.EmployeeID 

INNER JOIN 
Category 

ON 
SuggestionDetail.CategoryID = Category.CategoryID 

INNER JOIN 
SuggestionStatusDetail 

ON 
SuggestionDetail.SuggestionID = SuggestionStatusDetail.SuggestionID 

INNER JOIN 
SuggestionStatus 

ON 
SuggestionStatusDetail.StatusID = SuggestionStatus.StatusID 

WHERE 
(Employee.EmployeeName LIKE N'%' + @empname + N'%') 
OR 
(Employee.EmployeeID LIKE '%' + @empid + '%') 
OR 
(SuggestionDetail.SuggestionID LIKE '%' + @txtDocID + '%') 
OR 
(SuggestionStatus.StatusName LIKE N'%' + @StatusName + N'%') 

生成的查詢和這個代碼:

 <asp:GridView ID="GridView1" runat="server" BackColor="White" class="GridView" 
     BorderColor="#DEDFDE" BorderStyle="None" BorderWidth="1px" CellPadding="4" 
     EnableModelValidation="True" ForeColor="Black" GridLines="Vertical" 
     AutoGenerateColumns="False" 
     DataSourceID="SqlDataSource2"> 
     <AlternatingRowStyle BackColor="White" /> 
     <Columns> 
      <asp:BoundField DataField="SuggestionDescription" HeaderText="SuggestionDescription" 
       SortExpression="SuggestionDescription" /> 
      <asp:BoundField DataField="SuugestionID" HeaderText="SuggestionID" 
       InsertVisible="False" ReadOnly="True" SortExpression="SuggestionID" /> 
      <asp:BoundField DataField="DateOfSubmission" HeaderText="DateOfSubmission" 
       SortExpression="DateOfSubmission" /> 
      <asp:BoundField DataField="EmployeeID" HeaderText="EmployeeID" 
       SortExpression="EmployeeID" /> 
      <asp:BoundField DataField="City" HeaderText="City" SortExpression="City" /> 
      <asp:BoundField DataField="EmployeeName" HeaderText="EmployeeName" 
       SortExpression="EmployeeName" /> 
      <asp:BoundField DataField="CategoryName" HeaderText="CategoryName" 
       SortExpression="CategoryName" /> 
      <asp:BoundField DataField="DateOfLastUpdate" HeaderText="DateOfLastUpdate" 
       SortExpression="DateOfLastUpdate" /> 
      <asp:BoundField DataField="StatusName" HeaderText="StatusName" 
       SortExpression="StatusName" /> 
     </Columns> 

任何幫助,請,我還是新的視覺工作室。

 <asp:SqlDataSource ID="SqlDataSource2" runat="server" 
     ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 

     SelectCommand="SELECT SuggestionDetail.SuggestionDescription, SuggestionDetail.SuggestionID, SuggestionDetail.DateOfSubmission, Employee.EmployeeID, Employee.City, Employee.EmployeeName, Category.CategoryName, SuggestionStatusDetail.DateOfLastUpdate, SuggestionStatus.StatusName FROM Employee INNER JOIN SuggestionDetail ON Employee.EmployeeID = SuggestionDetail.EmployeeID INNER JOIN Category ON SuggestionDetail.CategoryID = Category.CategoryID INNER JOIN SuggestionStatusDetail ON SuggestionDetail.SuggestionID = SuggestionStatusDetail.SuggestionID INNER JOIN SuggestionStatus ON SuggestionStatusDetail.StatusID = SuggestionStatus.StatusID WHERE (Employee.EmployeeName LIKE N'%' + @empname + N'%') OR (Employee.EmployeeID LIKE '%' + @empid + '%') OR (SuggestionDetail.SuggestionID LIKE '%' + @txtDocID + '%') OR (SuggestionStatus.StatusName LIKE N'%' + @StatusName + N'%')"> 
     <SelectParameters> 
      <asp:ControlParameter ControlID="txtStaffName" Name="empname" 
       PropertyName="Text" /> 
      <asp:ControlParameter ControlID="txtStaffID" Name="empid" PropertyName="Text" /> 
      <asp:ControlParameter ControlID="txtDocID" Name="txtDocID" 
       PropertyName="Text" /> 
      <asp:ControlParameter ControlID="ddStatus" Name="StatusName" 
       PropertyName="SelectedValue" /> 
     </SelectParameters> 
    </asp:SqlDataSource> 
+0

請看這個答案:http://stackoverflow.com/a/4080801/1380428 – 2013-05-13 09:50:39

回答

0

IF連接和其他東西都工作正常,再看看我不得不改變where子句中的一些領域。當所有參數都爲空/空白(如可爲空)並根據任何一個參數返回過濾結果爲空/空白時,它將返回整個結果。

CREATE/ALTER STOREDPROCEDURE SP_NAME 
@empname varchar(50) = NULL, 
@empid int = NULL, 
@txtDocID int = NULL, 
@StatusName varchar(50) = NULL 
AS 
BEGINE 
    SELECT 
    SuggestionDetail.SuggestionDescription, SuggestionDetail.SuggestionID, 
    SuggestionDetail.DateOfSubmission, Employee.EmployeeID, Employee.City, 
    Employee.EmployeeName, Category.CategoryName, SuggestionStatusDetail.DateOfLastUpdate, 
    SuggestionStatus.StatusName 

    FROM 
    Employee 

    INNER JOIN 
    SuggestionDetail 

    ON 
    Employee.EmployeeID = SuggestionDetail.EmployeeID 

    INNER JOIN 
    Category 

    ON 
    SuggestionDetail.CategoryID = Category.CategoryID 

    INNER JOIN 
    SuggestionStatusDetail 

    ON 
    SuggestionDetail.SuggestionID = SuggestionStatusDetail.SuggestionID 

    INNER JOIN 
    SuggestionStatus 

    ON 
    SuggestionStatusDetail.StatusID = SuggestionStatus.StatusID 

    WHERE 
    (Employee.EmployeeName LIKE N'%' + @empname + N'%' OR @empname IS NULL) 
    OR 
    (Employee.EmployeeID LIKE '%' + @empid + '%' OR @empid IS NULL) 
    OR 
    (SuggestionDetail.SuggestionID LIKE '%' + @txtDocID + '%' OR @txtDocID IS NULL) 
    OR 
    (SuggestionStatus.StatusName LIKE N'%' + @StatusName + N'%' OR @StatusName IS NULL) 
END