23

在我的项目中,我使用带有实体框架的 SQL CE 3.5 数据库并遵循 这篇文章 ,但我有这个例外:

无法加载与版本 8080 的 ADO.NET 提供程序对应的 SQL Server Compact 本机组件。请安装正确版本的 SQL Server Compact。有关详细信息,请参阅知识库文章 974247。

所有细节

System.Data.SqlServerCe.SqlCeException was unhandled
  Message=Unable to load the native components of SQL Server Compact corresponding to the ADO.NET provider of version 8080. Install the correct version of SQL Server Compact. Refer to KB article 974247 for more details.
  Source=""
  HResult=-1
  NativeError=-1
  StackTrace:
       at System.Data.SqlServerCe.NativeMethods.LoadNativeBinaries()
       at System.Data.SqlServerCe.SqlCeConnection..ctor()
       at System.Data.SqlServerCe.SqlCeProviderFactory.CreateConnection()
       at System.Data.EntityClient.EntityConnection.GetStoreConnection(DbProviderFactory factory)
       at System.Data.EntityClient.EntityConnection.ChangeConnectionString(String newConnectionString)
       at System.Data.Objects.ObjectContext..ctor(String connectionString, String defaultContainerName)
       at DAL.OimDBEntities..ctor()
       at DAL.OimRepository..ctor()
       at Microsoft.Rtc.Collaboration.Sample.SubscribePresenceView.UCMASampleSubscribePresenceView.Subscribe()
       at Microsoft.Rtc.Collaboration.Sample.SubscribePresenceView.UCMASampleSubscribePresenceView.Run()
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()
  InnerException: System.DllNotFoundException
       Message=Unable to load DLL 'sqlceme35.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)
       Source=System.Data.SqlServerCe
       TypeName=""
       StackTrace:
            at System.Data.SqlServerCe.NativeMethods.GetSqlCeVersionInfo(IntPtr& pwszVersion)
            at System.Data.SqlServerCe.NativeMethods.LoadValidLibrary(String modulePath, Int32 moduleVersion)
            at System.Data.SqlServerCe.NativeMethods.LoadNativeBinaries()
       InnerException: 
4

4 回答 4

37

我在私人安装 SqlServerCE 时遇到此错误。我在我的项目中引用了 System.Data.SqlServerCe.dll,但我缺少 SqlServerCE 所需的其他 dll(本机组件)。“本机组件”位于 SqlServerCE 的“私有”文件夹的 x86 和 amd64 子文件夹中。您需要确保将它们复制到项目的输出文件夹中。

于 2013-06-13T04:15:17.340 回答
3

我也遇到过同样的问题。问题是我使用了以下命令 install-package EFcodeFirst.SqlServerCompact 来获取 sqlCE。包管理器下载的版本是 4.0,而在我的硬盘上存在的版本是 3.5

从以下位置下载最新版本 4.0 http://www.microsoft.com/en-us/download/details.aspx?id=17876确实解决了我的问题

编辑:上面的链接现在返回 404。现在这是下载的正确位置: https ://www.microsoft.com/en-us/download/details.aspx?id=30709

于 2012-12-12T08:11:29.383 回答
2

我有一个类似的问题。我正在打开一个紧凑的框架 sql 数据库,它给了我以下错误:

无法加载与版本 8080 的 ADO.NET 提供程序对应的 SQL Server Compact 本机组件。请安装正确版本的 SQL Server Compact。有关详细信息,请参阅知识库文章 974247。

在查找文章时,它引导我进入以下链接。以下引用解释了出了什么问题:

基于 Compact 的应用程序通常针对 Compact ADO.NET 提供程序 (System.Data.SqlServerCe.dll) 进行编程。该提供程序反过来与本机 Compact 组件进行通信。为了避免各种不一致,某个版本的 Compact ADO.NET 提供程序只能与同一版本的 Compact 本机组件通信。

最后,我通过下载并安装以下链接中的服务包解决了这个问题。

于 2014-12-01T11:13:41.307 回答
2

您需要将以下文件和整个目录复制到您的 .exe 在服务器上运行的位置。此文件和文件夹很可能位于目录 C:\Program Files(x86)\Microsoft SQL Server Compact Edition\V4.0\Private

System.Data.SqlServerCe.dll 整个 amd64 文件夹我不确定 amd64 文件夹中使用的是什么,但是一旦我将它复制到我的应用程序上,我的应用程序就开始工作了。您还可以通过在 Visual Studio 中的 References 文件夹下单击它来获取 System.Data.SqlServerCe.dll 文件,然后在属性选项卡中将“复制本地”设置为 True,然后当您构建应用程序时,该文件将在您的发布文件夹。

于 2015-08-13T11:59:23.800 回答