C# 是否加载SQL查询的结果集并将其保存到ASP.NET中的会话?

C# 是否加载SQL查询的结果集并将其保存到ASP.NET中的会话?,c#,asp.net,sql,session,shopping-cart,C#,Asp.net,Sql,Session,Shopping Cart,我希望能够使用查询 select * from cart 并将其保存在列表中。在我的CartItem类中,我定义了id、name、quantity和totalprice的属性 现在我想把它保存在一个会话中,这样当用户登录购物车时。他以前的购物车项目应该通过sql查询加载并保存到会话中 public class ShoppingCart { #region ListCart public static String cid; public List<Car

我希望能够使用查询

    select * from cart
并将其保存在列表中。在我的CartItem类中,我定义了id、name、quantity和totalprice的属性

现在我想把它保存在一个会话中,这样当用户登录购物车时。他以前的购物车项目应该通过sql查询加载并保存到会话中

public class ShoppingCart
{
    #region ListCart

    public static String cid;
    public List<CartItem> Items { get; private set; }
    public static SqlConnection conn = new SqlConnection(connStr.connString);
    #endregion

    #region CartSession


    public static readonly ShoppingCart Instance;

    static ShoppingCart()
    {

        if (HttpContext.Current.Session["ASPNETShoppingCart"] == null)
        {

            Instance = new ShoppingCart();
            Instance.Items = new List<CartItem>();

            HttpContext.Current.Session["ASPNETShoppingCart"] = Instance;

        }
        else
        {
            Instance = (ShoppingCart)HttpContext.Current.Session["ASPNETShoppingCart"];
        }
    }
现在我有以下代码,但它没有从数据库加载客户的前一个购物车

我犯的错误是每次客户单击查看购物车时都从sql数据库加载购物车。这是错误的。我应该把它放在一个会议上

public class ShoppingCart
{
    #region ListCart

    public static String cid;
    public List<CartItem> Items { get; private set; }
    public static SqlConnection conn = new SqlConnection(connStr.connString);
    #endregion

    #region CartSession


    public static readonly ShoppingCart Instance;

    static ShoppingCart()
    {

        if (HttpContext.Current.Session["ASPNETShoppingCart"] == null)
        {

            Instance = new ShoppingCart();
            Instance.Items = new List<CartItem>();

            HttpContext.Current.Session["ASPNETShoppingCart"] = Instance;

        }
        else
        {
            Instance = (ShoppingCart)HttpContext.Current.Session["ASPNETShoppingCart"];
        }
    }
公共类购物车
{
#区域列表车
公共静态字符串cid;
公共列表项{get;private set;}
public static SqlConnection conn=新的SqlConnection(connStr.connString);
#端区
#区域会议
公共静态只读ShoppingCart实例;
静态ShoppingCart()
{
if(HttpContext.Current.Session[“ASPNETShoppingCart”]==null)
{
实例=新ShoppingCart();
Instance.Items=newlist();
HttpContext.Current.Session[“ASPNETShoppingCart”]=实例;
}
其他的
{
Instance=(ShoppingCart)HttpContext.Current.Session[“ASPNETShoppingCart”];
}
}
这是我的购物车类,它保存添加到购物车中的产品

public class CartItem : IEquatable<CartItem>
{
    #region Attributes

    public int Quantity { get; set; }
    public static SqlConnection conn = new SqlConnection(connStr.connString);

    private int _productId;
    public int ProductId
    {
        get { return _productId; }
        set
        {
            _product = null;
            _productId = value;
        }
    }


    private Product _product = null;
    public Product Prod
    {
        get
        {
            if (_product == null)
            {
                _product = new Product(ProductId);
            }
            return _product;
        }
    }
    public string Name
    {
        get { return Prod.ProductName; }
    }

    public string Description
    {
        get { return Prod.Description; }
    }

    public float UnitPrice
    {
        get { return Prod.UnitPrice; }
    }

    public float TotalPrice
    {
        get { return UnitPrice * Quantity; }
    }

    #endregion

    #region Methods
    public CartItem(int productId)
    {
        this.ProductId = productId;
    }


    public bool Equals(CartItem item)
    {
        return item.ProductId == this.ProductId;
    }

    #endregion


}
公共类CartItem:IEquatable
{
#区域属性
公共整数数量{get;set;}
public static SqlConnection conn=新的SqlConnection(connStr.connString);
私有int_productId;
公共int ProductId
{
获取{return\u productId;}
设置
{
_product=null;
_productId=值;
}
}
私有产品_Product=null;
公共产品产品
{
得到
{
如果(_product==null)
{
_产品=新产品(产品ID);
}
退货产品;
}
}
公共字符串名
{
获取{return Prod.ProductName;}
}
公共字符串描述
{
获取{返回产品描述;}
}
公开浮动单价
{
获取{return Prod.UnitPrice;}
}
公开浮动总价格
{
获取{返回单价*数量;}
}
#端区
#区域方法
公共CartItem(int productId)
{
this.ProductId=ProductId;
}
公共布尔等于(CartItem)
{
return item.ProductId==this.ProductId;
}
#端区
}

我想我能猜出问题出在哪里,不同的用户使用同一个购物车

public static readonly ShoppingCart Instance; 
此行声明了
ShoppingCart
类的静态实例。在ASP.NET中,这意味着它的数据在应用程序之间共享。由于应用程序在服务器上运行,并且一次为多个用户提供服务,因此该实例在所有用户之间共享。如果有两个用户,则一个项目共享一次添加后,它将添加到每个人的购物车中,并且每次新用户出现时,购物车都将重置


因此,除非你有真正的应用程序范围的静态数据,否则不要在asp.net应用程序中使用静态数据。

有很多代码,而不是一个特定的问题。我已经根据我猜你的问题给出了答案。如果我错了,请澄清。保留代码..这是为了详细信息L..主要问题是加载SQL查询的结果集并将其保存到Session@user478636:既然我显然想帮忙,但又不明白问题所在,那就帮我澄清一下好吗?你的问题到底在哪里?加载部分、保存部分、中间的某个部分?好吧,现在我设法将购物车加载到会话中..现在在会话中同步购物车和数据库中的购物车…你能给我推荐一个在asp.net中处理用户会话的好方法吗…通常我应该怎么做…因为客人可以向购物车添加物品…登录的用户也可以。