SQL Server Compact错误:无法加载DLL的'sqlceme35.dll'。指定的模块无法找到

时间:2010-02-14 22:06:52

标签: sql-server sql-server-ce

我正在使用Visual Studio 2008 C#开发一个Windows Forms应用程序,该应用程序在客户端上使用SQL Server Compact 3.5数据库。客户端很可能是32位Windows XP或Windows Vista计算机。我正在使用标准的Windows Installer项目创建MSI文件和setup.exe来在客户端计算机上安装应用程序。我是SQL Server Compact的新手,所以我之前不必分发像这样的客户端数据库。当我运行setup.exe时(在带有SP2和Internet Explorer 7的新Windows XP 32位上)它安装得很好,但是当我运行应用程序时出现此错误:

  

无法加载DLL的'sqlceme35.dll'。无法找到指定的模块

我已经花了几个小时搜索这个错误,但我找到的只是在64位Windows上安装的问题,而且与我正在使用的普通32位无关。

安装应用程序将找到的所有相关文件复制到指定的安装目录中,包括System.Data.SqlServerCe.dll文件(程序集版本3.5.1.0)。数据库文件位于应用程序目录下名为“data”的目录中,其连接字符串为

<add name="Tickets.ieOutlet.Properties.Settings.TicketsLocalConnectionString"         connectionString="Data Source=|DataDirectory|\data\TicketsLocal.sdf"  providerName="Microsoft.SqlServerCe.Client.3.5" />

我有些问题:

  • 应用程序是否能够找到DLL文件(如果它位于同一目录中,即应用程序的本地目录),还是需要在GAC中安装它? (如果是,我可以使用Windows Installer在GAC中安装DLL文件吗?)
  • 为了使用SQL Server Compact数据库,我还需要在应用程序中分发什么吗?
  • 还有其他DLL文件,例如MS interop,用于将数据导出到客户端上的Excel。这些是否需要安装在GAC中,或者将它们定位在应用程序目录中?

4 个答案:

答案 0 :(得分:6)

您不需要它在GAC中运行SQL Server Compact,它将从应用程序目录中选择它们。有几种方法可以部署SQL Server Compact项目。两种主要方式是:

  1. 使用您的项目部署SQL Server Compact可再发行组件安装程序,但这种方式很痛苦,也可能被最终用户取消,或者通过Windows更新升级并破坏您的应用程序。

  2. 将DLL文件包含在应用程序文件夹中。根据您使用的SQL Server Compact的功能(复制或其他),可以在应用程序文件夹中部署少量DLL文件。

  3. 如果您的计算机上安装了SQL Server Compact,则它们很可能位于“C:\ Program Files \ Microsoft SQL Server Compact Edition \ v3.5”中。可以将它们添加到Visual Studio中的项目中,然后将其项目输出类型设置为“始终复制”。您在项目引用中对System.Data.SqlServerCe的主要引用应将 copy local 设置为true。

    • sqlceca35.dll
    • sqlcecompact35.dll
    • sqlceer35en.dll
    • sqlceoledb35.dll
    • sqlceqp35.dll
    • sqlcese35.dll

    如果您已经设置了这些,那么在您的安装程序项目中,您必须包含的是此项目的项目输出,并且您很好。在我看来,这是唯一的出路。它是一个简单的部署,由几个文件组成,您可以控制应用程序使用的DLL版本。

    我希望有所帮助。

答案 1 :(得分:2)

我遇到了类似的问题,一个针对使用SQL Server Compact 3.5 SP1的32位Windows XP和Windows Vista的Visual Studio 2008 Windows应用程序 - 当安装在64位Windows 7上时出现此错误:

  

无法加载DLL的'sqlceme35.dll'。无法找到指定的模块

我正在将SQL Server Compact的MSI嵌入到应用程序的安装程序中。

在此之后相当困惑discussion on MSDN透露我需要在64位计算机上使用64位MSI for SQL Server Compact。 D'哦!也就是说,从页面 Microsoft SQL Server Compact 3.5 Service Pack 1 and Synchronization Services for ADO.NET version 1.0 Service Pack 1 for Windows Desktop 我需要SSCERuntime-ENU-x64.msi而不是SSCERuntime-ENU-x86.msi的64位计算机。

答案 2 :(得分:1)

How to: Deploy a SQL Server Compact Edition Database with an Application 应该提供帮助,至少在前两个问题上有所帮助。

一般情况下,我认为您不应在GAC中为单个应用程序安装任何内容。

答案 3 :(得分:1)