Assiging parameters to sqldatasource

2020-04-21 03:59发布

问题:

I'm trying to get data from SQL Server and use it in a formview, but the formview control won't get any data from the datasource.

(The datasource gets parameter on page load)

Output is just: "There is nothing to see here" and an empty table.

Here is the datasource and formview tags:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
        ConnectionString="<%$ ConnectionStrings:igroup20_test2ConnectionString %>" 
        SelectCommand="SELECT * FROM [member] where ([id] = @idd)">
   <SelectParameters>
       <asp:Parameter Name="idd" Type="String" />
   </SelectParameters>
</asp:SqlDataSource>

<asp:FormView ID="FormView1" runat="server" DataSourceID="SqlDataSource1" DataKeyNames="id">
   <EmptyDataTemplate>
   There is nothing to see here.
   </EmptyDataTemplate>
   <ItemTemplate>
      <table>
         <tr>
            <td>
               <asp:Label ID="Label1" runat="server" Text='<%# Eval("id") %>'></asp:Label>
            </td>
            <td>
               <asp:Label ID="Label2" runat="server" Text='<%# Eval("f_name") %>'></asp:Label>
            </td>
         </tr>
      </table>
   </ItemTemplate>
</asp:FormView>

Here is my code behind:

 protected void Page_Load(object sender, EventArgs e)
 {
        SqlDataSource1.SelectParameters.Add("@idd", "077763554");
        FormView1.DataBind();
 }

回答1:

You have two problems:

  1. first you don't need to add the parameter again - it's already defined in your markup
  2. you don't have to use a @ in your parameter name - just the name will do.

So use this code instead:

protected void Page_Load(object sender, EventArgs e)
{
    SqlDataSource1.SelectParameters["idd"].DefaultValue = "077763554";
    FormView1.DataBind();
}

That should do the trick - set the .DefaultValue on the existing parameter, and use the idd parameter name, as defined in your markup (<asp:Parameter Name="idd" Type="String" />)



回答2:

It seems like you are adding 2 parameters here. One declarative and one in your code behind.

Try to add only the parameter in your code behind. also change the name to idd instead of @idd.

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
        ConnectionString="<%$ ConnectionStrings:igroup20_test2ConnectionString %>" 
        SelectCommand="SELECT * FROM [member] where ([id] = @idd)">
</asp:SqlDataSource>

protected void Page_Load(object sender, EventArgs e)
 {
        SqlDataSource1.SelectParameters.Add("idd", "077763554");
        FormView1.DataBind();
 }