使用 ASP.Net web.config 键作为查询参数时出现问题

Issue when using ASP.Net web.config key as query parameter

我发现这个问题似乎相关但没有成功解决我的问题:Defining ConnectionString in asp SqlDataSource

大部分与此相关的问题都是关于连接字符串的。但是,我的问题有点不同。

在我的测试场景中,我正在创建一个评论网站。我有两个表:reviewssites。我正在创建一个页面,允许用户根据登录用户的 ID 查看他们自己的评论。

<asp:SqlDataSource ID="ReadReviewDataSource" 
                   runat="server" 
                   ConnectionString="<%$ ConnectionStrings:Labor32_ECConnectionString %>" 
                   SelectCommand="<%="SELECT sites.name 
                   FROM sites 
                   INNER JOIN reviews ON sites.id = reviews.site_id 
                   WHERE reviews.usr_id =" +
                   ConfigurationManager.AppSettings["TestUserID"]%>">
</asp:SqlDataSource>

每当我尝试测试该站点时,我都会得到 Parser Error Message: Server tags cannot contain <% ... %> constructs. 我发现了几个在其他上下文中讨论此问题的结果,但其中大多数都将整个连接信息或查询替换为web.config 键值。在这种情况下,我只想用它替换我的参数。

当我遵循此处找到的一些指导时:https://forums.asp.net/t/1471702.aspx?Using+web+config+settings+in+a+asp+SqlDataSource+ I got an error that said "The identifier that starts with....is too long. Maximum length is 128." I tried to follow the guidance on this page: https://www.sqlservercentral.com/Forums/208737/The-identifier-that-starts-withis-too-long-Maximum-length-is-128 但我不是 运行 存储过程(我想 VS 可能是 运行 我的 SQL通过后端的 SP 声明,但我是新手,不熟悉它的工作原理)。

任何人都可以提供任何指导吗?

您可以尝试以下操作: 添加 SelectParameter 和 OnSelecting 事件处理程序。在 OnSelecting 事件处理程序后面的代码中设置 UserId 参数

<asp:SqlDataSource ID="ReadReviewDataSource" 
                   runat="server" 
                   ConnectionString="<%$ ConnectionStrings:Labor32_ECConnectionString %>" 
                   SelectCommand="SELECT sites.name 
                   FROM sites 
                   INNER JOIN reviews ON sites.id = reviews.site_id 
                   WHERE reviews.usr_id = @UserId"
                   OnSelecting="ReadReviewDataSource_Selecting">
          <SelectParameters>  
              <asp:Parameter Name="UserId" />
          </SelectParameters>
</asp:SqlDataSource>

隐藏代码:

  protected void ReadReviewDataSource_Selecting(object sender, SqlDataSourceSelectingEventArgs e)    
    {    
         e.Command.Parameters["@UserId"].Value =  ConfigurationManager.AppSettings["TestUserID"];
    }