当使用新行传递DataRow集合时,更新需要有效的InsertCommand

我正在尝试向我的数据库添加一个新行。 这是我的代码:

ds1是我的数据集,da1是我的数据适配器

dRow = ds1.Tables["localitati"].NewRow(); dRow[1] = aux1.Replace(" ", "").Replace("-", "").ToLower(); dRow[2] = aux2.ToLower().Replace(" ", ""); dRow[3] = aux1; dRow[4] = eX; dRow[5] = eY; ds1.Tables["localitati"].Rows.Add(dRow); da1.Update(ds1, "localitati"); 

da1.update(ds1,"localitati"); 程序停止并给我错误:“ Update requires a valid InsertCommand when passed DataRow collection with new rows 。”

与数据库的连接有效(我从数据库中检索了信息)

有任何想法吗 ?

您必须为DataAdapter定义InsertCommand

http://www.codeproject.com/KB/database/relationaladonet.aspx

要添加DataRows:

 SqlCommandBuilder builder = new SqlCommandBuilder(adapter); // add rows to dataset builder.GetInsertCommand(); //Without the SqlCommandBuilder this line would fail adapter.Update(dataSet); 

说明:

adapter.Update(dataset)将尝试将dataset的更改保存到数据库中。 它需要:

  1. InsertCommand (如果添加了DataRows
  2. DeleteCommand (如果删除了DataRows
  3. UpdateCommand (如果修改了DataRows

您可以在adapter.Update()行之前设置断点来检查adapter.InsertCommand以查看它是否已设置。

要设置它们,只需创建一个SqlCommandBuilderGetInsertCommand()GetDeleteCommand()等。

这应该解决错误:

  1. “当传递带有修改行的DataRow集合时,更新需要有效的更新命令。” 要么
  2. “当使用新行传递DataRow集合时,更新需要有效的插入命令。”等。

有关详细信息,请参阅MSDN链接

Ques解决了;你的问题:

 dRow = ds1.Tables["localitati"].NewRow(); dRow[1] = aux1.Replace(" ", "").Replace("-", "").ToLower(); dRow[2] = aux2.ToLower().Replace(" ", ""); dRow[3] = aux1; dRow[4] = eX; dRow[5] = eY; ds1.Tables["localitati"].Rows.Add(dRow); da1.Update(ds1, "localitati"); 

回答:

你必须使用commandBuilder。 那是在您使用dataAdapter更新之前(或在创建dataRow之前)添加代码:

 SqlCommandBuilder cmdb = new SqlCommandBuilder(da);