System.InvalidOperationException: 未在本地计算机上注册"Microsoft.ACE.OLEDB.

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了System.InvalidOperationException: 未在本地计算机上注册"Microsoft.ACE.OLEDB.相关的知识,希望对你有一定的参考价值。

我在之前安装office的时候就安装了access数据库,还用过一段时间。最近安装了一个软件,一打开就提示这个,我百度了,是要下载一个AccessDatabaseEngine,我也下载了,也安装了还是不行。看了下错误信息:
有关调用实时(JIT)调试而不是此对话框的详细信息,请参见此消息的结尾。
************** 异常文本 **************System.InvalidOperationException: 未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序。 在 System.Data.OleDb.OleDbServicesWrapper.GetDataSource(OleDbConnectionString constr, DataSourceWrapper& datasrcWrapper) 在 System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection) 在 System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject) 在 System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup) 在 System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) 在 System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)字数太多,我就不粘贴了,这是个什么原因呀?

参考技术A 去看看access链接字符串 试着将版本号降低一些 建议用access2003链接字符串
http://www.cnblogs.com/BoyXiao/archive/2009/11/19/1606449.html追问

我是用的一个软件出现这样的情况的,怎么查看或者更改数据库的连接方式呀?我用的offic2007,如果换成,如果要用access2003是不是意味着office的所有程序都要奖成2003呀?对了,我的电脑系统是win8的

System.InvalidOperationException:关系特定的方法只能在上下文使用关系数据库提供程序时使用

【中文标题】System.InvalidOperationException:关系特定的方法只能在上下文使用关系数据库提供程序时使用【英文标题】:System.InvalidOperationException: Relational-specific methods can only be used when the context is using a relational database provider 【发布时间】:2018-11-02 05:04:32 【问题描述】:

System.InvalidOperationException:

关系特定的方法只能在上下文使用关系数据库提供程序时使用。

InMemoryDatabase 用于测试用例时出现上述错误?

var msaContextOptions = new DbContextOptionsBuilder<MSA.DAL.MsaDbContext>()
           .UseInMemoryDatabase(databaseName: "Get results")
           .ConfigureWarnings(w => w.Ignore(InMemoryEventId.TransactionIgnoredWarning))
           .Options;

【问题讨论】:

github.com/aspnet/EntityFrameworkCore/issues/6080 InMemory 并非旨在成为关系数据库。就我而言,在使用 InMemory 对 WCF 服务进行单元测试时,我得到了完全相同的错误。出错的测试要求数据库名称“dbContext.Database.GetDbConnection().Database”。我过去曾使用此测试来检查连接是否处于活动状态且正常工作,但这无法通过 InMemory 测试来完成。 如果您使用的是 InMemory 数据库,则需要跳过正在运行的迁移。 【参考方案1】:

正如其他人所说,我发现跳过 DBMigration 是目前最好的选择。 当 Database ProviderName 不是 InMemory 时,我正在运行数据库迁移。

if (context.Database.ProviderName != "Microsoft.EntityFrameworkCore.InMemory")

    context.Database.Migrate();

【讨论】:

【参考方案2】:

与提供程序字符串比较是脆弱的 - 如果 Microsoft 在远离 Core 时更改为 Microsoft.EntityFramework 会怎样!

我会推荐使用

if (!context.Database.IsInMemory())

    context.Database.Migrate();

if (context.Database.IsRelational())

    context.Database.Migrate();

我们在不包含Microsoft.EntityFrameworkCore.InMemory 的单独 nuget 包中有与 EF 相关的代码,因此第一个选项对我们不起作用。

【讨论】:

【参考方案3】:

在我们的例子中,@hemant-sakta 的解决方案不起作用。错误的原因是我们在播种时(我们在迁移期间播种)在其中一个数据库表中设置了自动增量值

解决方案是在隔离模式下跳过设置自动增量值:

private static void SetAutoIncrementValue(MyContext context)

    if (HostingEnvironment.IsEnvironment("Isolated")) return;
    
    // auto increment code

【讨论】:

我猜是因为它与数据库的性质无关,关系与非关系。你的场景不相关。

以上是关于System.InvalidOperationException: 未在本地计算机上注册"Microsoft.ACE.OLEDB.的主要内容,如果未能解决你的问题,请参考以下文章

视图中出现 InvalidOperationException.Collection 被修改错误