我有SqlDataSource
使用此SelectCommand
:
<asp:SqlDataSource ID="DSPatients"
ConnectionString="<%$ ConnectionStrings:CSMain %>"
ProviderName="<%$ ConnectionStrings:CSMain.ProviderName %>"
SelectCommand="SELECT Id, dbo.PatientDescriptive(Id) Descriptive FROM Patient ORDER BY Id"
...
runat="server">
<asp:ListBox Rows="10" ID="patientsList" DataSourceID="DSPatients" DataValueField="Id" DataTextField="Descriptive" AutoPostBack="false" runat="server" />
效果很好。
我有这个TextBox
<asp:TextBox ID="tbPatient" runat="server" MaxLength="100" />
和搜索按钮
<asp:Button ID="btnSearch" runat="server" Text="Search"
OnClick="btnSearch_Click" CausesValidation="false" />
现在,我想修改SelectCommand
,以便当用户点击btnSearch按钮时,它只搜索传入的tbPatient
文本框中的患者姓名LIKE。
要做到这一点,我去了后面的代码并尝试:
protected void btnSearch_Click(object sender, EventArgs e)
{
DSPatients.SelectParameters.Add("Ptrn", tbPatient.Text);
DSPatients.SelectCommand = "SELECT Id, dbo.PatientDescriptive(Id) Descriptive FROM Patient WHERE Name LIKE @Ptrn ORDER BY Id";
DSPatients.Select(DataSourceSelectArguments.Empty); // Is the problem here? What I have to put inside?
DSPatients.SelectParameters.Clear();
}
当我跑步时,我收到以下错误:
异常详细信息:System.Data.SqlClient.SqlException:必须声明 标量变量&#34; @ Ptrn&#34;。
我希望ListBox只显示姓名的患者LIKE在文本框中输入的患者。我该如何解决这个问题?
答案 0 :(得分:0)
不确定这是否肯定是问题,但是,
DSPatients.SelectParameters.Add("Ptrn", tbPatient.Text);
参数应包含@符号,如此
DSPatients.SelectParameters.Add("@Ptrn", tbPatient.Text);