⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 shoppingcartdb.cs

📁 手机网店源码
💻 CS
字号:
using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;

namespace MobileOnlineShop.DAL
{
	/// <summary>
	///在数据访问层涉及到的对表ShoppingCart的所有操作都在此类中定义
	///
	///注意ShoppingCart表中的CartID与客户的对应关系:
	///
	///1)当客户是未注册用户时,它是系统为客户(客户端)自动生成的临时16位Guid号,
	///  它被保存在客户端的Cookie中,便于将客户的订购信息添加到ShoppingCart表中
	///  下次客户可再次查看,一旦该客户在注册为我们的用户后,其对应的CartID就更改为他的CustomerID
	///  
	///2)当客户是注册用户且已登陆时,它就是客户的CustomerID(CustomerID被保存在客户端的Cookie中)
	///
	///3)当客户是已注册用户但未登陆时,它也是系统为客户(客户端)自动生成的临时16位Guid号,
	///  一旦客户登陆时,其对应的CartID就更改为他的CustomerID,但要注意的是此时可能会在ShoppingCart表
	///  中出现CartID和ProductID都相同的不同订购记录,此时一定要更新ShoppingCart表中此客户的所有订购记录,
	///  合并ProductID相同的记录
	/// </summary>
	public class ShoppingCartDB
	{
		public ShoppingCartDB()
		{
			
		}
		/// <summary>
		/// GetItems()从ShoppingCart表中获取指定CartID的购物车的所有订购商品记录信息
		/// </summary>
		/// <param name="cartID">cartID为待查客户对应的cartID</param>
		/// <returns></returns>
		public SqlDataReader GetItems(string cartID)
		{
			//创建Connection和Command对象的实例
			SqlConnection conn=new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]);
			SqlCommand comm=new SqlCommand("CMRC_ShoppingCartList",conn);

			//指出comm对数据库执行的是一个存储过程
			comm.CommandType=CommandType.StoredProcedure;

			//给定存储过程所要求的传入参数
			SqlParameter parameterCartID=new SqlParameter("@CartID",SqlDbType.NVarChar,50);
			parameterCartID.Value=cartID;
			comm.Parameters.Add(parameterCartID);

			//打开数据库联接,以DateReader的形式返回结果
			conn.Open();
			SqlDataReader result=comm.ExecuteReader(CommandBehavior.CloseConnection);
			return result;
		}
		/// <summary>
		/// AddItem()向ShoppingCart表中添加指定购物车号,订购产品号和订购数量的订购记录
		/// </summary>
		/// <param name="cartID">cartID为与客户对应的购物车标识</param>
		/// <param name="productID">productID为订购商品的产品号</param>
		/// <param name="quantity">quantity为订购商品数量</param>
		public void AddItem(string cartID,int productID,int quantity)
		{
			//创建Connection和Command对象的实例
			SqlConnection conn=new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]);
			SqlCommand comm=new SqlCommand("CMRC_ShoppingCartAddItem",conn);
			
			//指出comm对数据库执行的是一个存储过程
			comm.CommandType=CommandType.StoredProcedure;

			//给出该存储过程所要求的传入参数
			SqlParameter parameterCartID=new SqlParameter("@CartID",SqlDbType.NVarChar,50);
			parameterCartID.Value=cartID;
			comm.Parameters.Add(parameterCartID);
			
			SqlParameter parameterProductID=new SqlParameter("@ProductID",SqlDbType.Int,4);
			parameterProductID.Value=productID;
			comm.Parameters.Add(parameterProductID);

			SqlParameter parameterQuantity=new SqlParameter("@Quantity",SqlDbType.Int,4);
			parameterQuantity.Value=quantity;
			comm.Parameters.Add(parameterQuantity);

			//打开数据库连接,执行添加操作
			conn.Open();
			comm.ExecuteNonQuery();
			conn.Close();
		}
		/// <summary>
		/// UpdateItem()更新ShoppingCart表中指定CartID和ProductID的订购记录的商品数量
		/// </summary>
		/// <param name="cartID">cartID为指定的客户购物车标识</param>
		/// <param name="productID">productID为客户订购的商品标识</param>
		/// <param name="quantity">quantity为客户订购该商品的数量</param>
		public void UpdateItem(string cartID,int productID,int quantity)
		{
			//判断客户输入的商品数量若小于零,则抛出异常
			if(quantity <0)
				throw new Exception("商品数量必须是正整数");
			//创建Connection和Command对象的实例
			SqlConnection conn=new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]);
			SqlCommand comm=new SqlCommand("CMRC_ShoppingCartUpdate",conn);

			//指出comm对数据库执行的是一个存储过程
			comm.CommandType=CommandType.StoredProcedure;

			//给出该存储过程所要求的传入参数
			SqlParameter parameterCartID=new SqlParameter("@CartID",SqlDbType.NVarChar,50);
			parameterCartID.Value=cartID;
			comm.Parameters.Add(parameterCartID);
			
			SqlParameter parameterProductID=new SqlParameter("@ProductID",SqlDbType.Int,4);
			parameterProductID.Value=productID;
			comm.Parameters.Add(parameterProductID);

			SqlParameter parameterQuantity=new SqlParameter("@Quantity",SqlDbType.Int,4);
			parameterQuantity.Value=quantity;
			comm.Parameters.Add(parameterQuantity);

			//打开数据库连接,执行添加操作
			conn.Open();
			comm.ExecuteNonQuery();
			conn.Close();
		}
		/// <summary>
		/// RemoveItem()移除ShoppingCart表中指定客户购物车和订购商品的一条订购记录
		/// </summary>
		/// <param name="cartID">cartID为与客户对应的购物车标识</param>
		/// <param name="productID">productID为客户商品的标识</param>
		public void RemoveItem(string cartID,int productID)
		{
			//创建Connection和Command对象的实例
			SqlConnection conn=new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]);
			SqlCommand comm=new SqlCommand("CMRC_ShoppingCartRemoveItem",conn);

			//指出comm对数据库执行的是一个存储过程
			comm.CommandType=CommandType.StoredProcedure;

			//给出该存储过程所要求的传入参数
			SqlParameter parameterCartID=new SqlParameter("@CartID",SqlDbType.NVarChar,50);
			parameterCartID.Value=cartID;
			comm.Parameters.Add(parameterCartID);
			
			SqlParameter parameterProductID=new SqlParameter("@ProductID",SqlDbType.Int,4);
			parameterProductID.Value=productID;
			comm.Parameters.Add(parameterProductID);

			//打开数据库连接,执行添加操作
			conn.Open();
			comm.ExecuteNonQuery();
			conn.Close();
		}
		/// <summary>
		/// GetItemCount()获取指定客户购物车内所订购商品的种类数
		/// </summary>
		/// <param name="cartID">cartID为客户对应的购物车标识</param>
		/// <returns></returns>
		public int GetItemCount(string cartID)
		{
			//创建Connection和Command对象的实例
			SqlConnection conn=new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]);
			SqlCommand comm=new SqlCommand("CMRC_ShoppingCartItemCount",conn);

			//指出comm对数据库执行的是一个存储过程
			comm.CommandType=CommandType.StoredProcedure;

			//给出该存储过程所要求的传入参数
			SqlParameter parameterCartID=new SqlParameter("@CartID",SqlDbType.NVarChar,50);
			parameterCartID.Value=cartID;
			comm.Parameters.Add(parameterCartID);
			
			SqlParameter parameterItemCount=new SqlParameter("@ItemCount",SqlDbType.Int,4);
			parameterItemCount.Direction=ParameterDirection.Output;
			comm.Parameters.Add(parameterItemCount);

			//打开数据库连接,执行添加操作
			conn.Open();
			comm.ExecuteNonQuery();
			conn.Close();

			return ((int)parameterItemCount.Value);
		}
		/// <summary>
		/// 获取指定客户的订购商品总额
		/// </summary>
		/// <param name="cartID">cartID为客户对应的购物车标识</param>
		/// <returns></returns>
		public decimal GetTotal(string cartID)
		{
			//创建Connection和Command对象的实例
			SqlConnection conn=new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]);
			SqlCommand comm=new SqlCommand("CMRC_ShoppingCartTotal",conn);

			//指出comm对数据库执行的是一个存储过程
			comm.CommandType=CommandType.StoredProcedure;

			//给出该存储过程所要求的传入参数
			SqlParameter parameterCartID=new SqlParameter("@CartID",SqlDbType.NVarChar,50);
			parameterCartID.Value=cartID;
			comm.Parameters.Add(parameterCartID);
			
			SqlParameter parameterTotalCost=new SqlParameter("@TotalCost",SqlDbType.Money,8);
			parameterTotalCost.Direction=ParameterDirection.Output;
			comm.Parameters.Add(parameterTotalCost);

			//打开数据库连接,执行添加操作
			conn.Open();
			comm.ExecuteNonQuery();
			conn.Close();
			
			//如果该客户没有订购商品,则parameterTotalCost.Value为null值
			//此时就返回0值
			if(parameterTotalCost.Value.ToString()!="")
			{
				return ((decimal)parameterTotalCost.Value);
			}
			else
			{
				return 0;
			}

		}
		/// <summary>
		/// MigrateCart()将ShoppingCart表中临时CartID(为16位的Guid值)更改为能与客户对应的CartID(即CustomerID)
		/// </summary>
		/// <param name="originalCartID">originalCartID为临时CartID</param>
		/// <param name="newCartID">newCartID为能与客户对应的正式CartID</param>
		public void MigrateCart(string originalCartID,string newCartID)
		{
			//创建Connection和Command对象的实例
			SqlConnection conn=new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]);
			SqlCommand comm=new SqlCommand("CMRC_ShoppingCartMigrate",conn);

			//指出comm对数据库执行的是一个存储过程
			comm.CommandType=CommandType.StoredProcedure;

			//给出该存储过程所要求的传入参数
			SqlParameter parameterOriginalCartID=new SqlParameter("@OriginalCartID",SqlDbType.NVarChar,50);
			parameterOriginalCartID.Value=originalCartID;
			comm.Parameters.Add(parameterOriginalCartID);
			
			SqlParameter parameterNewCartID=new SqlParameter("@NewCartID",SqlDbType.NVarChar,50);
			parameterNewCartID.Value=newCartID;
			comm.Parameters.Add(parameterNewCartID);

			//打开数据库连接,执行添加操作
			conn.Open();
			comm.ExecuteNonQuery();
			conn.Close();
		}
		/// <summary>
		/// EmptyCart()清空指定客户的购物车
		/// </summary>
		/// <param name="cartID">cartID为客户对应的购物车标识</param>
		public void EmptyCart(string cartID)
		{
			//创建Connection和Command对象的实例
			SqlConnection conn=new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]);
			SqlCommand comm=new SqlCommand("CMRC_ShoppingCartEmpty",conn);

			//指出comm对数据库执行的是一个存储过程
			comm.CommandType=CommandType.StoredProcedure;

			//给出该存储过程所要求的传入参数
			SqlParameter parameterCartID=new SqlParameter("@CartID",SqlDbType.NVarChar,50);
			parameterCartID.Value=cartID;
			comm.Parameters.Add(parameterCartID);
			
			

			//打开数据库连接,执行添加操作
			conn.Open();
			comm.ExecuteNonQuery();
			conn.Close();
		}
		/// <summary>
		/// GetShoppingCartID()根据客户所处的状态来判断获取客户对应的购物车标识ID
		/// 此CartID可能是临时分配的Guid,也可以是注册客户的CustomerID
		/// </summary>
		public string GetShoppingCartID()
		{
			//获取ASP+请求的所有HTTP特定的信息
			System.Web.HttpContext context=System.Web.HttpContext.Current;

			//判断当前用户若是通过验证的就将他的CustomerID做为他永久的CastID
			if(context.User.Identity.Name !="")
			{
				return context.User.Identity.Name;
			}
			//获取名为"IMobile_CartID"的Cookies值并判断是否为空,不为空就返回其值
			if(context.Request.Cookies["IMobile_CartID"] !=null)
			{
				return context.Request.Cookies["IMobile_CartID"].Value;
			}
			else
			{
				//使用Cuid类生成一个随机的Guid值
				Guid tempCartID=Guid.NewGuid();

				//设置名为"IMobile_CartID"的Cookies值为随机产生的Guid值
				context.Response.Cookies["IMobile_CartID"].Value = tempCartID.ToString();
				//返回临时的CartID
				return tempCartID.ToString();
			}

				
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -