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