C# 当用新行传递DataRow集合时,更新需要有效的InsertCommand
我正在尝试向数据库中添加新行。这是我的密码: ds1是我的数据集,da1是我的数据适配器C# 当用新行传递DataRow集合时,更新需要有效的InsertCommand,c#,database,C#,Database,我正在尝试向数据库中添加新行。这是我的密码: ds1是我的数据集,da1是我的数据适配器 dRow = ds1.Tables["localitati"].NewRow(); dRow[1] = aux1.Replace(" ", "").Replace("-", "").ToLower(); dRow[2] = aux2.ToLower().Replace(" ", ""); dRow[3] = aux1; dRow
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,“localati”)代码>程序停止并给出错误信息:“更新需要一个有效的InsertCommand,当用新行传递数据行集合时
”
与数据库的连接正常(我已从数据库中检索到信息)
有什么想法吗?您必须为数据适配器定义一个InsertCommand
问题已解决;你的问题:
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);
要添加数据行,请执行以下操作:
SqlCommandBuilder builder = new SqlCommandBuilder(adapter);
// add rows to dataset
builder.GetInsertCommand();
//Without the SqlCommandBuilder this line would fail
adapter.Update(dataSet);
说明:
adapter.Update(数据集)
将尝试将数据集中的更改保存到数据库中。它将需要:
插入命令(如果添加了数据行
)
DeleteCommand(如果删除了DataRows
)
UpdateCommand(如果DataRows
被修改)
您可以在adapter.Update()
行之前放置一个断点来检查您的适配器.InsertCommand
,以查看它是否已设置
要设置它们,只需创建一个SqlCommandBuilder
并激发GetInsertCommand()
,GetDeleteCommand()
,等等
这将解决以下错误:
“当传递带有修改行的DataRow集合时,更新需要有效的Update命令。”或
“当用新行传递DataRow集合时,更新需要有效的Insert命令。”,等等
有关更多信息,请参阅我还发现,对于其他感兴趣的人来说,使用DataAdapter是没有意义的。这是一个关于什么是不应该做的纯粹的例子。未解析的查询、无用的DataAdapter、未关闭的连接、带有null的字符串初始化—所有这些都不应该存在于项目中。