怎么把购物车中的信息写入数据库,会面向对象的来。

时间:2021-05-22 17:24:17
最近写的一个购物网,COPY大部分,只能用GIRDVIEW读出来,却不会写放数据库。请大家指点小弟一二。代码如来
ShoppingCart.cs 面页

using System;
using System.Web.UI;
using System.Collections; //使用Hashtable类必须引入该命名空间


    [Serializable]
    public class Stat_Class
    { //定义商品类,保存商品的各种属性
        int ShangPinID; //商品ID
        String Sp_Name; //商品名称
        decimal Sp_Price; //商品价格
        int Sp_Quan; //商品数量
             public int  ItemID
        {
            get { return ShangPinID; }
            set { ShangPinID = value; }
        }

        public String ShangpinName
        {
            get { return Sp_Name; }
            set { Sp_Name = value; }
        }

        public decimal Price
        {
            get { return Sp_Price; }
            set { Sp_Price = value; }
        }

        public int Quantity
        {
            get { return Sp_Quan; }
            set { Sp_Quan = value; }
        }

        public Stat_Class(int  ItemID, String ShangpinName, decimal Price, int Quantity)
        { //构造方法,初始化商品的各个属性

            ShangPinID = ItemID;
            Sp_Name = ShangpinName;
            Sp_Price = Price;
            Sp_Quan = Quantity;
        
        }
    }

    [Serializable]
    public class ShoppingCart
    {
        Hashtable Cart_Orders = new Hashtable();
        public ICollection Orders
        {
            get { return Cart_Orders.Values; }
        }

        public decimal TotalCost
        { //计算总价格
            get
            {
                decimal total = 0;
                foreach (DictionaryEntry entry in Cart_Orders)
                {
                    Stat_Class order = (Stat_Class)entry.Value;
                    total += (order.Price * order.Quantity);
                }
                return total;
            }
        }

        public void AddItem(Stat_Class Order)
        { //添加物件方法
            Stat_Class order = (Stat_Class)Cart_Orders[Order.ItemID];
            if (order != null)
                order.Quantity += Order.Quantity;
            else
                Cart_Orders.Add(Order.ItemID, Order);
        }
        
        public void DeleteItem(int ItemID)
        { //删除物件
            if (Cart_Orders[ItemID] != null)
                Cart_Orders.Remove(ItemID);
           
        }
    }

前台CS页面
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;


public partial class gwlan : System.Web.UI.Page
{
    ShoppingCart tt = new ShoppingCart();
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
           // 获取购物车的信息
            ShowCartInfo();
            
        }

    }
    private void ShowCartInfo()
    {
        ///判定购物车中是否存在数据
        if (Session["MyShoppingCart"] == null)
        {
            Response.Write("数据出错!!!");
        }
        else
        {
            ///绑定购物车的数据,显示购物车信息
            // 获取购物车的信息
            tt = (ShoppingCart)Session["MyShoppingCart"];
 
            this.GridView1.DataSource = tt.Orders;
            this.GridView1.DataBind();
            this.Label1.Text = String.Format("合计:{0:c}", tt.TotalCost);
        }
        
    }


    
   
    protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        
    }
    protected void RemoveCartItem(object sender, EventArgs e)
    { 
       int ID = (int)GridView1.SelectedDataKey.Value;
       //Response.Write(MaginKey.Alert(ID.ToString()));
       tt = (ShoppingCart)Session["MyShoppingCart"];
       Response.Write(MaginKey.Alert(tt.Orders.Count.ToString())); 
       tt.DeleteItem(ID);
        ShowCartInfo();

    }



    protected void Button1_Click(object sender, EventArgs e)
    {
        //tt = (ShoppingCart)Session["MyShoppingCart"];
        
        //for(int i=1;i<tt.Orders.Count;i++)
        //{
            
        //    Response.Write(tt.Orders.GetEnumerator());
        //}
        
    }
}

要求在Button1_Click把数据写入,有点急,谢谢大家了

16 个解决方案

#1


是要保存信息吗?
网上很多的保存存方式

#2


Stat_Class  s=null;
for(int i=0;i<tt.orders.count;i++)
{
    s=(stat_class)tt.Orders[i];
    insert into(****)values(s.ItemID,s.ShangpinName,.....)  ;
}

#3


在购物车上增加一个保存数据的方法即可

为降低对象耦合度,可以定义单独的项目或类,用来实现把数据保存到数据库库

至于购物车中的数据如何传递,有很多种方法,直接把购物车传过去,也可以把购物车数据生成SQL语句传过去,这要
看你的设计了.

#4


唉!楼二的方啊好像不行
s=(stat_class)tt.Orders[i]; 无法读出里面的数据

#5


使用序列化保存对象实例,然后再写进数据库(YY)

#6


购物车的信息可以先保存在Cookie里,等下订单后再把相关信息写入数据库

#7


我已经保存在SESSION中了,就是不知怎么把它一条一条读出来后写入数据库

#8


没有人会么?

#9


第一.Hashtable Cart_Orders = new Hashtable()这里应该用ilist吧?
也就是调用的时候用ilist<Stat_Class>
返回的时候自然可以绑定了
 拿这句来说  this.GridView1.DataSource = tt.Orders; 
tt.Orders是什么,是hashtable的value...

#10


我也想知道,petshop4中是用profile.save() 调用SetPropertyValues方法来保存数据的,就是不知道,profile是怎样调用SetPropertyValues的。

#11


如果微软可以用hashtable<Stat_Class>这样的话,估计就可以用hashtable这么传了吧
因为hashtable的每个项都是一个object,而这个object又没有用Stat_Class定义
所以绑的时候才会出错
这是我的理解

#12


二楼的改下
object o = tt.Orders[i]; 
s=((stat_class)o;

#13


引用 10 楼 tyzs2001 的回复:
我也想知道,petshop4中是用profile.save() 调用SetPropertyValues方法来保存数据的,就是不知道,profile是怎样调用SetPropertyValues的。


profile的使用与你在web.config中的profile配置节的配置有关,你声明的参数越多,profile中的属性越多,并一一对应,
在配置好profile后,因修改了web.config使网站应用程序重新启动,asp.net会重新编译,根据配置节中的信息会动态生成profile的派生类来包装你所配置的信息,而profile的数据都会被aspnet_regsql工具所生成的数据库中的表aspnet_profile所记录,这就是我理解的一套profile的流程,当然,这个表的主键是用户的全球唯一标识,并且是和member表联查获得的.profile就说这么多,说错了请见量!

#14


想学一下

#15


k46577471 : 你说的有道理,我也是这样理解的,但是就是不知道petshop4中是怎样将购物车保存到数据库中的.我在断点调试时跟踪到profile.save()时就跟踪不下去了.

#16


我也想知道,我靠,就是没人懂,那些高手都哪去了,

#1


是要保存信息吗?
网上很多的保存存方式

#2


Stat_Class  s=null;
for(int i=0;i<tt.orders.count;i++)
{
    s=(stat_class)tt.Orders[i];
    insert into(****)values(s.ItemID,s.ShangpinName,.....)  ;
}

#3


在购物车上增加一个保存数据的方法即可

为降低对象耦合度,可以定义单独的项目或类,用来实现把数据保存到数据库库

至于购物车中的数据如何传递,有很多种方法,直接把购物车传过去,也可以把购物车数据生成SQL语句传过去,这要
看你的设计了.

#4


唉!楼二的方啊好像不行
s=(stat_class)tt.Orders[i]; 无法读出里面的数据

#5


使用序列化保存对象实例,然后再写进数据库(YY)

#6


购物车的信息可以先保存在Cookie里,等下订单后再把相关信息写入数据库

#7


我已经保存在SESSION中了,就是不知怎么把它一条一条读出来后写入数据库

#8


没有人会么?

#9


第一.Hashtable Cart_Orders = new Hashtable()这里应该用ilist吧?
也就是调用的时候用ilist<Stat_Class>
返回的时候自然可以绑定了
 拿这句来说  this.GridView1.DataSource = tt.Orders; 
tt.Orders是什么,是hashtable的value...

#10


我也想知道,petshop4中是用profile.save() 调用SetPropertyValues方法来保存数据的,就是不知道,profile是怎样调用SetPropertyValues的。

#11


如果微软可以用hashtable<Stat_Class>这样的话,估计就可以用hashtable这么传了吧
因为hashtable的每个项都是一个object,而这个object又没有用Stat_Class定义
所以绑的时候才会出错
这是我的理解

#12


二楼的改下
object o = tt.Orders[i]; 
s=((stat_class)o;

#13


引用 10 楼 tyzs2001 的回复:
我也想知道,petshop4中是用profile.save() 调用SetPropertyValues方法来保存数据的,就是不知道,profile是怎样调用SetPropertyValues的。


profile的使用与你在web.config中的profile配置节的配置有关,你声明的参数越多,profile中的属性越多,并一一对应,
在配置好profile后,因修改了web.config使网站应用程序重新启动,asp.net会重新编译,根据配置节中的信息会动态生成profile的派生类来包装你所配置的信息,而profile的数据都会被aspnet_regsql工具所生成的数据库中的表aspnet_profile所记录,这就是我理解的一套profile的流程,当然,这个表的主键是用户的全球唯一标识,并且是和member表联查获得的.profile就说这么多,说错了请见量!

#14


想学一下

#15


k46577471 : 你说的有道理,我也是这样理解的,但是就是不知道petshop4中是怎样将购物车保存到数据库中的.我在断点调试时跟踪到profile.save()时就跟踪不下去了.

#16


我也想知道,我靠,就是没人懂,那些高手都哪去了,