【问题标题】:Data table + session = Shopping cart数据表+会话=购物车
【发布时间】:2017-05-12 07:55:35
【问题描述】:

大家通用

我在执行购物车时发现了一些问题

查询有效,但它不在会话中存储信息。

我会修复查询还是会话问题?

这里是代码:

 Dim constr As String = ConfigurationManager.ConnectionStrings("!aCommerce-ConnectionString!").ConnectionString

    ' Query SQL 
    Using cmd As New SqlCommand("SELECT Id,NomeProdotto, PrezzoProdotto, Quantità FROM aProdotti WHERE ID='" + Request.QueryString("ID").ToString + "' OR ID='" + Request.QueryString("ID").ToString + "'")

            Using sda As New SqlDataAdapter(cmd)
                Dim dt As New DataTable()

                Session("dt") = dt

                sda.Fill(dt)

                GridView1.DataSource = dt
                GridView1.DataBind()


            End Using
        End Using
    End Using

【问题讨论】:

  • 你真的应该使用 sql 参数。否则,您的“客户”很快就会“购买”所有东西而无需付款。使用它们非常容易,并且不需要连接字符串来创建查询,为什么仍然每个人都这样做?
  • 那么我该如何更改我的代码?我是新手,这个应用程序是用于学习编码的,不是生产用途。无论如何,谢谢!
  • 也许少一点空格会提高可读性。
  • 你已经删除了一些代码,格式化它的属性并显示所有,从你初始化连接的地方开始,到你读取会话的地方结束。因为您忘记显示最重要的内容,您尝试从会话中读取数据表但它是Nothing(是吗?)
  • 这是我的代码。连接字符串由 web.config 获取我错过了什么?

标签: asp.net e-commerce


【解决方案1】:

把你的代码改成下面

  Dim constr As String = ConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString

        Dim con As New SqlConnection()
        con.ConnectionString = constr
        con.Open()
        ' Query SQL 
        Using cmd As New SqlCommand("SELECT Id,PromoCode as NomeProdotto,PromoCodeMessage as  PrezzoProdotto, PromoCodeLimit as Quantità FROM EventPromocodetbl WHERE ID=" & Request.QueryString("ID").ToString & "", con)
            Using sda As New SqlDataAdapter(cmd)
                Dim dt As New DataTable()
                sda.Fill(dt)
                Dim SessionDt As New DataTable()
                SessionDt = Session("dt")

                If Not SessionDt Is Nothing Then

                    If (dt.Rows.Count > 0) Then
                        Dim dr As DataRow
                        dr = SessionDt.NewRow()
                        dr("Id") = dt.Rows(0)("Id").ToString()
                        dr("NomeProdotto") = dt.Rows(0)("NomeProdotto").ToString
                        dr("PrezzoProdotto") = dt.Rows(0)("PrezzoProdotto").ToString
                        dr("Quantità") = dt.Rows(0)("Quantità").ToString

                        SessionDt.Rows.Add(dr)
                    End If

                    Session("dt") = SessionDt
                    GridView1.DataSource = SessionDt
                    GridView1.DataBind()
                Else
                    Session("dt") = dt
                    GridView1.DataSource = dt
                    GridView1.DataBind()
                End If



            End Using
        End Using

问题是您将空白 DatatTable 分配给会话,然后您正在使用有问题的 DataAdapter 填充方法填充该 DataTable。

【讨论】:

  • 感谢您的回答,我已经尝试了您的代码,sda.Fill(dt) 到 Session("dt") = dt 。但它不起作用....
  • 我也添加了这个:Dim con2 As SqlConnection con2 = New SqlConnection("Data Source=NBK012\ARPASQL;Initial Catalog=aCommerceDB;Integrated Security=True") con2.Open() ....
  • 问题是当我尝试将第二个项目添加到购物车时,它会替换以前的
  • 在这种情况下,您的代码应该与此不同。让我也提供给你
  • 这是会话中的购物车和数据表的目标,谢谢你,你真好!
猜你喜欢
  • 2015-01-26
  • 2011-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多