You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UWP如何实现仅显示一次MessageDialog?附数据库插入代码咨询

嘿,我来帮你搞定这两个问题——UWP里让MessageDialog只弹一次,还有你那串数据库插入代码的优化~

一、实现UWP仅显示一次MessageDialog

要让对话框只弹一次,最靠谱的方式是用UWP自带的本地设置来记录“是否已经显示过”的状态,步骤很简单:

  • 弹出对话框前先检查本地标记:
var localSettings = ApplicationData.Current.LocalSettings;
// 先判断有没有存过标记,默认是没显示过
bool hasShownDialog = localSettings.Values.ContainsKey("HasShownUpdateDialog") && (bool)localSettings.Values["HasShownUpdateDialog"];

if (!hasShownDialog)
{
    var dialog = new MessageDialog("这里放你的提示内容");
    await dialog.ShowAsync();
    // 标记为已显示,下次就不会再弹了
    localSettings.Values["HasShownUpdateDialog"] = true;
}
  • 额外小技巧:如果想在APP更新后重新弹这个对话框,可以把标记和APP版本绑定,比如用"HasShownDialog_V" + Package.Current.Id.Version.Major作为键,这样每次大版本更新,标记就会重置~
二、优化你的数据库插入代码

先说说你原来代码的两个小问题:一是直接拼接字符串会有SQL注入风险,二是NOT EXISTS的写法不对,会导致判断逻辑出错。优化后的代码如下:

if (jumlahiddb < jumlahbuku)
{
    DownloadBukuKomik(url);
    
    // 用参数化SQL,既安全又避免语法错误
    string komikUpdate = @"INSERT INTO books (id, title, folder_id, identifier) 
                          SELECT @id, @title, @folderId, @identifier
                          WHERE NOT EXISTS (
                              SELECT 1 FROM books 
                              WHERE id = @id AND title = @title AND folder_id = @folderId AND identifier = @identifier
                          )";

    Debug.WriteLine(komikUpdate);
    
    var komikQuery = objConnUpdate.Prepare(komikUpdate);
    // 绑定参数,代替字符串拼接
    komikQuery.Bind("@id", intID);
    komikQuery.Bind("@title", $"{namaFile}.pdf");
    komikQuery.Bind("@folderId", 67);
    komikQuery.Bind("@identifier", $"{namaFile}.pdf");
    
    // 执行插入操作
    komikQuery.Step();
}

给你解释下优化点:

  • 参数化查询:用@参数名代替直接拼变量,彻底避免SQL注入,还能解决文件名里有单引号这类特殊字符导致的SQL语法错误。
  • 正确的NOT EXISTS写法:子查询里用SELECT 1就够了,我们只需要判断有没有匹配的记录,原来写的select id AND title AND ...是错误的,会把字段值当作布尔值计算,根本起不到判断记录存在的作用。

内容的提问来源于stack exchange,提问作者Rose

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:40:16