Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当用新行传递DataRow集合时,更新需要有效的InsertCommand_C#_Database - Fatal编程技术网

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

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

我正在尝试向数据库中添加新行。这是我的密码:

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,“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的字符串初始化—所有这些都不应该存在于项目中。