我需要打开与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;
答案 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();