14

我已经在 Win7 x64 上安装了 SQL Server Compact Edition 4.0,它同时适用于 Asp.Net 和桌面应用程序。这台 PC 还安装了 Visual Studio 2010 SP1。但是我的 Server 2008 R2 会为 Asp.Net 应用程序产生以下错误,尽管它可以运行桌面应用程序:

Unable to load the native components of SQL Server Compact corresponding to the
ADO.NET provider of version 8482. Install the correct version of SQL Server
Compact. Refer to KB article 974247 for more details.

我已经尝试过使用 SqlDataSource 和 SqlCeConnection。同样的错误。我的 web.config 如下所示:

<?xml version="1.0"?>
<configuration>
    <connectionStrings>
       <add name="SQLCE" connectionString="Data Source=|DataDirectory|\a.sdf"
        providerName="System.Data.SqlServerCe.4.0" />
    </connectionStrings>
    <system.web>
        <compilation debug="true" targetFramework="4.0">
            <assemblies>
                <add assembly="System.Data.SqlServerCe, Version=4.0.0.0,
                Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>
            </assemblies>
        </compilation>
    </system.web>
</configuration>

还尝试按照此处的建议复制 dll,但没有效果。

4

7 回答 7

10

终于让 SQL Server Compact Edition 4.0 在 IIS 7.5 下工作。问题是权限问题。当前应用程序池的标识IWAM_plesk(默认)无权访问 SQL Server Compact 4.0 文件夹:

C:\Program Files\Microsoft SQL Server Compact Edition\v4.0

C:\Program Files (x86)\Microsoft SQL Server Compact Edition\v4.0

我刚刚授予读取和执行和列出文件夹内容权限,现在它就像一个魅力。

于 2011-07-31T08:38:30.910 回答
4

在 ASP.net 中部署 SQL Server CE 4.0 有两种方法。

  1. 中等信任度,或

  2. 私人部署。

您的配置文件使用版本 4.0.0.0 -

<add assembly="System.Data.SqlServerCe, Version=4.0.0.0,
            Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>

这需要中等信任,并且需要应用程序池用户有权访问C:\Program Files\Microsoft SQL Server Compact Edition.

如果中等信任失败,您可以尝试私有部署。这是我的偏好,将来某个时候您的系统出现问题的可能性较小。

如果您私有部署 SQL Server CE DLL,通过将所有文件复制v4.0\Private到 中bin\,确保您的 Web.config 声明对版本 4.0.0.1 的依赖关系。此版本未部署在 GAC 中,这将确保加载您的私有副本。

<system.web>
 <compilation>
  <assemblies>
    <add assembly="System.Data.SqlServerCe, Version=4.0.0.1,
            Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>
  </assemblies>
 </compilation>
</system.web>

您还需要在 Web.config 中的 DbProvider 部分进行相应的更改

<system.data>
    <DbProviderFactories>
        <remove invariant="System.Data.SqlServerCe.4.0" />
        <!-- Use private copy 4.0.0.1 -->
        <add invariant="System.Data.SqlServerCe.4.0" 
             name="Microsoft SQL Server Compact 4.0"
             description=".NET Framework Data Provider for Microsoft SQL Server Compact"
             type="System.Data.SqlServerCe.SqlCeProviderFactory,
                   System.Data.SqlServerCe,
                   Version=4.0.0.1,
                   Culture=neutral,
                   PublicKeyToken=89845dcd8080cc91" />
    </DbProviderFactories>
</system.data>
于 2012-12-19T07:54:59.967 回答
2

您的服务器是否安装了 SQL CE 4.0 的测试版?检查添加/删除程序以获取版本信息。

于 2011-07-21T09:37:21.013 回答
2

此处的 Microsoft 知识库http://support.microsoft.com/kb/974247/en-us说:

在任何给定时间点,对于 SQL Server Compact,64 位计算机的正确状态如下: x86 和 amd64 MSI 均已安装。x86 和 amd64 MSI 的版本相同。

因此,如果您遇到任何类似的问题,请确保计算机同时安装了 Compact 的 x86 和 amd64 MSI,并且它们的版本相同。如果不是,请根据需要从以下链接安装 Compact SP2 x86 和 x64 MSI:http: //www.microsoft.com/downloads/details.aspx? familyid=E497988A-C93A-404C-B161-3A0B323DCE24&displaylang=en

于 2011-07-31T06:30:07.190 回答
2

我发现了一个完全不相关的问题,它会导致此错误消息,因此我在此处为从 Google 到达这里的任何人发布了一个链接。这消耗了昨晚大约三四个小时,我最终不得不逐步检查反编译的 SqlServerCe 二进制文件,因此希望这会对您有所帮助:应用程序路径中的某些符号会阻止 SQL Server Compact 加载

于 2011-10-04T15:21:29.387 回答
0

我刚刚通过从Microsoft下载新版本从 SQL CE 3.5 升级到 4.0 。这样做之后,我收到了将我带到这里的错误消息。对我来说,解决方案是使用 NuGet 包管理器为 EntityFramework 安装 SQL CE 4.0。因此,仅从网站安装二进制文件对我没有帮助!

于 2013-08-30T12:18:25.170 回答
0

我有同样的错误“无法加载 SQL Server Compact 的本机组件”

我使用了 Try Catch 内置对象并解决了这个问题。我试图打开的 sdf 文件有密码。

于 2016-04-04T12:33:13.183 回答