我正在使用单个文本框来搜索报告并过滤掉记录。我的一个字段是 int32,其余的是 varchar。因此,当过滤器尝试将文本框中的字符串与 int32 字段进行比较时,出现错误。这是 SQLDataSouce 和搜索框:
<asp:TextBox ID="SearchBox" AutoPostBack="true" OnTextChanged="SearchBox_TextChanged" runat="server"></asp:TextBox>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:oneworldunitedConnectionString %>"
SelectCommand="SELECT usrs.UserID, usrs.UserName, usrs.FirstName, usrs.LastName, jndt.PropertyValue AS JoinDate, rgn.PropertyValue AS Region, cty.PropertyValue AS City, spnsrnm.PropertyValue AS SponsorName FROM dbo.Users AS usrs INNER JOIN
dbo.UserProfile AS jndt ON jndt.PropertyDefinitionID = 412 AND usrs.UserID = jndt.UserID INNER JOIN
dbo.UserProfile AS cty ON cty.PropertyDefinitionID = 27 AND usrs.UserID = cty.UserID INNER JOIN
dbo.UserProfile AS rgn ON rgn.PropertyDefinitionID = 28 AND usrs.UserID = rgn.UserID INNER JOIN
dbo.UserProfile AS spnsrnm ON spnsrnm.PropertyDefinitionID = 421 AND usrs.UserID = spnsrnm.UserID"
FilterExpression="UserID LIKE '%{0}%' OR UserName LIKE '%{0}%' OR FirstName LIKE '%{0}%' OR LastName LIKE '%{0}%' OR JoinDate LIKE '%{0}%' OR Region LIKE '%{0}%' OR City LIKE '%{0}%' OR SponsorName LIKE '%{0}%'">
<FilterParameters>
<asp:ControlParameter Name="Search" ControlID="SearchBox" PropertyName="Text" />
</FilterParameters>
</asp:SqlDataSource>
请不要抨击 sql 语句,我知道它的效率极低。有谁知道如何更改,FilterExpression
以便在尝试将文本框值与 UserID 字段进行比较时不会出错?我试过这样做:
FilterExpression="CAST(UserID as varchar(4)) LIKE '%{0}%' OR UserName LIKE '%{0}%' OR FirstName LIKE '%{0}%' OR LastName LIKE '%{0}%' OR JoinDate LIKE '%{0}%' OR Region LIKE '%{0}%' OR City LIKE '%{0}%' OR SponsorName LIKE '%{0}%'"
但这没有用。我认为这样做UserID LIKE CAST('%{0}%' as varchar(4))
是行不通的,因为如果它实际上是他们输入的字符串,那么你会得到一个错误。
编辑:这是我收到的错误消息“无法对 System.Int32 和 System.String 执行 'Like' 操作。” 那是在我做演员之前。然后在我进行演员表之后,我得到“表达式包含未定义的函数调用 Cast()”。
有人有想法么?
谢谢,
马特