无法加载SQL Server Compact的本机组件

时间:2011-07-21 09:17:30

标签: asp.net sql-server-ce sql-server-ce-4

我在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复制为su {{3}但没有效果。

7 个答案:

答案 0 :(得分: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

我刚刚授予Read&amp;执行并列出文件夹内容权限,现在它就像一个魅力。

答案 1 :(得分:3)

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

  1. 中等信任,或

  2. 私人部署。

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

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

    这需要中等信任,并要求App Pool用户有权访问C:\Program Files\Microsoft SQL Server Compact Edition中的SQL Server Compact COM dll。

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

    如果私有部署SQL Server CE DLL,通过将{b> all 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>
    

答案 2 :(得分:2)

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

  

在任何给定的时间点,64位计算机的正确状态,   对于SQL Server Compact,将是以下内容: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

答案 3 :(得分:2)

我发现了一个完全不相关的问题会导致出现此错误消息,所以我在这里发布了一个链接,供从谷歌到达此处的所有人使用。这吃了大约三四个小时的昨晚,我最终不得不逐步完成反编译的SqlServerCe二进制文件,所以希望这会对你有所帮助:Certain symbols in application path prevent SQL Server Compact from loading

答案 4 :(得分:1)

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

答案 5 :(得分:0)

我刚从SQL CE 3.5升级到4.0,从Microsoft下载了新版本。 这样做之后,我收到了错误消息,它将我带到了这里。 对我来说,解决方案是使用NuGet包管理器为EntityFramework安装SQL CE 4.0。所以只从网站上安装二进制文件对我来说不起作用!

答案 6 :(得分:0)

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

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