📄 shoppingcartdb.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 + -