有关在数据集中更新/插入数据表的问题

时间:2010-07-27 19:06:21

标签: c#

我需要打开与SQL数据库的连接并读取表的子集,如果存在则更新记录,如果未找到则更新。进行了更新的更新

    SqlConnection conn = new SqlConnection(ConnectionStrings.PgenIntranet.SqlClientConnectionString);
                        SqlDataAdapter indicators = new SqlDataAdapter();
                        string sql = "SELECT * FROM BusinessApplications.tbl_WPI_Site_Indicators where Year = '" + year +
            "' and  Month = '" + month + "' and PlantId = " + site.ID;

  indicators.SelectCommand = new SqlCommand(sql, conn);
  SqlCommandBuilder cb = new SqlCommandBuilder(indicators);
  indicators.UpdateCommand = cb.GetUpdateCommand();
  DataSet ds = new DataSet();
  indicators.Fill(ds, "indtable");
  DataTable indtable = ds.Tables["indtable"];
    // this logic not working
       if (indtable.Rows.Count == 0) { indtable.NewRow(); }
        DataRow dr = indtable.NewRow();

    /// not sure how to make this work
      indtable[1]["PlantId"] = site.ID;
      dr["PlantId"] = site.ID;

2 个答案:

答案 0 :(得分:0)

我使用DataSets / DataTables / DataRows已经有一段时间了,但我认为你很接近。如果我没记错的话,你需要像在这里一样创建一个新的行对象:

DataRow dr = indtable.NewRow();

然后用您的数据填充该行,也类似于您的操作方式:

dr["PlantId"] = site.ID;

然后最后将该行添加到DataTable中的rows集合中。 (您需要仔细检查DataTable实例是否实际上是DataSet上Tables集合中的DataTable,我不记得具体细节。直接引用Tables集合可能更安全,而不是将它放在自己的集合中对象。)

请注意,将行添加回数据库。它只是将它添加到DataTable实例。您需要相应地更新回数据库。你在这里的这个设置有点......凌乱......所以我没有快速回答。由于您只是使用普通的旧ADO,我猜您需要创建一个更新命令并填充它并相应地对连接运行它。

在这样做时,请注意修复SQL注入漏洞,例如你所拥有的漏洞:)

答案 1 :(得分:0)

不要忘记将新行添加到表中,然后调用update ...

indtable.Rows.Add(dr);
ds.Update();