SQLite .NET,ExecuteScalarAsync,如何知道何时没有结果?

2024-03-11

SQL 语句正在检索行的 ID。但可能不存在这样的行。当我在 GUI 工具中执行特定 SQL 语句时,它返回“0 行在 0 毫秒内返回:...”。

但是,当我执行相同的 SQL 语句时ExecuteScalarAsync<int>,它返回0,并且没有发生异常或null。我怎么知道是否没有这样的行?理论上可以存在ID为0的行。

附: 这是我使用 Nuget 添加的 SQLite-net (https://github.com/praeclarum/sqlite-net https://github.com/praeclarum/sqlite-net)。它的版本是1.4.118。 SQL 语句非常简单。我更改了字段名称,但基本上是这样的:

using SQLite;

public Task<int> GetLastID()
{
    return RealDatabase.ExecuteScalarAsync<int>
        ("SELECT max(ID) FROM DATA)");
}

我用扩展方法解决了这个问题:

using System;
using System.Threading.Tasks;
using SQLite;

namespace MyApp.DB
{
    public class Row<T>
    {
        public T scalar_value { get; set; }
    }

    public class Maybe<T>
    {
        public readonly T Value;
        public Maybe(T v) { Value = v;  }
    }

    public static class SQLiteExtensions
    {
        public async static Task<Maybe<T>> QueryScalarAsync<T>(this SQLite.SQLiteAsyncConnection conn, string sql)
        {
            var res = await conn.QueryAsync<Row<T>>(sql);
            if (res.Count == 0)
            {
                return null;
            }
            else
            {
                return new Maybe<T>(res[0].scalar_value);
            }
        }
    }
}

返回值为null表示未找到任何行,并且任何返回值本身都包含在Maybe类以便可以区分空值:

var version = await conn_.QueryScalarAsync<int>("SELECT version AS scalar_value FROM schema_version");
if (version == null)
{
    Debug.WriteLine("no rows found");
}
else
{
    Debug.WriteLine(string.Format("value = {0}", version.Value));
}

唯一的问题是您的查询必须包含名为scalar_value.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQLite .NET,ExecuteScalarAsync,如何知道何时没有结果? 的相关文章

随机推荐

  • statsmodel - 类型错误:fit() 得到了意外的关键字参数“disp”

    我正在使用 statsmodels 的 arima 模型进行一些预测 这曾经很好地与 model result model fit disp 1 但似乎 disp 似乎不再起作用 https github com biolab orange
  • 如何不断检查文件直至其存在,然后提供指向该文件的链接

    我正在使用 PHP 系统调用来调用 Java 程序 Java 程序需要一段时间才能运行 但最终会生成一个文件名已知的 PDF 文件 我需要继续检查该文件 直到它存在 然后提供指向它的链接 我假设将涉及 while 循环 但我不希望它占用太多
  • GetScriptReferences 没有被调用

    我编写了一个自定义控件 其中包含以下内容 assembly System Web UI WebResource InSysControls AssignmentLists AssignmentLists js text javascript
  • 为什么 OpenSSH RequestTTY 会导致 stderr 重定向到 stdout?

    当使用 T 和 t 运行相同的 ssh 命令时 任何 stderr 输出分别到达 stderr 和 stdout 没有分配 pty ssh T user host echo gt 2 foo 1 gt tmp out 2 gt tmp er
  • 救援_来自NoMethodError

    解决这个问题时遇到问题 试图做一个 rescue from NoMethodError with gt try some options 但它不起作用 编辑 为了测试我正在做一个简单的重定向 def try some options red
  • php 会话随机丢失,无法理解为什么

    我付钱给一个程序员制作一个购物篮脚本来与 Spreadshirt API 一起使用 一切都运转良好 只是篮子不断地变空 我认为会话在某个时刻丢失了 因此脚本创建了另一个会话BasketId 我试图找出发生这种情况是否有特定原因 但没有成功
  • 如何在notepad++中使用正则表达式修剪xml标签中的空格?

    我正在尝试修剪一个空间XML标签 这是我所拥有的示例
  • 移动网络性能:将数据从网络服务器传输到移动电话的最有效的数据类型是什么?

    Q 在 Web 服务器 其他 和手机 即 ios android 其他 之间传输数据时 哪种数据类型最有效 最快 JSON XML HTML Q 应该使用什么样的服务器端技术 php mysql Q 应该使用什么样的API 安息吗 RPC
  • 调用 around 方面时出现 AOP 异常

    我正在尝试在所有服务方法上运行一个方面 但这对于具有原始返回类型的方法似乎失败 我收到此错误 org springframework aop AopIn VocationException Null return value from su
  • 为什么 IE10 不显示嵌套的 CSS3 3D 转换元素?

    我在这里有点迷失 我目前正在测试 Windows 8 Release Preview 附带的 IE10 10 0 9200 16384 我遇到了非常困难的时间 困扰我的事情之一是 IE 似乎无法正确处理嵌套 3D 变换 请看这个小提琴 ht
  • Sitecore 插入规则以确保最多 (1) 个特定类型的子级

    sitecore 中有没有办法确保某种类型的项目只能有某种类型项目的 1 个子项 我正在阅读规则引擎食谱 但我没有得到太多细节 我工作过的一个网站要求特定项目类型下不能存在超过 6 个子项目 我们考虑过使用插入选项规则 但决定放弃这个想法
  • Spring可以在抽象类中自动装配吗?

    Spring 无法自动装配我的对象 是否可以在抽象类中自动装配对象 假设所有模式都在 application context xml 中提供 问题 基类和扩展类 如果有 Service Component 上应该使用什么注释 Example
  • Azure 存储 403 禁止异常是 32 位问题吗?

    我们花了相当多的时间来定位出现以下异常的原因 The remote server returned an error 403 Forbidden 堆栈跟踪 at Microsoft WindowsAzure Storage Core Exe
  • PC 客户端上的 C# Crystal Report 总是要求登录提示 SQL Server

    创建setup我的程序 程序运行良好 可以增删改查数据库 当我打开报告时 总是出现登录提示的问题 但在数据库字段中为空禁用 在服务器计算机上 报告没有问题 在我建立连接的代码中 像这样 cnn ServerName 179 15 30 74
  • map() get() 混淆

    我刚刚浏览了 jQuery API 我有点困惑map get 方法 我知道我错了但是map 方法看起来很像 each 陈述 除了文档说它返回一个新的 jQuery 对象 我一直在 jsfiddle 上玩这个 试图弄清楚它 但我还不太明白 h
  • 日志文件监视器

    是否可以在另一个应用程序更新文件时打开文本文件并读取内容 这样就不会导致锁定冲突 我需要监视一个应用程序的日志文件 每次发生事件时该日志文件都会由另一个应用程序更新 在尝试读取文件之前 我会检查该文件是否正在使用 但这似乎并不在所有情况下都
  • 在 Qt Creator 中使用 Qt 标准图标

    我想使用 Qt Standard 图标 as here http standards freedesktop org icon naming spec icon naming spec latest html 我发现了很多例子如何以编程方式
  • Thymeleaf 不解释 sec 标签

    我遇到了一个问题 thymleaf 无法识别我的 Spring Boot 项目中的 sec 标签 例如下面的 sec authentication 未被解释 并按浏览器中的 html 中的形式显示 div Roles span span d
  • 从 Elasticsearch 文档中删除字段

    我需要删除索引到 Elasticsearch 的所有文档中的一个字段 我该怎么做 backtrack 所说的是 true 但是在 Elasticsearch 中有一种非常方便的方法可以做到这一点 Elasticsearch 会抽象出删除的内
  • SQLite .NET,ExecuteScalarAsync,如何知道何时没有结果?

    SQL 语句正在检索行的 ID 但可能不存在这样的行 当我在 GUI 工具中执行特定 SQL 语句时 它返回 0 行在 0 毫秒内返回 但是 当我执行相同的 SQL 语句时ExecuteScalarAsync