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

.NET 7(C#)升级后无法创建MDB(Access数据库)问题求助

.NET 7跨平台创建MDB文件问题解决方案

问题根源

你原来的代码依赖ADOX的Catalog和ADODB组件,这些都是Windows特有的COM对象,.NET 7跨平台环境(Linux/macOS)不支持COM互操作,所以没法通过这种方式创建MDB。另外EF Core本身没有对MDB(Jet/ACE引擎)的官方支持,自然满足不了需求。

可行解决方案

1. 仅Windows平台运行.NET 7程序创建MDB

如果你的程序可以接受只在Windows环境运行,用System.Data.OleDb包配合Access驱动来实现:

  • 先安装NuGet包:System.Data.OleDb
  • 确保系统安装了Microsoft Access Database Engine(ACE驱动),64位程序对应64位驱动,32位对应32位,否则会提示找不到提供者
  • 示例代码:
using System.Data.OleDb;

// 目标MDB文件路径
var targetMdb = @"D:\output\data.mdb";
// Jet驱动连接字符串(针对MDB格式)
var connStr = $"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={targetMdb};";

// 创建空MDB文件
using (var conn = new OleDbConnection(connStr))
{
    conn.Open(); // Jet驱动会在打开连接时自动创建不存在的MDB文件
}

// 后续创建表、插入数据示例
using (var conn = new OleDbConnection(connStr))
{
    conn.Open();
    var createTableSql = "CREATE TABLE RawData (Id INT PRIMARY KEY, DataBlob MEMO)";
    using (var cmd = new OleDbCommand(createTableSql, conn))
    {
        cmd.ExecuteNonQuery();
    }
}

2. 跨平台兼容:改用SQLite格式

如果必须支持跨平台,建议放弃MDB,换成SQLite——它是跨平台原生支持的单文件数据库,和MDB的使用场景一致,.NET 7有官方包支持:

  • 安装NuGet包:Microsoft.Data.Sqlite
  • 示例代码:
using Microsoft.Data.Sqlite;

// 目标SQLite文件路径
var targetDb = @"/home/user/output/data.db"; // Linux/macOS路径格式,Windows用类似D:\...
using (var conn = new SqliteConnection($"Data Source={targetDb}"))
{
    conn.Open();
    // 创建表
    var createTableSql = "CREATE TABLE RawData (Id INTEGER PRIMARY KEY, DataBlob TEXT)";
    using (var cmd = new SqliteCommand(createTableSql, conn))
    {
        cmd.ExecuteNonQuery();
    }
    // 插入数据等操作和OleDb类似
}

3. 跨平台下生成空MDB(仅文件创建,写入需Windows)

如果业务必须输出MDB文件,且要跨平台部署,可以提前在Windows下生成一个空MDB模板文件,嵌入到程序资源中,运行时将模板复制到目标路径,之后在Windows环境下再写入数据(跨平台下目前没有可靠的MDB写入驱动)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 19:47:24