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

时间:2010-11-05 11:25:22

标签: c# database

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

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。”

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

有什么想法吗?

3 个答案:

答案 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中的更改保存到数据库中。它需要:

  1. InsertCommand (如果已添加DataRows
  2. 删除命令(如果DataRows已删除)
  3. UpdateCommand (如果修改了DataRows
  4. 您可以设置一个断点来检查adapter.InsertCommand行之前的adapter.Update()是否已设置。

    要设置它们,只需创建SqlCommandBuilder并点燃GetInsertCommand()GetDeleteCommand()等。

    这应解决错误:

    1. “在传递带有已修改行的DataRow集合时,更新需要有效的更新命令。”或
    2. “在使用新行传递DataRow集合时,更新需要有效的插入命令。”等等。
    3. 有关更多信息,请参阅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

定义InsertCommand

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