佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 867|回复: 12

shopping cart的问题(asp.net)

[复制链接]
发表于 3-5-2007 06:46 PM | 显示全部楼层 |阅读模式

我想说能否按了confirm button后,cart里所有的资料都能存入database(access)里,这有可能实现吗?
我做过但只能将textbox里的资料存入而不是cart里的资料。
回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 3-5-2007 06:47 PM | 显示全部楼层
这是cart的code:

Dim objDT As System.Data.DataTable
Dim objDR As System.Data.DataRow

Private Sub Page_Load(s As Object, e As EventArgs)
    If Not IsPostBack Then
        makeCart()
    End If
End Sub

Function makeCart()
    objDT = New System.Data.DataTable("Cart")
    objDT.Columns.Add("ID", GetType(Integer))
    objDT.Columns("ID").AutoIncrement = True
    objDT.Columns("ID").AutoIncrementSeed = 1
    objDT.Columns.Add("Quantity", GetType(Integer))
    objDT.Columns.Add("Product", GetType(String))
    Session("Cart") = objDT
End Function

Sub AddToCart(s As Object, e As EventArgs)
    objDT = Session("Cart")
    objDR = objDT.NewRow
    objDR("Quantity") = txtQuantity.Text
    objDR("Product") = txtProduct.Text
    objDT.Rows.Add(objDR)
    Session("Cart") = objDT
    dg.DataSource = objDT
    dg.DataBind()
End Sub

Sub Delete_Item(s As Object, e As DataGridCommandEventArgs)
    objDT = Session("Cart")
    objDT.Rows(e.Item.ItemIndex).Delete()
    Session("Cart") = objDT
    dg.DataSource = objDT
    dg.DataBind()
End Sub
回复

使用道具 举报

 楼主| 发表于 3-5-2007 06:50 PM | 显示全部楼层
Sub AddRecord(ByVal Sender As Object, ByVal E As EventArgs)
objDT = Session("Cart")               
objDR = objDT.NewRow       
objDR("Quantity") = txtQuantity.Text       
objDR("Product") = txtProduct.Text       
objDT.Rows.Add(objDR)       
Session("Cart") = objDT       

Dim objConn As New oleDbConnection
Dim sqlCmd as String
Dim objCmd As New OleDbCommand(sqlCmd,objConn)       
objConn.C
objConn.ConnectionString+= "Data Source= " & Server.MapPath("Customers.mdb")         
sqlCmd = "INSERT INTO product (ID, Categories) VALUES (@ID, @Categories)"       
objCmd = New OleDbCommand(sqlCmd, objConn)       
objCmd.Parameters.Add("@ID",objDR("Quantity"))       
objCmd.Parameters.Add("@Categories", objDR("Product"))       

objConn.Open()       
objCmd.ExecuteNonQuery()       
objConn.Close()                       
End Sub

这是我confirm button的code,我也知道这样子做的话只会存入textbox里的资料,所以想问问该怎么才能存入cart里所有的资料。
回复

使用道具 举报

发表于 4-5-2007 12:57 AM | 显示全部楼层
你的 Cart 是用 DataTable 嘛, 你可以 loop 你的 DataTable.Row 来取得全部的 item 呀,然后在用那些 cart item 来制作 sql。
回复

使用道具 举报

 楼主| 发表于 4-5-2007 01:55 AM | 显示全部楼层
谢谢,但还是不太明白,
怎么说loop DataTable.Row 来取得全部的 item?这点不明白。
可以的话能否在指教一下下?谢谢
回复

使用道具 举报

发表于 4-5-2007 09:30 AM | 显示全部楼层
原帖由 wcchyau 于 4-5-2007 01:55 AM 发表
谢谢,但还是不太明白,
怎么说loop DataTable.Row 来取得全部的 item?这点不明白。
可以的话能否在指教一下下?谢谢


你可以那样写

for (int x = 0; x < objDT.Rows.Count; x++) {
  string sql = "INSERT INTO product (ID, Categories) VALUES ('" + objDT.Rows[x]["Quantity"].ToString() + "', '" + objDT.Rows[x]["Product"].ToString() + "')";

  // execute sql here

}

以上是 C# 的 code, 自行把它转为 VB.NET 吧。。。 事因我写不惯 VB.NET 的 code。

[ 本帖最后由 goatstudio 于 4-5-2007 09:31 AM 编辑 ]
回复

使用道具 举报

Follow Us
 楼主| 发表于 4-5-2007 02:14 PM | 显示全部楼层
好的,谢谢帮忙!
回复

使用道具 举报

 楼主| 发表于 4-5-2007 03:10 PM | 显示全部楼层
for  x = 0 to objDT.Rows.Count
sqlCmd = "INSERT INTO product (ID, Categories) VALUES ( @ID ,  @Categories )"        
objCmd = New OleDbCommand(sqlCmd, objConn)        
objCmd.Parameters.Add("@ID",objDT.Rows[x]["Quantity"].ToString())        
objCmd.Parameters.Add("@Categories", objDT.Rows[x]["Product"].ToString())

Compiler Error Message: BC32017: Comma, ')', or a valid expression continuation expected.

这是我改成vb后的code,但出现这error,请问这error表示什么呢?还是我改错了?
回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 4-5-2007 08:44 PM | 显示全部楼层
原来是这样
for x = 0 to objDT.Rows.Count
sqlCmd = "INSERT INTO product (ID, Categories) VALUES ( @ID , @Categories )"        
objCmd = New OleDbCommand(sqlCmd, objConn)        
objCmd.Parameters.Add("@ID",objDT.Rows(x)!Quantity.ToString())        
objCmd.Parameters.Add("@Categories", objDT.Rows(x)!Product.ToString())

但这次的当按了confirm button后出现这种error
Exception Details:
System.IndexOutOfRangeException: There is no row at position 2.(我add了2个item在cart里,如果是1个item的话就是1)

怎么回事呢?是不是for loop的问题呢?

[ 本帖最后由 wcchyau 于 4-5-2007 09:13 PM 编辑 ]
回复

使用道具 举报

发表于 5-5-2007 09:17 AM | 显示全部楼层

回复 #9 wcchyau 的帖子

把 for x = 0 to objDT.Rows.Count
改成 for x = 0 to objDT.Rows.Count - 1
必须减掉1... 因为ASP.Net是zero-based的... 也就是说我们算是从1开始算起... 但ASP.Net是从0算起...

试试看吧...
回复

使用道具 举报

 楼主| 发表于 5-5-2007 10:31 AM | 显示全部楼层
原来如此,谢谢
但这样的话最只能将cart里最后一项item加入database里,而不能将全部一起加入。
比如说我之前加入了三项item,但confirm时只讲三项中的最后一项加入。
回复

使用道具 举报

发表于 5-5-2007 10:44 AM | 显示全部楼层
原帖由 wcchyau 于 5-5-2007 10:31 AM 发表
原来如此,谢谢
但这样的话最只能将cart里最后一项item加入database里,而不能将全部一起加入。
比如说我之前加入了三项item,但confirm时只讲三项中的最后一项加入。


我不知道你完整的Code是怎样... 但依照GoatStudio大师所提供的Code... 它应该会loop through你的DataTable...
回复

使用道具 举报

 楼主| 发表于 5-5-2007 11:09 AM | 显示全部楼层
搞定了,搞定了!谢谢帮忙,感激!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 22-7-2025 08:20 PM , Processed in 0.172698 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表