我会尽力描述我的问题,
我正在做一个学校项目,我们在那里创建了一个网站和一个数据库。您可以登录此网站,然后在某些数据库表中搜索,添加和删除不同的产品。它是什么等等并不重要。
主要部分是:例如,您有一个名为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#中编码答案 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);
}