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

How to use sqldatasource by showing only preferred data using session?

我做sqldatasource的常用方法是这样的。通常以 table 格式显示所有论坛。

<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>

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

EDITED CURRENT PROGRESS. 阅读一些有用的文件后建议。以下是我当前的进度以及它显示的当前错误。

                     <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)。但是,在我 运行 它并单击 link 按钮之后,它显示以下错误:

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

编译器错误消息:CS1061:'forum_aspx'不包含'GridView2_SelectedIndexChanged'的定义并且没有可访问的扩展方法'GridView2_SelectedIndexChanged'接受第一个可以找到 'forum_aspx' 类型的参数(您是否缺少 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" >

所以在我的例子中,我获取了会话论坛 ID(即“14”),按照我的预期,它应该从数据库中获取 14 并将其显示在页面上。但相反,有这个错误。有人可以解释一下吗?我也阅读了一些文档,并按照每个步骤进行操作。我还是个新人,正在努力学习我能学的东西。

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

WHERE [Forum_id] = @fid">

然后在 SqlDataSource 中声明参数(您当前在其中 ><

    <SelectParameters>
    <asp:SessionParameter Name="fid" SessionField="Forum_ID" Type="Int32" />
</SelectParameters>

https://docs.microsoft.com/en-us/previous-versions/aspnet/z72eefad(v=vs.100)