猿问

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

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


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


在我的测试场景中,我正在创建一个评论网站。我有两个表:reviews和sites。我正在创建一个页面,允许用户根据登录用户的 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+我收到一条错误消息,指出“标识符以...开头的太长了。最大长度为 128。” 我试图遵循此页面上的指导:https : //www.sqlservercentral.com/Forums/208737/The-identifier-that-starts-withis-too-long-Maximum-length-is-128但我不是运行存储过程(我想 VS 可能会通过后端的 SP 运行我的 SQL 语句,但我是新手,不熟悉它的工作原理)。


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


白衣染霜花
浏览 191回答 1
1回答

呼啦一阵风

您可以尝试以下方法:添加 SelectParameter 和 OnSelecting 事件处理程序。在 OnSelecting 事件处理程序后面的代码中设置 UserId 参数<asp:SqlDataSource ID="ReadReviewDataSource"&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;runat="server"&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ConnectionString="<%$ ConnectionStrings:Labor32_ECConnectionString %>"&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;SelectCommand="SELECT sites.name&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;FROM sites&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;INNER JOIN reviews ON sites.id = reviews.site_id&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;WHERE reviews.usr_id = @UserId"&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;OnSelecting="ReadReviewDataSource_Selecting">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <SelectParameters>&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <asp:Parameter Name="UserId" />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </SelectParameters></asp:SqlDataSource>背后的代码:&nbsp; protected void ReadReviewDataSource_Selecting(object sender, SqlDataSourceSelectingEventArgs e)&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; {&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;e.Command.Parameters["@UserId"].Value =&nbsp; ConfigurationManager.AppSettings["TestUserID"];&nbsp; &nbsp; }
随时随地看视频慕课网APP
我要回答