我正在研究ASP.NET MVC项目。我需要帮助更新记录到我的表。
基本上我的应用程序中有一个下拉列表,当用户从下拉列表中选择列表时,将提供下载选项,用户可以下载 csv 。
这里面的CSV我有很多行记录。但是所有这些行都具有相同的 categoryid 。比方说,我的csv中有三行,然后所有这三行都有相同的categoryid。
现在我遇到的问题是当用户上传文件时,我需要将其保存在数据库中。所以这里发生的事情是,如果csv文件有三行,那么最后一行结果将保存在所有三行中。
这是我的代码:
DataTable upCSV = (DataTable)TempData["UploadedCSV"];
{
if (isHeaderAccepted)
{
Data_printEntities ordertable = new Data_printEntities();
foreach (DataRow dr in upCSV.Rows)
{
ObjectParameter getemail = new ObjectParameter("email", dr["email"].ToString());
ObjectParameter getpassword = neObjectParameter("password",dr["password"].ToString());
ObjectParameter getMobile = new ObjectParameter("Mobile", dr["Mobile"].ToString());
ObjectParameter getPhone = new ObjectParameter("Phone", dr["Phone"].ToString());
var spresults = ordertable.usp_UpdateUserData(45, 368, getemail.Value.ToString(), getpassword.Value.ToString(), getMobile.Value.ToString(), getPhone.Value.ToString())
ordertable.SaveChanges();
}
}
}
此处45是 id ,每次使用都有,368是下拉会话 ID。这是我遇到问题的地方。对于所有三行,45和368是常见的。
这里如果我在csv中有三行,它会循环三次,但在更新时会更新所有三行的最后一行结果。
那么如何在循环之后让我的代码保存?我的意思是当它遍历第一行并且当它执行存储过程时,该结果应该保存在我的表中,然后它应该继续循环到第二行。
我怎样才能解决这个问题?
更新:usp_UpdateUserData是用于更新记录的存储过程。这是我的sp:
ALTER PROCEDURE [dbo].[usp_UpdateUserData]
@idAccount int = 0,
@idcategory int = 0,
@email nvarchar(100) =0,
@password nvarchar(50) = 0,
@Mobile nvarchar(50) = 0,
@Phone nvarchar(50)
AS
BEGIN
Begin
Update tblCustomer
Set
email = @email, password = @password, mobileNo = @Mobile, phoneNo = @Phone
where idAccount = 45 and idCategoryL = 368
END
End
GO
答案 0 :(得分:0)
您需要将主键公开给前端,以便您可以识别要更新的记录。我怀疑你有某种独特的约束(例如 email
),它是真实的(即 DB中的实际约束)或想象(即你知道什么使记录独特,但实际上并没有在DB中编写这些规则。这应该是你的主要关键。我知道将自动增量列用作"主键"是很受欢迎的。但真正做的就是模糊数据的本质。
UPDATE tblCustomer
SET email = @email,
password = @password,
mobileNo = @Mobile,
phoneNo = @Phone
WHERE custid = @custId
AND idAccount = 45
AND idCategoryL = 368
如果由于某种原因你不能将custid
暴露给前端,那么下一个最佳解决方案是在更新时使用你的唯一约束(如果你还想更新你需要提供旧的电子邮件)作为新的):
UPDATE tblCustomer
SET email = @new_email,
password = @password,
mobileNo = @Mobile,
phoneNo = @Phone
WHERE email = @old_email
AND idAccount = 45 and idCategoryL = 368
我还建议制作idAccount
和idCategory
参数。