SqlDataSource - 使用基于会话的简单查询获取数据

时间:2014-01-11 18:55:17

标签: c# asp.net sqldatasource

我的应用程序中有一个下拉列表,应该填充基于会话变量的值。

<asp:SqlDataSource
      id="SqlDataSource3"
      runat="server"
      ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>"
      ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
      SelectCommand="SELECT ID_SHOP
                     FROM SHOP
                     WHERE ID_SHOP_CITY = ?">
      <SelectParameters>
          <asp:SessionParameter
            Name="selectedCityId"
            SessionField="selectedCityId"
            DefaultValue="5" />
      </SelectParameters>
  </asp:SqlDataSource>

基于这个例子: http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.sessionparameter.aspx

我收到语法错误 - 字符无效。

如果我更改了我的代码:

<asp:SqlDataSource
      id="SqlDataSource3"
      runat="server"
      ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>"
      ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
      SelectCommand="SELECT ID_SHOP
                     FROM SHOP
                     WHERE ID_SHOP_CITY = 1">
      <SelectParameters>
          <asp:SessionParameter
            Name="selectedCityId"
            SessionField="selectedCityId"
            DefaultValue="5" />
      </SelectParameters>
  </asp:SqlDataSource>

它有效。但是我不需要那个where子句,我需要使用session变量。我该如何解决?

1 个答案:

答案 0 :(得分:2)

您指向的示例是使用 Odbc Provider ,它使用?作为参数。但是您使用的是 SqlClient提供程序,它需要@ParamName作为参数。您可以在此处查看差异:Using Parameters with the SqlDataSource Control

您必须将标记更改为:

<asp:SqlDataSource
      id="SqlDataSource3"
      runat="server"
      ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>"
      ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
      SelectCommand="SELECT ID_SHOP
                     FROM SHOP
                     WHERE ID_SHOP_CITY = @selectedCityId">
    <SelectParameters>
        <asp:SessionParameter
            Name="selectedCityId"
            SessionField="selectedCityId"
            DefaultValue="5" />
    </SelectParameters>
</asp:SqlDataSource>