我正在尝试向我的数据库添加一个新行。这是我的代码:
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
。”
与数据库的连接有效(我从数据库中检索了信息)
有什么想法吗?
答案 0 :(得分:9)
添加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
中的更改保存到数据库中。它需要:
DataRows
)DataRows
已删除)DataRows
)您可以设置一个断点来检查adapter.InsertCommand
行之前的adapter.Update()
是否已设置。
要设置它们,只需创建SqlCommandBuilder
并点燃GetInsertCommand()
,GetDeleteCommand()
等。
这应解决错误:
有关更多信息,请参阅MSDN Link
答案 1 :(得分:7)
出问题;你的问题:
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);
答案 2 :(得分:6)
您必须为DataAdapter
定义InsertCommandhttp://www.codeproject.com/KB/database/relationaladonet.aspx