在 WPF 应用程序中未安装 SQL Server CE 4.0 的用法

Posted

技术标签:

【中文标题】在 WPF 应用程序中未安装 SQL Server CE 4.0 的用法【英文标题】:Non-installed usage of SQL Server CE 4.0 in a WPF application 【发布时间】:2013-02-06 20:22:45 【问题描述】:

我有一个访问 SQL Server CE 数据库中数据的 wpf 应用程序。该应用程序和数据库旨在无需安装即可在 PC 上运行,但尝试这样做会失败。 (未能找到数据库提供者)我采取了以下步骤:

System.Data.SqlServerCE -> 复制本地 将 7 个 SQL Server CE 程序集复制到应用程序目录中 已验证 VC++ 在系统上可用

添加关注app.config

<system.data>
  <DbProviderFactories>
    <remove invariant="System.Data.SqlServerCe.4.0" />
    <add name="Microsoft SQL Server Compact Data Provider 4.0" 
         invariant="System.Data.SqlServerCe.4.0" 
         description=".NET Framework Data Provider for Microsoft SQL Server Compact" 
         type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
  </DbProviderFactories>                          
</system.data>

在尝试执行以下代码时:

  try
  
    MessageBox.Show("initialize db connection");
    context = new DataAccess.PersistentStorageEntities();
    MessageBox.Show(context.Database.Connection.ConnectionString);
  
  catch (Exception ex)
  
    MessageBox.Show("exception: "+ex.Message);
    if (ex.InnerException != null)
    
      MessageBox.Show("innerexception: "+ ex.InnerException.Message);  
    
  

我收到消息:

异常:不是有效的 Win32 应用程序。 (HRESULT 异常:0x800700C1)

我怀疑它在加载 System.Data.SqlServerCe.4.0 时遇到问题,但不知道为什么它会尝试加载为 Win32

有什么想法吗?我觉得我在这里失去了理智

【问题讨论】:

【参考方案1】:

1:您必须使用 Private 文件夹中的 System.Data.SqlServerCe dll(以及同一文件夹中的 System.Data.SqlServerCe.Entity.dll dll)。

2:您必须将 x86 和 AMD64 文件夹添加到您的项目中,并在每个文件夹中包含所需的文件(包括私有 VC++ 运行时文件夹)(如私有文件夹中)。确保包含所有文件作为内容

3:您必须将配置引用更改为版本 4.0.0.1

有关更多详细信息,请参阅我的博客:“将 SQL Server Compact 4.0 与桌面专用部署和安装项目 (MSI) 结合使用(第 2 部分)”

【讨论】:

感谢 Eric,我在搜索了几个小时后得出了同样的结论。 澄清一下,您必须将位于:C:\Program Files (x86)\Microsoft SQL Server Compact Edition\v4.0\Private 的文件夹复制到应用程序的目录

以上是关于在 WPF 应用程序中未安装 SQL Server CE 4.0 的用法的主要内容,如果未能解决你的问题,请参考以下文章

使用嵌入式 SQL Server CE 数据库更新 WPF 应用程序

无法将 SQL Server LocalDB 用于我的 WPF 应用程序

SQL Server2000中未将对象引用设置到对象的实例问题..

在 sql server 中未按预期实现使用 round 函数的截断

实体数据模型向导在 vs 2012 中未显示 Microsoft SQL Server Compact 3.5

DataTable 删除 SQL Server 中未反映的行