【问题标题】:ASP.NET SQL Search Engine ErrorASP.NET SQL 搜索引擎错误
【发布时间】:2016-05-09 17:08:17
【问题描述】:

尝试在 SQL 搜索查询中使用 @itemname 时,我不断收到此错误。代码应搜索 SQL 表中的值并在此处显示它们。谢谢。

必须声明标量变量“@itemname”。

search.aspx的代码:

<body>
    <asp:SqlDataSource ID="searchresults" runat="server"
        ConnectionString='<%$ ConnectionStrings:ConnectionString %>'
        SelectCommand="SELECT [ID], [itemname] FROM [reports] WHERE ([itemname] LIKE '%' + @itemname + '%')">
    </asp:SqlDataSource>
    <asp:ListView ID="displayitems" runat="server" DataSourceID="searchresults" DataKeyNames="ID">
        <EmptyDataTemplate>
            <span>
                No items for <asp:Label Text='' runat="server" ID="itemname" />
            </span>
        </EmptyDataTemplate>
        <ItemTemplate>
            <asp:HyperLink ID="HyperLink1" runat="server"
                NavigateURL='<%# "Sale.aspx?saleid=" + Eval("ID") %>'>
                <asp:Label Text='<%# Eval("itemname") %>' runat="server" ID="ItemNameLabel" /> <br />
            </asp:HyperLink>
        </ItemTemplate>
    </asp:ListView>
</body>

【问题讨论】:

    标签: c# asp.net search


    【解决方案1】:

    该消息表示参数itemname 未声明。尝试将参数添加到SqlDataSource

    <asp:SqlDataSource ... OnSelecting="ds_Selecting">
        <SelectParameters>
            <asp:Parameter Name="itemname" Type="Int32" DefaultValue="0" />
        </SelectParameters>
    
        ....
    </asp:SqlDataSource>
    

    然后在后面的代码中设置它的值:

    protected void ds_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
    {
        e.Command.Parameters[0].Value = "Value";
    } 
    

    使用System.Web.UI.WebControls.Parameter 的派生类设置值有很多选项,其中一些类不需要后面的代码,例如asp:ControlParameterasp:QueryStringParameter

    【讨论】:

    • 我试试看。虽然 itemname 是我的 SQL 数据库中的行之一的名称?我要搜索它,你确定我应该设置它的值吗?
    • 我刚刚找到this post,参数值在后面的代码中设置。
    • 我仍然无法让它正常工作,我正在遵循一个不包括触摸文件背后代码的教程。我无法解决问题。
    • 可以不用后面的代码,例如asp:ControlParameter将参数值绑定到另一个控件,还有更多选项,请看更新答案。
    • 如果您在 search.aspx 页面上有搜索框 (asp:TextBox),请使用 asp:ControlParameter。如果您打开像search.aspx?keyword=how+to+buy+something 这样的页面,请使用asp:QueryStringParameter。这两种方法都允许在没有代码的情况下获得结果。
    猜你喜欢
    • 2011-01-19
    • 2014-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多