asp.net - 无法加载 SQL Server Compact 的 native 组件

标签 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 here但没有效果。

最佳答案

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

  • 中等信任度,或
  • 私有(private)部署。

  • 您的配置文件使用版本 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 Compact COM dll .

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

    如果您私有(private)部署 SQL Server CE DLL,请复制 v4.0\Private 中的所有文件。至bin\ ,请确保您的 Web.config 声明对版本 4.0.0.1 的依赖。此版本未部署在 GAC 中,这将确保加载您的私有(private)副本。
    <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>
    

    关于asp.net - 无法加载 SQL Server Compact 的 native 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6773843/

    相关文章:

    c# - 如何从子域中删除主域 cookie

    c# - 在 GridView Cell 中渲染 HTML 标签

    c# - 在 Entity Framework 中将多个外键设置为主键

    c# - 如何在 Visual Studio 的 SQL Compact 中编辑列名?

    c# - 如何使用 C# 在 Windows CE 中将 SQL Server Compact 表导出到 Excel?

    sql - IDENTITY_INSERT 和 SQL Server Compact

    c# - 如何使用唯一的 ID 来识别每台远程计算机

    asp.net - 如何使用 javascript 获取 ASP.NET 的文本框控件的值

    linq-to-sql - 为什么我的 DataContext 不使用 SQL Server Compact Edition 4,而不是尝试使用 3.5?

    sql-server-ce - 在.net 3.5下运行SQL CE 4.0可以吗?