会话[“某事”]在数据库中给出问题

时间:2014-01-11 17:54:35

标签: c# sql-server linq

我会尽力描述我的问题,

我正在做一个学校项目,我们在那里创建了一个网站和一个数据库。您可以登录此网站,然后在某些数据库表中搜索,添加和删除不同的产品。它是什么等等并不重要。

主要部分是:例如,您有一个名为Actual stock的数据库表。以及包含产品的产品表。然后,您登录到网站,搜索产品,然后将其添加到您的实际库存表中,以及您想要的数量。

这工作得很好,但我遇到了一个小问题。让我解释一下这个问题: 如果我首先登录该站点,搜索产品然后将该产品添加到我的实际库存中,这将被添加到数据库中,完全没有问题。但是现在,如果另一个用户登录到该站点,(当我仍然登录时)搜索相同的产品,然后将其中一个添加到他的实际库存中,他将获得两个数量,(它需要一个我已经在我的名单上并添加了他正在添加的那个)同样如果他将他们从他的实际股票中删除,他们也将从我的实际股票中删除。

希望你们理解问题的描述。

这是我登录的方式,因此登录用户将获得与数据库中的用户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

在C#中编码

1 个答案:

答案 0 :(得分:0)

您应该按userId过滤您的记录:

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

<强>更新 您没有从db获得具体用户的实际库存。相反,你总是得到单一的实际股票。

要解决您的问题,您应始终获得当前用户的实际库存。所以你的代码应该是:

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);
}