在VB.NET 2010 Web表单应用程序中。我希望用户能够选择不同的客户 基于是否选择了名字,姓氏或中间名。想法是让用户选择一个,两个和/或三个 参数并点击搜索键。
问题是结果只返回基于一个参数的数据。如果选择了多个参数的数据,则选择 标准被忽略。 当我在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 :(得分:0)
我想在你的查询中有@mname is null
这样的东西意味着查询的那一部分只在一个空盒子时才会触发,在这种情况下我很难过,但它也可能是一个大脑放屁。它所说的位
@fname is null and @lname is null and @mname is null
对我来说有点奇怪。您可能打算将您的字段名称放在那里。
答案 1 :(得分: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]