2014-12-04 89 views
0

在VB.NET 2010 web表單應用程序中。我希望用戶能夠根據是否選擇名字,姓氏或中間名來選擇各種客戶 。這個想法是讓用戶選擇參數中的一個,兩個和/或三個 並點擊搜索關鍵字。vb 2010 web表單sql數據源不使用所有參數

問題是結果只返回基於一個參數的數據。如果選擇了多個參數的數據,則選擇 條件將被忽略。 當我在sql server management studio中運行sql時,我得到了我想要的結果。

因此,你能告訴我我能做些什麼來解決這個問題嗎?

有錯誤的代碼列在下面;

<%@ Page Title="" Language="VB" MasterPageFile="~/MasterPage.master" AutoEventWireup="false" CodeFile="Support.aspx.vb" Inherits="letters_Support" %> 
<asp:Content ID="Content1" ContentPlaceHolderID="MPHead" Runat="Server"> 
</asp:Content> 
<asp:Content ID="Content2" ContentPlaceHolderID="MPContent" Runat="Server"> 
<asp:Panel runat="server" ID="pnlSupport">  
<h3 style="text-align: center; border-style:none; ">Support Page</h3> 

    <table style="width: 100%;">   
     <tr> 
     <td> 
      Last Name: 
     </td> 
     <td> 
      <asp:TextBox ID="lname" runat="server"></asp:TextBox> 
     </td> 
     <td> 
      First Name: 
     </td> 
     <td> 
      <asp:TextBox ID="fname" runat="server"></asp:TextBox> 
     </td> 
     <td> 
      Middle Name: 
     </td> 
     <td> 
      <asp:TextBox ID="mname" runat="server"></asp:TextBox> 
     </td> 
     <td> 
      Search by Name: 
     </td> 
     <td> 
      <asp:Button ID="btnSearch" runat="server" Text="Search" /> 
     </td>    
    </tr> 
</table> 
<br /> 
    <asp:GridView ID="GridViewSupport" runat="server" AutoGenerateColumns="False" 
    PageSize="25" 
    GridLines="Both" 
    EnableSortinAndPagingCallbacks="true" 
    HeaderStyle-CssClass="ui-widget-header" 
    PagerStyle-CssClass="ui-widget ui-widget-content" 
    Width="100%" 
    EmptyDataText="No records were selected." 
    DataSourceID="sqlTEST" AllowPaging="True" AllowSorting="True" > 
    <Columns> 
     <asp:BoundField DataField="lastName" HeaderText="Last Name" SortExpression="lastName" ItemStyle-HorizontalAlign="Center" ItemStyle-CssClass="ui-widget-content" ControlStyle-CssClass="text required ui-widget-content ui-corner-all"/> 
     <asp:BoundField DataField="firstName" HeaderText="First Name" SortExpression="firstName" ItemStyle-HorizontalAlign="Center" ItemStyle-CssClass="ui-widget-content" ControlStyle-CssClass="text required ui-widget-content ui-corner-all"/> 
     <asp:BoundField DataField="middleName" HeaderText="Middle Name" SortExpression="middleName" ItemStyle-HorizontalAlign="Center" ItemStyle-CssClass="ui-widget-content" ControlStyle-CssClass="text required ui-widget-content ui-corner-all"/> 
    </Columns> 
</asp:GridView> 
<asp:SqlDataSource ID="sqlTEST" runat="server" 
ConnectionString="<%$ ConnectionStrings:sqlTEST %>" SelectCommand="SELECT [lastName] 
     ,[firstName] 
     ,[middleName] 
     ,[suffix] 
     ,a.[userid] 
     from [TEST].[dbo].[Identity] 
      where ([lastName] like '%' + @lname + '%' and 
       [firstName] like'%' + @fname + '%' and 
     [middleName] like'%' + @mname + '%') 
     or ([lastName] like '%' + @lname + '%' and 
       [firstName] like'%' + @fname + '%' and 
       @mname is null)     
     or ([lastName] like '%' + @lname + '%' and 
       [middleName] like'%' + @mname + '%' and 
       @fname is null) 
      or ([firstName] like '%' + @fname + '%' and 
       [middleName] like'%' + @mname + '%' and 
       @lname is null) 
      or ([lastName] like '%' + @lname + '%' and 
       @fname is null and 
       @mname is null) 
    or (@lname is null and 
       [firstName] like'%' + @fname + '%' and 
       @mname is null) 
      or (@lname is null and 
       @fname is null and 
       [middleName] like'%' + @mname + '%')  
      or (@fname is null and @lname is null and @mname is null)  
     order by [lastName], [firstName], [middleName]" 
    CancelSelectOnNullParameter="false" > 
<SelectParameters> 
    <asp:ControlParameter ControlID="lname" Name="lname" PropertyName="Text" ConvertEmptyStringToNull="true" /> 
    <asp:ControlParameter ControlID="fname" Name="fname" PropertyName="Text" ConvertEmptyStringToNull="true" /> 
    <asp:ControlParameter ControlID="mname" Name="mname" PropertyName="Text" ConvertEmptyStringToNull="true" /> 
</SelectParameters> 
</asp:SqlDataSource> 
</asp:Panel> 
</asp:Content> 
+0

請問您是否可以澄清「如果選擇了多個參數的數據,選擇標準將被忽略」?這是否意味着:沒有記錄被返回?或所有記錄都返回?或返回錯誤的記錄子集? – pete 2014-12-09 18:27:06

回答

0

我想,就像在你的查詢@mname is null有事情就意味着查詢時,一箱是空的,在這種情況下,我很爲難,但也可能是腦屁只火的那部分。它說的位

@fname is null and @lname is null and @mname is null 

對我來說看起來有點奇怪。你可能打算把你的字段名稱放在那裏。

0

可能出現的問題,我看到:

asp:ControlParameter沒有Type宣佈,默認爲TypeCode.Object。嘗試將其設置爲String

<asp:ControlParameter ControlID="lname" Name="lname" PropertyName="Text" ConvertEmptyStringToNull="true" Type="String" /> 
<asp:ControlParameter ControlID="fname" Name="fname" PropertyName="Text" ConvertEmptyStringToNull="true" Type="String" /> 
<asp:ControlParameter ControlID="mname" Name="mname" PropertyName="Text" ConvertEmptyStringToNull="true" Type="String" /> 

您的查詢的邏輯比它需要的更復雜。請嘗試:

SELECT  [lastName] 
      , [firstName] 
      , [middleName] 
      , [suffix] 
      , a.[userid] 
FROM  [TEST].[dbo].[Identity] 
WHERE  ([lastName] LIKE '%' + @lname + '%' OR @lname IS NULL) 
      AND ([firstName] LIKE '%' + @fname + '%' OR @fname IS NULL) 
      AND ([middleName] LIKE '%' + @mname + '%' OR @mname IS NULL) 
ORDER BY [lastName] 
      , [firstName] 
      , [middleName]