C# 如何通过使用会话仅显示首选数据来使用sqldatasource?

C# 如何通过使用会话仅显示首选数据来使用sqldatasource?,c#,asp.net,web,.net-framework-version,C#,Asp.net,Web,.net Framework Version,对我来说,处理sqldatasource的通常方法是这样。它通常以表格形式显示所有论坛 <asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:elibraryDBConnectionString %>" SelectCommand="SELECT [forum

对我来说,处理sqldatasource的通常方法是这样。它通常以表格形式显示所有论坛

<asp:SqlDataSource ID="SqlDataSource2" runat="server" 
    ConnectionString="<%$ ConnectionStrings:elibraryDBConnectionString %>"
    SelectCommand="SELECT [forum_id], [forum_topic], [forum_description], [forum_status], [company_name], [replies_count], [publish_date], [publisher_name], [forum_img_link], [moderator_name] FROM [forum_accept_tbl]">
</asp:SqlDataSource>


然而,我不想显示所有的论坛,而只想显示一个带有会话论坛id的论坛。下面是对我不起作用的代码

<asp:SqlDataSource ID="SqlDataSource2" runat="server" 
    ConnectionString="<%$ ConnectionStrings:elibraryDBConnectionString %>" 
    SelectCommand="SELECT [forum_id], [forum_topic], [forum_description], [forum_status], [company_name], [replies_count], [publish_date], [publisher_name], [forum_img_link], [moderator_name] FROM [forum_accept_tbl] WHERE [Forum_id] = Session["Forum_id"]"></asp:SqlDataSource>

我试图添加位置,但它无法识别会话。这是在我的forum.aspx代码中。顺便说一句,它是否应该在forum.aspx.cs中更改?我对asp.net还是新手,我认为这是一个简单的错误,但我希望我能学到更多

编辑了当前进度。阅读了一些有用的文档后,提出了一些建议。下面是我当前的进度和显示的当前错误

                     <asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:elibraryDBConnectionString %>" SelectCommand="SELECT [forum_id], [forum_topic], [forum_description], [replies_count], [forum_img_link], [company_name], [publisher_name], [publish_date], [moderator_name] FROM [forum_accept_tbl] WHERE ([forum_id] = @forum_id)"> <SelectParameters> <asp:SessionParameter Name="forum_id" SessionField="forum_id" Type="Int32" /> </SelectParameters></asp:SqlDataSource>
                     <div class="col">
                        <asp:GridView class="table table-striped table-bordered" ID="GridView2" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource2" OnSelectedIndexChanged="GridView2_SelectedIndexChanged">
                           <Columns>

我已经检查了会话,它运行良好(使用正确的会话论坛id)。但是,在我运行它并单击链接按钮后,它会在下面显示此错误:

说明:编译服务此请求所需的资源时出错。请查看以下特定错误详细信息,并适当修改源代码

编译器错误消息:CS1061:“forum\u aspx”不包含“GridView2\u SelectedIndexChanged”的定义,并且找不到接受类型为“forum\u aspx”的第一个参数的可访问扩展方法“GridView2\u SelectedIndexChanged”(是否缺少using指令或程序集引用?)

源错误:第44行



Line 42:                      <asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:elibraryDBConnectionString %>" SelectCommand="SELECT [forum_id], [forum_topic], [forum_description], [replies_count], [forum_img_link], [company_name], [publisher_name], [publish_date], [moderator_name] FROM [forum_accept_tbl] WHERE ([forum_id] = @forum_id)"> <SelectParameters> <asp:SessionParameter Name="forum_id" SessionField="forum_id" Type="Int32" /> </SelectParameters></asp:SqlDataSource>
Line 43:                      <div class="col">
Line 44:                         <asp:GridView class="table table-striped table-bordered" ID="GridView2" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource2" OnSelectedIndexChanged="GridView2_SelectedIndexChanged">
Line 45:                            <Columns>
Line 46:                               <asp:BoundField DataField="forum_id" HeaderText="forum_id" ReadOnly="True" SortExpression="forum_id" InsertVisible="False" >

第42行:
第43行:
第44行:
第45行:
第46行:

因此,在我的例子中,我获取了会话论坛id(即“14”),并且按照我的预期,它应该从数据库中获取14,并显示在页面上。但事实上,这是一个错误。有人能解释一下吗?我也阅读了一些文档,并遵循了每个步骤。我还是新手,正在努力学习我能学的东西。

不需要在代码中这样做,您可以这样编写sql:

WHERE [Forum_id] = @fid">

然后在SqlDataSource中声明参数(您当前有
>白色代码隐藏上的sql命令。您的意思是在aspx.cs文件中执行该命令?哪是后端代码?但语法是什么?因为在前端执行该命令时会有所不同,对吗?stackoverflow的语法highlighter会主动告诉您为什么没有执行该命令。)work@JavaStudent不完全是。这是一个非常古老的网络表单s控件直接对连接字符串指定的数据库执行SQL查询。它从来都不流行,因为它有很多限制。它只是用来替代桌面应用程序中VB6的数据源控件。顺便说一句,除了非常基本的单表CRUD之外,它并没有那么流行。如果你只是ge进入ASP.NET,不用担心WebForms。它不仅非常旧和过时,而且不会迁移到.NET 5。尽管名称不同,它是.NET Core 5。从insteadHello开始,这非常有用!我已经查看并阅读了您发送的链接。但我更新了我当前的进度。您知道原因吗?这是一个完整的问题恐怕是不同的问题。你应该复制你当前的问题文本,将你的问题编辑回原来的演示文稿,接受这个答案,然后问一个新的问题。SO的任务是对一个问题->一个解决方案进行问答,目的是当其他人有相同的问题时,他们可以得到相同的解决方案。这不是故意的开始时有人问“我如何从c#开始?”然后通过反复编辑每个不同问题的问题,连续移动目标柱,最后是“我如何为我的空中交通管制系统编写单元测试?”
    <SelectParameters>
    <asp:SessionParameter Name="fid" SessionField="Forum_ID" Type="Int32" />
</SelectParameters>