SqlDataAdapter 影响了 1 条预期记录中的 0 条,即使数据集已更改

Posted

技术标签:

【中文标题】SqlDataAdapter 影响了 1 条预期记录中的 0 条,即使数据集已更改【英文标题】:SqlDataAdapter Affected 0 out of 1 expected records, even though the dataset was changed 【发布时间】:2018-07-05 20:16:30 【问题描述】:

尽管这方面有很多不同的话题,但我真的找不到适合我的情况的答案。

我正在使用 Xamarin android 和更新 SQL Server 数据库的 Web 服务。当我调用一次 web 方法时,它工作正常。但是当数据更新并再次发送时,我收到此错误:

并发冲突:UpdateCommand 影响了预期的 1 条记录中的 0 条 我尝试找到任何接受数据集更改的东西,也尝试了 .getChanges 并尝试清除和重新填充数据集,但我一直收到该错误

这是我调用网络方法的代码

async void startUploadCounter()

    SQLWebService.SQLWebService DataService2 = new SQLWebService.SQLWebService();

    await Task.Delay(10000);
    Toast.MakeText(this, "Updating", ToastLength.Short).Show();
    DataService2.updateRooms(rooms,employeeID);
    isEdited = false;

这里是web方法的代码

[WebMethod]
public void updateRooms(DataSet rooms, int employeeID)

    using (SqlConnection connection = new SqlConnection(cs))
    
        connection.Open();

        SqlDataAdapter dataAdapter = new SqlDataAdapter($"Select * from Room Where AssignedEMP = employeeID", connection);
        SqlCommandBuilder commandBuilder = new SqlCommandBuilder(dataAdapter);
        dataAdapter.Update(rooms);

        // rooms.Clear();
        // rooms.GetChanges();
    

如果我的表现很奇怪,那是我对 Web 服务的东西不太熟悉

编辑:我可以确认数据已正确发送到 web 服务,但是 SQL 数据适配器由于某种原因无法更改数据

编辑 2:我检查了 Web 服务,即使它出错,它仍然有正确的数据,但它就是不想工作。

【问题讨论】:

我认为问题可能是由于传递给构造函数的选择,dataAdapter 已被使用。您传入的房间数据是否已经将 AssignedEMP 设置为employeeID。如果是这样,那么您只需要进行更新。 @CurtisShipley,AssignedEMP 确实在程序启动之前已经有一个值,那么我将如何去设置更新命令?从我之前的想法来看,当您在构造函数中设置 select 命令时,它会检查两个数据集并检查每一行以查看有什么不同。另外,我要感谢您在另一个问题上的帮助,它仍然存在,所以我有点盲目地工作并试图解决这个问题,但我很确定这是我遇到的错误。 我终于可以打印错误了(在事件查看器中,但它有效,所以我没有抱怨)我可以确认它仍然是同一个问题 【参考方案1】:

所以在回到这个问题之后。我做了两件事。但是,我相信这是可行的

选项 1

如果您将命令生成器设置为覆盖更改,它允许我的工作

SqlCommandBuilder.ConflictOption = ConflictOption.OverwriteChanges

选项 2

但是,我也通过这样做处理了命令生成器和数据适配器

    dataAdapter.Dispose();
    commandBuilder.Dispose();
    rooms.AcceptChanges();

【讨论】:

以上是关于SqlDataAdapter 影响了 1 条预期记录中的 0 条,即使数据集已更改的主要内容,如果未能解决你的问题,请参考以下文章

错误:并发冲突:UpdateCommand 影响了预期的 1 条记录中的 0 条

C# System.Data.SQLite:并发冲突:UpdateCommand 影响了预期的 1 条记录中的 0 条

从 C# 应用程序更新 MS Access 数据库中新添加的记录时,“并发冲突:UpdateCommand 影响了预期的 1 条记录中的 0 条”

SqlDataAdapter.Fill 即使是一条记录也太慢了

记一次性能问题诊断-log4j对应用性能的影响

使用 SqlDataAdapter 填充 DataTable 时,CommandTimeout 不起作用