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)字数太多,我就不粘贴了,这是个什么原因呀?
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.的主要内容,如果未能解决你的问题,请参考以下文章