如何使用c#中的不同值更新数据库中的多行?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用c#中的不同值更新数据库中的多行?相关的知识,希望对你有一定的参考价值。
我有个问题。我有一个名为“RollNoSlip”的表,其中有一个名为“AttendanceStatus”的列。我有名为“getAttendance”的列表变量,类型为“List <string>”。我想将每个值分配给“RollNoSLip”的每个记录。出勤栏可以包含“P”或“A”。问题是它在所有记录中仅显示P.为什么?
var getAttendance = (from r in db.RollNoSlips
from a in db.Attendances
where r.RollNo == a.RollNo
select a.AttendanceStatus).ToList();
using (var con = new SqlConnection(ConfigurationManager.ConnectionStrings["IQTSConnectionString"].ConnectionString))
{
con.Open();
using (var cmd = new SqlCommand("update RollNoSlip set AttendanceStatus=@Attendance where RollNo between 10001 and 10045", con))
{
cmd.Parameters.Add("@Attendance", SqlDbType.VarChar);
for (int i = 0; i < getAttendance.Count; i++)
{
cmd.Parameters["@Attendance"].Value = getAttendance[i];
cmd.ExecuteNonQuery();
}
}
}
答案
你得到所有'P'
s的原因是getAttendance
列表中的最后一个记录恰好有一个'P'
。如果它是一个'A'
,你的所有记录将被设置为'A'
。
您需要单独处理项目,将其ID传递给SQL:
// Include RollNo in getAttendance list
var getAttendance = (from r in db.RollNoSlips
from a in db.Attendances
where r.RollNo == a.RollNo
select new {a.AttendanceStatus, a.RollNo}
).ToList();
...
// Updates getAttendance rows in the database, one row at a time
using (var cmd = new SqlCommand("update RollNoSlip set AttendanceStatus=@Attendance where RollNo=@RollNo", con))
{
cmd.Parameters.Add("@Attendance", SqlDbType.VarChar);
cmd.Parameters.Add("@Attendance", SqlDbType.Int);
for (int i = 0; i < getAttendance.Count; i++)
{
cmd.Parameters["@Attendance"].Value = getAttendance[i].AttendanceStatus;
cmd.Parameters["@RollNo"].Value = getAttendance[i].RollNo;
cmd.ExecuteNonQuery();
}
}
另一答案
假设您使用SQL Server,然后使用下面的查询来更新AttendanceStatus。
UPDATE RollNoSlip SET
AttendanceStatus = A.AttendanceStatus
FROM RollNoSlip R
INNER JOIN Attendance A ON R.RollNo = A.RollNo
WHERE R.RollNo BETWEEN 10001 AND 10045
以上是关于如何使用c#中的不同值更新数据库中的多行?的主要内容,如果未能解决你的问题,请参考以下文章