【问题标题】:how to pass sql table name using session on other page in asp.net如何在asp.net的其他页面上使用会话传递sql表名
【发布时间】:2015-03-17 06:05:40
【问题描述】:

我有页面名称 glass.aspx、shirt.aspx。这些页面包含图像。当任何人点击图片时,他们会重定向到 product.aspx 页面。 Product.aspx 包含图像的所有详细信息。

我的product.aspx代码

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
        ConnectionString=";Password="
        ProviderName="System.Data.SqlClient" 
        SelectCommand="SELECT [id],[ImagePath],[ImageName],[details],[price] FROM [BestSherwani] WHERE ([id] = @id)">

        <SelectParameters>
            <asp:QueryStringParameter Name="id" QueryStringField="id" Type="Decimal" />
        </SelectParameters>

        </asp:SqlDataSource> 


    <asp:DataList ID="DataList1" runat="server" DataSourceID="SqlDataSource1">
        <ItemTemplate>
            <asp:Image ID="Image1" runat="server" Width="200px" Height="300"
                 ImageUrl='<%# Eval("ImagePath", "~/admin/{0}") %>' /><br />


         <asp:Label ID="ImageUrlLabel" Font-Size="XX-Large" runat="server" ForeColor="Red" Text='<%# Eval("ImageName") %>' Visible="False"></asp:Label><br />

            <asp:Label ID="DescriptionLabel" Font-Size="XX-Large" runat="server" ForeColor="Red" Text='<%# Eval("details") %>'></asp:Label><br />--%>

当任何人点击任何图片时,我想在下面的代码上传递会话

SelectCommand="SELECT [id],[ImagePath],[ImageName],[details],[price] FROM [ SESSION PASS ] WHERE ([id] = @id)

【问题讨论】:

    标签: asp.net .net session


    【解决方案1】:

    您似乎正在尝试传递要从中选择的表名?

    我相信让您完成这项工作的最快方法是在查询字符串中传递您的表名,并在您的产品页面的后端动态创建您的 SelectCommand。

    glass.aspx

        <ItemTemplate>
            <a href=product.aspx?producttype=bestsherwani>
                 <asp:Image ID="Image1" runat="server" Width="200px" Height="300"
                      ImageUrl='<%# Eval("ImagePath", "~/admin/{0}") %>' />
            </a><br />
    

    product.aspx 后面的代码

    protected void Page_Load(object sender, EventArgs e)
    {
         // TODO, handle case of empty query string
          SqlDataSource1.SelectCommand = @"SELECT [id],[ImagePath],[ImageName],[details],[price] FROM " + Request.QueryString["producttype"] + " WHERE ([id] = @id)";
    }
    

    这应该可以满足您的需求,但更大的问题是您设置数据的方式,它可能会出现故障和不必要的复杂性。

    您的每个产品似乎都有一个单独的表格,这不是一个好的设计。相反,您应该有一个表并有一个 ProductType 字段[带有外键的 ID 来分隔类型表]。然后,您可以将类型放在产品页面上的 Where 子句中。正如你现在所拥有的,错误传递的表名会引发一个丑陋的 SQL 错误。

    您还应该研究三层设计并在存储过程中获取您的 sql 并使用 ObjectDataSource。

    干杯

    【讨论】:

    • 感谢您的解决方案。客户需要每个表的每个表,所以我必须这样做。
    • 太棒了。如果我解决了您的问题,请接受答案和/或投票。如果我错过了标记,请告诉我,我会看看是否可以提供更多帮助。如果你真的想使用会话变量[我不是很喜欢],你可以使用玻璃页面上的链接按钮,在回发功能中设置会话,然后重定向到产品页面
    • 它给了我错误,即 where 附近的语法不正确。
    • 我从 SqlDataSource 复制了您的 sql 字符串,但看着它,我很好奇“id = @id”在哪里。看起来您打算将 @id 作为传递的参数,但它来自哪里?您是否不仅选择了表名,还选择了另一个 id 字段?如果是这样,则需要从某个地方获取它,因为当前将它放在引号中会导致它按原样传递并且确实会出错。
    • 当任何人点击图片时,会传递图片 id 并获取具有该 id 的其他详细信息。
    猜你喜欢
    • 2012-06-17
    • 1970-01-01
    • 2013-12-04
    • 2017-05-21
    • 1970-01-01
    • 2017-02-12
    • 2018-04-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多