Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.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# 更新SQLite数据库&;在同一异步功能中使用更新的记录_C#_Sqlite_Windows Runtime_Winrt Xaml_Async Await - Fatal编程技术网

C# 更新SQLite数据库&;在同一异步功能中使用更新的记录

C# 更新SQLite数据库&;在同一异步功能中使用更新的记录,c#,sqlite,windows-runtime,winrt-xaml,async-await,C#,Sqlite,Windows Runtime,Winrt Xaml,Async Await,我正在使用此方法更新特定表的元组 public async void Update(MyTable entity) { SQLiteAsyncConnection conn = new SQLiteAsyncConnection(path); await conn.UpdateAsync(entity); } 参考: 现在主要是更新MyTable中的记录&我将MyTable记录绑定到绑定到视图的ViewModel private async void button_Tappe

我正在使用此方法更新特定表的元组

public async void Update(MyTable entity)
{
    SQLiteAsyncConnection conn = new SQLiteAsyncConnection(path);
    await conn.UpdateAsync(entity); 
}
参考:

现在主要是更新MyTable中的记录&我将MyTable记录绑定到绑定到视图的ViewModel

private async void button_Tapped(object sender, TappedRoutedEventArgs e)
{
    MyTableRepository.Update(scheduleRecord);

    this.DefaultViewModel["MyViewModel"] =await ViewModelClass.GetMyTableDataAsync();
}
这里的问题是视图没有得到更新。在我停止应用程序并检查数据库值后,数据库似乎已更新&之后,如果我再次运行应用程序,将显示所需的更新视图

我不熟悉异步等待。所以我觉得ViewModel可能在更新之前就已经更新了

MyTableRepository.Update(scheduleRecord);
被执行。
我实际上不知道确切的原因。请提供帮助。

您的
更新
方法正在以“火灾后忘记”的方式运行。当您等待GetMyTableDataAsync()时,数据库中的数据可能尚未更新

您需要做的是将
Update
async void
更改为
async Task

public async Task UpdateAsync(MyTable entity)
并在上面等待:

await UpdateAsync(entity);
您的完整代码如下所示:

private async void button_Tapped(object sender, TappedRoutedEventArgs e)
{
    await MyTableRepository.UpdateAsync(scheduleRecord);

    this.DefaultViewModel["MyViewModel"] = await ViewModelClass.GetMyTableDataAsync();
}
作为旁注:

  • 如果除了在
    UpdateAsync
    内等待之外,您没有做任何其他事情,那么只需返回正在执行的
    任务
    wait
    即可,它位于调用链的更高位置:

    public Task UpdateAsync(MyTable entity)
    {
       SQLiteAsyncConnection conn = new SQLiteAsyncConnection(path);
       return conn.UpdateAsync(entity); 
    }
    
  • 确保正确处理了数据库连接


  • 我将UpdateAsync任务更改为async任务。还是一样的问题。。。我认为您的第二点是正确的,即DB连接未正确处理。。。目前正在弄清楚这一点……除非
    SQLiteAsyncConnection.UpdateAsync
    是同步伪装成异步的,否则在您的代码中,无法保证数据在读取之前会被保存。@PauloMorgado请解释。如果他使用
    等待更新同步
    ,为什么在阅读之前不保证更新?您的问题代码是原始代码,而不是答案代码。OP似乎怀疑你指出了一个真正的问题,我很抱歉。问题在于我如何更新MyViewModel。实际上,我应该从MyViewModel中删除scheduleRecord&然后我应该调用它。DefaultViewModel[“MyViewModel”]=await ViewModelClass.GetMyTableDataAsync();总之,我的逻辑错了。无论如何,这是一个百万thanx 4 ur帮助。我只想与大家分享一下这个模块
    (09)Local data
    详细讨论了SQLite,供找到本文并希望了解更多信息的开发人员使用。Thanx@JerryNixon MSFT。在提供的链接上有很多东西需要学习。顺便说一下,我很抱歉。问题在于我如何更新MyViewModel。实际上,我应该从MyViewModel中删除scheduleRecord&然后我应该调用它。DefaultViewModel[“MyViewModel”]=await ViewModelClass.GetMyTableDataAsync();总之,我的逻辑错了。无论如何,一百万比四是你的帮助