在c#中更新数据表

时间:2011-06-23 18:41:58

标签: c#

我有一个数据表存储有关学生教室的信息。我的表看起来像这样:

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

不要问我为什么有两个id是相同的...它的方式就是这样。现在我想更新缺席次数为7的00002 id的缺席次数。同时,我想要删除没有缺失次数为7的00002条目(在这种情况下是次数为5的那个)。现在我知道如何用select语句查询表,并用计数7更新00002 id学生。我怎样才能同时删除00002学生的其他条目?这是我的代码:

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

所以在这里我怎么能告诉程序如果在缺席计数列表中有另一个缺席计数不存在的学生ID,请从表中删除它?

由于

4 个答案:

答案 0 :(得分:1)

你可以写

dr[1].Delete();

答案 1 :(得分:0)

我想你可以选择具有相同ID的所有行。更新您想要的那个,并删除其余的行。像

这样的东西
DataRow[] dr = dt.Select("Student ID='" + ID + "'");

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

关于评论: 这取自Kenny的回复,但这就是我的意思

foreach(DataRow row in dr)
{
  if (dr["Absence Count"] == absencCount)
      dr["Absence Count"] = newCount;
  else
      dr.Delete()
}

答案 2 :(得分:0)

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()
      }
    }
}

答案 3 :(得分:0)

您可以执行相同的选择,但在oldcount上具有相反的条件,如此

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

这将获得该学生ID,但缺勤计数不等于旧计数。

正如Blindy建议的那样,你显然仍有一个问题,就是2行具有相同的学生ID和相同的缺席数。