如何使用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#中的不同值更新数据库中的多行?的主要内容,如果未能解决你的问题,请参考以下文章

如何比较同一个表中的多行并用不同的值标记它们?

如何使用jQuery更新数据表中的所有多行?

如何在单个查询中使用联接和聚合函数更新表中的多行

如何更新 BigQuery 中的多行

使用 System.Transaction 如何更新实体框架中的多行

如何优化C ++代码的以下片段 - 卷中的零交叉