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

如何在PowerShell中正确使用Dapper查询SQLite数据库?

在PowerShell中正确使用Dapper查询SQLite数据库

问题根源

  1. Dapper的Query是扩展方法:它并非SQLiteConnection类的原生实例方法,而是Dapper.SqlMapper类提供的静态扩展方法,因此用Get-Member查看$con不会显示Query方法。
  2. PowerShell泛型方法调用语法差异:PowerShell不支持C#风格的Method[Type]()泛型调用方式,需使用PowerShell特有的语法指定泛型参数。

正确实现代码

# 加载必要的程序集
Add-Type -Path "C:\test\database\System.Data.SQLite.dll"
Add-Type -Path "C:\test\database\Dapper.dll"

# 创建并打开数据库连接
$con = [System.Data.SQLite.SQLiteConnection]::new("Data Source=C:\test\database\database.db")
$con.Open()

try {
    $sql = "select * from keypad where id = 1"
    # 直接调用Dapper.SqlMapper的静态Query方法,指定泛型参数为dynamic
    $results = [Dapper.SqlMapper]::Query([dynamic], $con, $sql)
    # 获取第一条结果
    $res = $results | Select-Object -First 1
    # 输出结果
    $res
}
finally {
    # 确保连接关闭与资源释放
    $con.Close()
    $con.Dispose()
}

关键说明

  • 优先调用静态方法:PowerShell对.NET扩展方法的支持不够直观,直接调用[Dapper.SqlMapper]::Query静态方法更可靠。第一个参数为泛型类型(此处用[dynamic]),第二个参数是数据库连接实例,后续可传入SQL语句、参数等。
  • 泛型参数指定规则:PowerShell中调用泛型静态方法时,需将泛型类型作为第一个参数传入,这是PowerShell的语法要求。
  • 资源安全处理:用try/finally块确保数据库连接被正确关闭和释放,避免资源泄漏。

替代方案:使用强类型映射(可选)

若不需要dynamic,可定义对应数据表的类来映射结果:

# 定义与keypad表结构匹配的类
class Keypad {
    [int]$id
    # 根据你的表结构添加其他属性,例如[string]$keyName
}

# 调用时指定泛型为Keypad类型
$results = [Dapper.SqlMapper]::Query([Keypad], $con, $sql)
$res = $results | Select-Object -First 1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 10:50:55