0

当我尝试在其他系统上运行我的应用程序(在我的情况下,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 安装程序。我试过了,它运行良好,我的应用程序运行良好,但我不想使用这种方式(我不想在客户端计算机上安装东西,我只想共享一个独立的文件夹)。第二种方法是基于私有文件的部署方法(这是我想要使用的方法)。我遵循了上面链接中“基于私有文件的部署”部分中描述的所有说明,但是当我运行应用程序时,它会在连接到数据库时停止。有什么我想念的吗?

4

1 回答 1

0

Well, if the database file resides in your application's folder, why don't you just do this:

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

By the way: Sql Server Compact is meant to be used without installation. It is actually not a server, but a set of DLLs that manage the database.

.\Database.sdf may not work because .\ does not resolve relative to the folder the application is in, but relative to the current directory, which may be different! It is important to keep that in mind.

于 2013-09-19T12:37:07.217 回答