65.9K
CodeProject 正在变化。 阅读更多。
Home

简单 ASP.NET 购物车

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.21/5 (24投票s)

2003年3月11日

CPOL

1分钟阅读

viewsIcon

435264

downloadIcon

21877

一个易于实现的购物车,适用于任何数据库。

Sample Image - shopcart.gif

引言

如果你查看我的代码,你会发现它文档不完善,但我会尝试通过这篇文章来改进它。我在这里演示的购物车对象是我为电子商务网页库的一部分而编写的。

购物车

让我们直接进入这个对象。下一节将创建我们的对象。我们从网页传递连接字符串,使其通用。

using System;
using System.Data;
using System.Data.OleDb;

namespace Coder2k
{
    public class Cart
    {
        private string strConnection;
        
        public Cart(string conn)
        {
            strConnection = conn;
        }

以下是我们的网页将获取其购物车的地方。我们稍后会演示这一点。我们使用存储过程,以便可以使用具有 OLE 接口和支持存储过程的任何数据库。

        public OleDbDataReader GetCart(string CartID)
        {
            OleDbConnection conCart = new OleDbConnection(strConnection);
            OleDbCommand comCart = new OleDbCommand("qryGetCart", conCart);
            
            comCart.CommandType = CommandType.StoredProcedure;
            
            OleDbParameter parmCartID = new 
              OleDbParameter("@CartID", OleDbType.VarChar, 50);
            parmCartID.Value = CartID;
            comCart.Parameters.Add(parmCartID);
            
            conCart.Open();
            
            OleDbDataReader result = 
              comCart.ExecuteReader(CommandBehavior.CloseConnection);
            
            return result;
        }

现在,让我们看看其余部分,它与此非常相似。由于使用了存储过程,我们在这个对象中不需要了解任何关于数据库的信息,这使得编码更容易。

        public void AddItem(string CartID, int ProdID, int Quantity)
        {
            OleDbConnection conItem = new OleDbConnection(strConnection);
            OleDbCommand comItem = new OleDbCommand("qryAddItem", conItem);
            
            comItem.CommandType = CommandType.StoredProcedure;
            
            OleDbParameter parmCartID = new 
              OleDbParameter("@CartID", OleDbType.VarChar, 50);
            parmCartID.Value = CartID;
            comItem.Parameters.Add(parmCartID);
            
            OleDbParameter parmProdID = new 
              OleDbParameter("@ProdID", OleDbType.Integer, 4);
            parmProdID.Value = ProdID;
            comItem.Parameters.Add(parmProdID);
            
            OleDbParameter parmQuant = new 
              OleDbParameter("@Quant", OleDbType.Integer, 4);
            parmQuant.Value = Quantity;
            comItem.Parameters.Add(parmQuant);
            
            conItem.Open();
            comItem.ExecuteNonQuery();
            conItem.Close();
        }
        
        public string GetCartID()
        {
            System.Web.HttpContext context = 
                  System.Web.HttpContext.Current;
            
            if (context.Request.Cookies["West_CartID"] != null)
            {
                return context.Request.Cookies["West_CartID"].Value;
            }
            else
            {
                Guid tempGuid = Guid.NewGuid();
                
                context.Response.Cookies["West_CartID"].Value 
                                             = tempGuid.ToString();
                
                return tempGuid.ToString();
            }
        }
    }
}

现在,getCartID 函数有点奇怪。它检查当前用户是否拥有购物车。如果有,它返回该 ID,否则,它创建一个新的购物车。

网页

如果你熟悉 ASP Web 控件,我认为这些网页可以自说自话。在本文的后续版本中,我将更详细地解释这些文件,并可能为整个程序添加更多功能。

© . All rights reserved.