2011-04-08 47 views
0

我希望能夠使用查詢加載SQL查詢的結果集並將其保存到ASP.NET中的Session中?

select * from cart 

,並保存在一個列表。在我的課CartItem,我已經定義

現在我想將它保存在一個會話ID,名稱,數量,和totalprice的屬性,所以,當在購物車中的用戶登錄。他以前的Cart項目應該通過sql查詢加載並保存到會話中。

現在我有以下代碼,但它不會從數據庫中加載客戶的上一個購物車。

的錯誤,我在做每一個顧客點擊查看車時間從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"]; 
     } 
    } 

這是我的購物車類,它持有產品添加到購物車。

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 


} 
+1

您在標題 – SWeko 2011-04-08 06:59:15

+0

它。我已經根據我猜你的問題發佈了一個答案。如果我錯了,請澄清。 – user478636 2011-04-08 07:07:28

+0

有大量的代碼,而不是一個具體的問題忘了問題... – SWeko 2011-04-08 07:15:37

回答

2

我想我能猜到是什麼問題,不同的用戶以某種方式使用相同的購物車...

public static readonly ShoppingCart Instance; 

這行聲明ShoppingCart類的靜態實例。在ASP.NET中意味着數據是在應用程序中共享的。由於應用程序正在服務器上運行,並且一次爲更多的用戶提供服務,因此該實例在整個,用戶之間共享。如果您有兩個用戶,一旦添加了一個項目,它就會被添加到每個人的購物車中,並且每當新用戶出現時,購物車都將被重置。

所以,除非你真的,真實地應用範圍的靜態數據,不使用在asp.net應用程序的靜態數據。

+0

你能建議我一個很好的處理用戶會話在asp.net ....一般我應該怎麼做......因爲客人可以將物品添加到購物車中......因此可以記錄用戶。 – user478636 2011-04-08 07:26:57

相關問題