【发布时间】: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