【问题标题】:SqlCeConnection error deploymentSqlCeConnection 错误部署
【发布时间】:2013-09-19 11:35:42
【问题描述】:

当我尝试在其他系统上运行我的应用程序时(在我的情况下,Windows XP 使用 VM Virtual Box 虚拟化),尝试连接到数据库时出错(我已将发布文件夹复制到我的 XP 版本,此文件夹包含我的 sdf 数据库文件)。 我的数据库是 SQL Server Compact 数据库(sdf 文件)。

这是我连接数据库的代码:

 if (_Connection == null)
                    _Connection = new SqlCeConnection(@"Data Source = .\Database.sdf");

在我的开发环境(Windows 8、VS 2012)上试用时效果很好。

应用程序在我的 XP 机器上启动良好,但在必须完成与数据库的连接时崩溃。

我尝试了这种方法: Connection string with relative path to the database file

代码:

string ConnectionString = @"Data Source=|DataDirectory|\Database.sdf";
string executable = System.Reflection.Assembly.GetExecutingAssembly().Location;
string path = (System.IO.Path.GetDirectoryName(executable));
AppDomain.CurrentDomain.SetData("DataDirectory", path);

_Connection = new SqlCeConnection(ConnectionString);

但是当我尝试在发布模式下编译时,我遇到了一些错误:

错误 1 ​​找不到数据库文件。检查路径 数据库。 [数据源= C:\Users\Benj\AppData\Local\Microsoft\VisualStudio\11.0\Designer\ShadowCache\1r55aqij.l5f\p2ffjoyu.4ex\Database.sdf ] C:\Users\Benj\Travail\Projets\UNISO\Programme\UNISO V1.0\UNISO\UNISO\Pages\FAQEdit.xaml 14 9 UNISO

数据库必须部署在应用程序文件夹中。

我已经尝试在不安装 sql server compact 的情况下部署我的应用程序: http://msdn.microsoft.com/en-us/library/vstudio/aa983326.aspx

但我不想使用发布向导。我只是想通过我的发布文件夹共享和运行我的程序。

编辑:

当我在我的 XP VM 上安装 SQL Server Compact 时,它运行良好。所以问题不在于 sdf 文件路径。 问题可能来自将 SQL Server Compact DLL 添加到我的项目的方式。但我已经完全按照上面链接中所说的做了(使用向导进行部署除外)。

更新:

正如您在此链接中看到的,http://msdn.microsoft.com/en-us/library/vstudio/aa983326.aspx,有两种方法可以部署 SQL Server Compact 应用程序。 第一种方法是使用传统的 Windows 安装程序。我试过了,它运行良好,我的应用程序运行良好,但我不想使用这种方式(我不想在客户端计算机上安装东西,我只想共享一个独立的文件夹)。 第二种方法是基于私有文件的部署方法(这是我想要使用的方法)。 我按照上面链接中“基于私有文件的部署”部分中的所有说明进行操作,但是当我运行应用程序时,它会在连接到数据库时停止。 我有什么遗漏吗?

【问题讨论】:

  • 应用我在回答中建议的更改后收到的错误消息是什么?
  • 我认为问题不再与数据库路径有关。当 SQL Server Compact 安装在客户端 PC 上时,它运行良好。这意味着数据库很好找到(因为我可以在数据库上读写)。我使用此代码连接到数据库:_Connection = new SqlCeConnection("Data Source = Database.sdf");它运作良好。问题仅在于基于私有文件的部署方法不起作用(正如我在帖子的更新部分中所说)。

标签: wpf database deployment


【解决方案1】:

好吧,如果数据库文件位于应用程序的文件夹中,为什么不这样做:

string appFolder = Path.GetDirectory(Assembly.GetEntryAssembly().Location);
string dbFile = Path.Combine(appFolder, "Database.sdf");
string ConnectionString = String.Format(@"Data Source={0}", dbFile);

顺便说一句:Sql Server Compact 意味着无需安装即可使用。它实际上不是一个服务器,而是一组管理数据库的DLL。

.\Database.sdf 可能不起作用,因为.\ 不解析相对于应用程序所在的文件夹,而是相对于当前目录,这可能不同!记住这一点很重要。

【讨论】:

  • 我在尝试使用您的解决方案时遇到很多 xaml 错误(仅在 Release 中,我在 Debug 中没有错误)。但问题似乎出在其他地方。请查看我的编辑。
  • 在上面链接的 Microsoft“如何部署...”页面上,它准确地说明了在“基于私有文件的部署”中要做什么。你可能没有正确地做到这一点。所有七个 DLL 都需要添加到您的解决方案中,所有七个 DLL 都需要位于 Bin\Release 目录中,并且都需要复制到客户端。实际上我不知道为什么你应该得到 XAML 错误 - 我所说的与 XAML 无关。
  • 我的解决方案中添加了所有七个 DLL,并且所有七个 DLL 都在 Bin\Release 目录中,并且全部复制到客户端。我已经做了很多次操作,但我总是得到相同的结果。关于我的 XAML 错误,这真是一个谜。
  • 所以,如果我理解正确,您不会再收到有关数据库的异常,但现在您会收到 XAML 错误?我敢打赌这与绑定问题有关。但除此之外,我建议您简单地创建一个测试解决方案,在其中添加所需的 DLL 和 DB 文件,然后尝试打开数据库并选择一些东西。这也可以是一个控制台应用程序。只是为了检查你做对了。如果您可以成功部署它,则错误一定是其他的。
  • 不,我的问题不再是 XAML 错误。看看我帖子的“编辑”部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-10
  • 2013-11-16
  • 2017-10-28
  • 2017-10-23
  • 2010-10-16
  • 2011-12-28
相关资源
最近更新 更多