SqlDataSource后面的SelectParameters代码

时间:2015-02-21 16:02:02

标签: c# asp.net sql-server parameters sqldatasource

我有SqlDataSource使用此SelectCommand

为ListBox提供信息
<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在文本框中输入的患者。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

不确定这是否肯定是问题,但是,

DSPatients.SelectParameters.Add("Ptrn", tbPatient.Text);

参数应包含@符号,如此

DSPatients.SelectParameters.Add("@Ptrn", tbPatient.Text);