在c#中更新数据表

本文关键字:数据表 更新 | 更新日期: 2023-09-27 18:00:04

我有一个存储学生教室信息的数据表。我的桌子是这样的:

Student ID     Grade     Absence Count
00001           85             0
00002           95             7
00002           70             5
00003           35             1

不要问我为什么有两个身份证是一样的。。。事情就是这样。现在我想更新缺席计数为7的00002 id的缺席计数。同时,我想删除缺席计数不为7的00002条目(在本例中为计数为5的条目)。现在我知道如何用select语句查询表,并用count 7更新00002 id的student。我如何同时删除00002学生的另一个条目?这是我的代码:

foreach(oldCount in absenceCount)
{
    DataRow[] dr = dt.Select("Student ID='" + ID + "' AND Absence Count='" + oldCount);
    dr[0]["Absence Count"] = newCount;
}

那么,在这里,我如何告诉程序,如果有另一个学生id的缺勤计数不在缺勤计数列表中,请将其从表中删除?

感谢

在c#中更新数据表

您可以编写

dr[1].Delete();

您可以进行相同的选择,但在oldcount上使用相反的条件,就像一样

foreach(oldCount in absenceCount)
{
  DataRow[] dr = dt.Select("Student ID='" + ID + "' AND Absence Count != '" + oldCount);
  dr[0].Delete();
}

这将为您获取该学生id,但缺勤计数不等于旧计数。

很明显,你仍然有一个问题,正如Blindy所建议的那样,你有两排学生id相同,缺勤次数相同。

我想您可以选择具有相同ID的所有行。更新您想要的行,并删除其余行。类似的东西

DataRow[] dr = dt.Select("Student ID='" + ID + "'");

然后更新与缺勤计数匹配的一个,删除其余的。

关于评论:这是肯尼的回复,但这就是我的意思

foreach(DataRow row in dr)
{
  if (dr["Absence Count"] == absencCount)
      dr["Absence Count"] = newCount;
  else
      dr.Delete()
}
foreach(oldCount in absenceCount)
{
    DataRow[] dr = dt.Select("Student ID='" + ID);
    bool updated = false;
    foreach(DataRow row in dr)
    {
      if (!updated && dr["Absence Count"] == absenceCount)
      {
          dr["Absence Count"] = newCount;
          updated = true;
      }
      else
      {
          dr.Delete()
      }
    }
}