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

如何在PowerShell环境中使用嵌入式C#代码查询SQLite数据库?

在PowerShell中嵌入C#代码执行SQLite查询

步骤1:准备SQLite .NET驱动

首先需要获取SQLite的.NET驱动,推荐使用Microsoft.Data.Sqlite(官方维护,兼容.NET Core/.NET 5+,PowerShell 7+支持良好);如果是PowerShell 5.1,可选用System.Data.SQLite。

  • 对于PowerShell 7+,通过NuGet安装驱动:
Install-Package Microsoft.Data.Sqlite -Scope CurrentUser

安装完成后,找到对应程序集路径(通常在$HOME\.nuget\packages\microsoft.data.sqlite\[版本号]\lib\net6.0\Microsoft.Data.Sqlite.dll),后续加载时使用。

步骤2:嵌入C#代码封装查询逻辑

使用Add-Type命令将C#代码嵌入PowerShell,封装SQLite查询的核心逻辑,完整示例如下:

# 加载SQLite程序集(替换为你的实际路径)
$sqliteDllPath = "$HOME\.nuget\packages\microsoft.data.sqlite\7.0.11\lib\net6.0\Microsoft.Data.Sqlite.dll"
Add-Type -Path $sqliteDllPath

# 嵌入C#代码,实现查询方法
Add-Type @"
using Microsoft.Data.Sqlite;
using System.Collections.Generic;

public class SqliteQueryHelper
{
    public static List<Dictionary<string, object>> ExecuteQuery(string connectionString, string query, params SqliteParameter[] parameters)
    {
        var results = new List<Dictionary<string, object>>();
        
        using (var connection = new SqliteConnection(connectionString))
        {
            connection.Open();
            using (var command = new SqliteCommand(query, connection))
            {
                if (parameters != null)
                {
                    command.Parameters.AddRange(parameters);
                }
                
                using (var reader = command.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        var row = new Dictionary<string, object>();
                        for (int i = 0; i < reader.FieldCount; i++)
                        {
                            row.Add(reader.GetName(i), reader.IsDBNull(i) ? null : reader.GetValue(i));
                        }
                        results.Add(row);
                    }
                }
            }
        }
        
        return results;
    }
}
"@

# 实际调用示例:查询SQLite数据库
$dbPath = "C:\path\to\your\database.db"
$connectionString = $"Data Source={$dbPath};"

# 参数化查询(避免SQL注入)
$query = "SELECT Id, Name, Age FROM Users WHERE Age > @MinAge"
$parameters = @(
    New-Object Microsoft.Data.Sqlite.SqliteParameter("@MinAge", 18)
)

# 执行查询并输出结果
$results = [SqliteQueryHelper]::ExecuteQuery($connectionString, $query, $parameters)
foreach ($row in $results) {
    Write-Host "ID: $($row['Id']), Name: $($row['Name']), Age: $($row['Age'])"
}

关键细节说明

  • 参数化查询:必须用SqliteParameter传递参数,禁止直接拼接SQL字符串,防止SQL注入。
  • 资源自动释放:C#代码中用using语句处理数据库连接、命令和阅读器,避免内存泄漏。
  • 结果格式:返回List<Dictionary<string, object>>结构,每个字典对应一行数据,键为列名,值为字段值,方便PowerShell遍历处理。

PowerShell 5.1适配调整

如果使用PowerShell 5.1,建议切换到System.Data.SQLite驱动,代码调整如下:

# 加载System.Data.SQLite程序集(可通过Chocolatey安装:choco install sqlite.shell)
Add-Type -Path "C:\Program Files\SQLite\System.Data.SQLite.dll"

# 替换嵌入的C#代码命名空间
Add-Type @"
using System.Data.SQLite;
using System.Collections.Generic;

public class SqliteQueryHelper
{
    public static List<Dictionary<string, object>> ExecuteQuery(string connectionString, string query, params SQLiteParameter[] parameters)
    {
        var results = new List<Dictionary<string, object>>();
        
        using (var connection = new SQLiteConnection(connectionString))
        {
            connection.Open();
            using (var command = new SQLiteCommand(query, connection))
            {
                if (parameters != null)
                {
                    command.Parameters.AddRange(parameters);
                }
                
                using (var reader = command.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        var row = new Dictionary<string, object>();
                        for (int i = 0; i < reader.FieldCount; i++)
                        {
                            row.Add(reader.GetName(i), reader.IsDBNull(i) ? null : reader.GetValue(i));
                        }
                        results.Add(row);
                    }
                }
            }
        }
        
        return results;
    }
}
"@

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 04:32:24