要实现的功能是根据dropdownlist的不用选项,调用不同的sql查询语句
出现错误为:selectcommand无法查询,提示错误如下:'<' 附近有语法错误。 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Data.SqlClient.SqlException: '<' 附近有语法错误。<%string sql;
          if (int.Parse( this.DropDownList1.SelectedValue) == 1)
          {
              sql = "select * from products";
          }
          else
              sql = "SELECT * FROM [products] WHERE ([typ_id] = @typ_id)";
            
             %>
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:GoodsConnectionString %>"
            SelectCommand="<% =sql %>">
            <SelectParameters>
                <asp:ControlParameter ControlID="DropDownList1" Name="typ_id" PropertyName="SelectedValue"
                    Type="Int32" />
            </SelectParameters>
        </asp:SqlDataSource>

解决方案 »

  1.   

    把<% %>换成 <script runat="server"></script>
      

  2.   

    可能还需要指定一下语言,vb.net好像是默认的
      

  3.   

    改进为以下还是出现同样的错误
    <script runat="server">
                protected string sqltext()
                {
                    string sql;
                    if (int.Parse(this.DropDownList1.SelectedValue) == 1)
                    {
                        sql = "select * from products";
                    }
                    else
                        sql = "SELECT * FROM [products] WHERE ([typ_id] = @typ_id)";
                    return sql;
                }
             </script>
            
           
            <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:GoodsConnectionString %>"
                SelectCommand="<% =sqltext() %>">
                <SelectParameters>
                    <asp:ControlParameter ControlID="DropDownList1" Name="typ_id" PropertyName="SelectedValue"
                        Type="Int32" />
                </SelectParameters>
            </asp:SqlDataSource>
      

  4.   

    SelectCommand="<% =sqltext() %>">
    ===
    先把这里替换成实际的字符串测试一下