我想在我的数据库中添加一个新行.这是我的代码:
ds1是我的数据集,da1是我的数据适配器
dRow = ds1.Tables["localitati"].NewRow(); dRow[1] = aux1.Replace(" ", "").Replace("-", "").ToLower(); dRow[2] = aux2.ToLower().Replace(" ", ""); dRow[3] = aux1; dRow[4] = e.X; dRow[5] = e.Y; 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
."
与数据库的连接有效(我从数据库中检索了信息)
有任何想法吗 ?
要添加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
到数据库中.它需要:
InsertCommand(如果DataRows
已添加)
DeleteCommand(如果DataRows
已删除)
UpdateCommand(如果DataRows
被修改)
你可以设置一个断点来检查你adapter.InsertCommand
的adapter.Update()
行之前是否设置了它.
要设置这些参数,只需创建一个SqlCommandBuilder
与火GetInsertCommand()
,GetDeleteCommand()
等等.
这应该解决错误:
"当使用已修改的行传递DataRow集合时,更新需要有效的更新命令." 要么
"当使用新行传递DataRow集合时,更新需要有效的插入命令."等.
有关详细信息,请参阅MSDN链接
Ques解决了;你的问题:
dRow = ds1.Tables["localitati"].NewRow(); dRow[1] = aux1.Replace(" ", "").Replace("-", "").ToLower(); dRow[2] = aux2.ToLower().Replace(" ", ""); dRow[3] = aux1; dRow[4] = e.X; dRow[5] = e.Y; ds1.Tables["localitati"].Rows.Add(dRow); da1.Update(ds1, "localitati");
回答:
你必须使用commandBuilder.那是在您使用dataAdapter更新之前(或在创建dataRow之前)添加代码:
SqlCommandBuilder cmdb = new SqlCommandBuilder(da);
您必须为DataAdapter定义InsertCommand
http://www.codeproject.com/KB/database/relationaladonet.aspx