2014-01-11 31 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

谢谢。复制粘贴 –