2014-01-11 32 views
0

我會盡可能在我所能來形容我的問題的問題,會話[「東西」]給數據庫

我在做一個學校項目,我們在那裏建立了一個網站和數據庫。您可以登錄此網站,然後搜索,向某些數據庫表添加和刪除不同的產品。它是什麼等等並不重要。

主要部分是:例如,您有一個名爲實際庫存的數據庫表。還有一個包含產品的產品表。然後,您登錄到網站,搜索產品,然後將其添加到實際庫存表中,並將其數量添加到您的實際庫存表中。

這工作得很好,但我碰到一個小問題。讓我來解釋一下這個問題: 如果我第一次登錄到網站,搜索一個產品,然後將這個產品添加到我的實際庫存中,這將會被添加到數據庫中,完全沒有問題。但是現在,如果另一個用戶登錄到該網站(當im仍然登錄時)搜索同一個產品,然後將其中一個添加到他的實際庫存中,他將獲得其中的兩個數量(它需要一個我已經在我的名單上並添加了他正在添加的名單)如果他將他們從實際庫存中刪除,他們也將從我的實際庫存中刪除。

希望你們瞭解問題的描述。

這是多麼我已經做出登錄,這樣登錄的用戶將獲得一個會話ID匹配從數據庫中的用戶ID:

protected void btnlogin_Click(object sender, EventArgs e) 
{ 

    SSDataContext db = new SSDataContext(); 

    var myUser = db.Userdbs.SingleOrDefault(x => x.Email == TUname.Text && x.Password == TPas.Text); 

    if (myUser != null) 
    { 
     Session["userid"] = myUser.UserID.ToString(); 
     Response.Redirect("Default.aspx"); 

,這是工作的罰款,只有一個用戶登錄在

這是我給定的產品添加到數據庫表:

protected void btnAdd_Click(object sender, EventArgs e) 
{ 

    SSDataContext db = new SSDataContext(); 
    ActualStock myAdd = new ActualStock(); 

    if (!db.ActualStocks.Any(u => u.EAN == addSoeg.Text)) 
    { 
     myAdd.EAN = addSoeg.Text;   
     myAdd.UserID = Convert.ToInt32(Session["userid"]); 
     myAdd.Quantity = 0; 
     db.ActualStocks.InsertOnSubmit(myAdd); 
     db.SubmitChanges(); 

    } 
    myAdd = db.ActualStocks.Single(x => x.EAN == addSoeg.Text); 
    myAdd.UserID = Convert.ToInt32(Session["userid"]);  
    myAdd.Quantity = myAdd.Quantity + Convert.ToInt32(quantity.Text); 
    db.SubmitChanges(); 
    Response.Redirect(Request.RawUrl); 
} 

這也只有一個用戶的工作就好了,再登錄到該網站。

任何一個可以幫助我理解爲什麼會話ID的弄混了,產品得到補充,並從

希望刪除我已經解釋過我自己就夠了,這樣你能理解這是怎麼回事。

如果您需要更多其他信息,請告訴我。

我們使用MSSQL數據庫,並使用LINQ

回答

0

你應該通過用戶id篩選你的記錄在C#編碼:

var userId = Convert.ToInt32(Session["userid"]); 
myAdd = db.ActualStocks.Single(x => x.EAN == addSoeg.Text&&x.UserId == userId); 

更新: 你不從取得具體用戶的實際庫存D b。相反,你總是得到單一的實際股票。

要解決您的問題,您應該始終獲得當前用戶的實際庫存。所以你的代碼應該是:

protected void btnAdd_Click(object sender, EventArgs e) 
{ 

    SSDataContext db = new SSDataContext(); 
    ActualStock myAdd = new ActualStock(); 
    var userId = Convert.ToInt32(Session["userid"]); 

    if (!db.ActualStocks.Any(u => u.EAN == addSoeg.Text&&u.UserId == userId)) 
    { 
     myAdd.EAN = addSoeg.Text;   
     myAdd.UserID = userId; 
     myAdd.Quantity = 0; 
     db.ActualStocks.InsertOnSubmit(myAdd); 
     db.SubmitChanges(); 

    } 
    myAdd = db.ActualStocks.Single(x => x.EAN == addSoeg.Text&&x.UserId == userId); 
    myAdd.UserID = userId ;  
    myAdd.Quantity = myAdd.Quantity + Convert.ToInt32(quantity.Text); 
    db.SubmitChanges(); 
    Response.Redirect(Request.RawUrl); 
} 
+0

謝謝你的快速回復,請你向我解釋你爲什麼要這樣做,以及其他方法有什麼問題?由於即時通信在編碼和學習階段仍然非常新穎,我將從解釋中受益匪淺。 (對於英語,不是我的主要語言) –

+1

第一條if語句中的錯字。你用'u'作爲var,然後切換到'x'。 – paqogomez

+0

謝謝。複製粘貼 –