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

Asp.net 无法加载SQL Server Compact的本机组件,asp.net,sql-server-ce,sql-server-ce-4,Asp.net,Sql Server Ce,Sql Server Ce 4,我已经在Win7 x64上安装了SQL Server Compact Edition 4.0,它同时运行于Asp.Net和桌面应用程序。这台电脑还安装了Visual Studio 2010 SP1。但是my Server 2008 R2为Asp.Net应用程序生成以下错误,尽管它可以运行桌面应用程序: Unable to load the native components of SQL Server Compact corresponding to the ADO.NET provider o

我已经在Win7 x64上安装了SQL Server Compact Edition 4.0,它同时运行于Asp.Net和桌面应用程序。这台电脑还安装了Visual Studio 2010 SP1。但是my 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>


但没有效果。

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

此处的Microsoft知识库说明:

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

因此,如果您遇到任何类似问题,请确保计算机 已安装Compact的x86和amd64 MSI,并且它们是 同样的版本。如果不是,则安装Compact SP2 x86 和x64 MSI,根据需要从以下链接:


终于让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:\ProgramFiles(x86)\Microsoft SQL Server Compact Edition\v4.0


我刚刚授予了读取和执行以及列出文件夹内容的权限,现在它就像一个符咒一样工作。

我发现了一个完全不相关的问题,可能会导致此错误消息,所以我在这里为从谷歌来到这里的任何人发布了一个链接。这占用了昨晚大约三四个小时的时间,我最终不得不逐步完成反编译的SqlServerCe二进制文件,希望这能帮助您:。

在ASP.net中部署SQLServerCE4.0有两种方法

  • 中等信任,或

  • 私人部署

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

    <add assembly="System.Data.SqlServerCe, Version=4.0.0.0,
                Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>
    
    您还需要在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>
    

    我刚刚从下载了一个新版本,从SQL CE 3.5升级到了4.0。 完成此操作后,我收到了将我带到这里的错误消息。
    对我来说,解决方案是使用NuGet软件包管理器为EntityFramework安装SQL CE 4.0。所以,仅仅从网站上安装二进制文件对我来说并没有效果

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


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

    没有,只有这些:Compact 4.0 x64 ENU、Compact 4.0 x64 Web工具ENU、Compact 3.5 SP2 ENU、Compact 3.5 SP2查询工具ENU、Compact 3.5 SP2 x64 ENU。是的,但这些文件随NuGet软件包SqlServerCompact.4.0.8482.1提供的版本(单击支持按钮)。NativeBinaries文件夹中的文件夹x86和amd64与System.Data.SqlServerCe.dll在同一文件夹中是必需的。@Grastveit谢谢,这与xcopy部署完美配合。
    <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>