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

时间:2018-07-05 20:16:31

标签: c# sql-server web-services xamarin.android

即使有很多不同的主题,我也无法真正找到适合我的情况的答案。

我正在使用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;
}

这是网络方法的代码

[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服务,即使它出错了,它仍然具有正确的数据,但只是不想工作。

1 个答案:

答案 0 :(得分:0)

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

选项1

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

SqlCommandBuilder.ConflictOption = ConflictOption.OverwriteChanges

选项2

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

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