当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《当使用新行传递DataRow集合时,更新需要有效的InsertCommand》经验,为你挑选了3个好方法。

我想在我的数据库中添加一个新行.这是我的代码:

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."

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

有任何想法吗 ?



1> Ali Saeed..:

要添加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.InsertCommandadapter.Update()行之前是否设置了它.

要设置这些参数,只需创建一个SqlCommandBuilder与火GetInsertCommand(),GetDeleteCommand()等等.

这应该解决错误:

    "当使用已修改的行传递DataRow集合时,更新需要有效的更新命令." 要么

    "当使用新行传递DataRow集合时,更新需要有效的插入命令."等.

有关详细信息,请参阅MSDN链接



2> 小智..:

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);



3> AlexanderMP..:

您必须为DataAdapter定义InsertCommand

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

推荐阅读
云聪京初瑞子_617
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有