问题
I keep getting this error when trying to use @itemname
in a SQL search query. The code should search the values in the SQL table and display them here. Thanks.
Must declare the scalar variable "@itemname".
Code for 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>
回答1:
The message means the parameter itemname
is not declared. Try adding the parameter into the SqlDataSource
<asp:SqlDataSource ... OnSelecting="ds_Selecting">
<SelectParameters>
<asp:Parameter Name="itemname" Type="Int32" DefaultValue="0" />
</SelectParameters>
....
</asp:SqlDataSource>
and then in the code behind set its value:
protected void ds_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
{
e.Command.Parameters[0].Value = "Value";
}
There are many options for setting the value using derived classes of System.Web.UI.WebControls.Parameter
, some of these classes do not require code behind, for example asp:ControlParameter
or asp:QueryStringParameter
.
来源:https://stackoverflow.com/questions/37121598/asp-net-sql-search-engine-error