Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf SqlCeConnection错误部署_Wpf_Database_Deployment - Fatal编程技术网

Wpf SqlCeConnection错误部署

Wpf SqlCeConnection错误部署,wpf,database,deployment,Wpf,Database,Deployment,当我尝试在其他系统上运行我的应用程序时(在我的例子中,windows XP使用VM Virtual Box虚拟化),我在尝试连接到数据库时出错(我已在XP版本上复制了我的发布文件夹,该文件夹包含我的sdf数据库文件)。 我的数据库是SQL Server Compact数据库(sdf文件) 以下是连接到数据库的代码: if (_Connection == null) _Connection = new SqlCeConnection(@"Data

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

以下是连接到数据库的代码:

 if (_Connection == null)
                    _Connection = new SqlCeConnection(@"Data Source = .\Database.sdf");
当我在我的开发环境(Windows8,VS 2012)上尝试时,它工作得很好

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

我尝试过这种方法:

代码:

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\program\UNISO V1.0\UNISO\UNISO\Pages\FAQEdit.xaml 14 9 UNISO

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

我尝试过在不安装sql server compact的情况下部署我的应用程序:

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

编辑:

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

更新:

正如您在这个链接上看到的,有两种方法可以部署SQL server Compact应用程序。 第一种方法是使用传统的Windows安装程序。我试过了,效果很好,我的应用程序运行得很好,但我不想用这种方式(我不想在客户机上安装东西,我只想共享一个独立的文件夹)。 第二种方法是基于私有文件的部署方法(这是我想要使用的方法)。 我遵循了上面链接中“基于私有文件的部署”部分中描述的所有说明,但是当我运行应用程序时,它会在连接到数据库时停止。
我缺少什么吗?

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

string appFolder = Path.GetDirectory(Assembly.GetEntryAssembly().Location);
string dbFile = Path.Combine(appFolder, "Database.sdf");
string ConnectionString = String.Format(@"Data Source={0}", dbFile);
顺便说一下:SQLServerCompact是指不用安装就可以使用的。它实际上不是一个服务器,而是一组管理数据库的DLL


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

当我尝试使用您的解决方案时,我有很多xaml错误(仅在发行版中,我在调试中没有错误)。但问题似乎在别处。请查看我的编辑。在上面链接的Microsoft“如何部署…”页面上,它确切地说明了在“基于私有文件的部署”中要做什么。你可能做得不对。所有七个DLL都需要添加到您的解决方案中,所有七个DLL都需要位于Bin\Release目录中,并且所有这些DLL都需要复制到客户端。实际上,我不知道为什么会出现XAML错误-我所说的与XAML无关。所有七个DLL都添加到我的解决方案中,所有七个DLL都位于Bin\Release目录中,并且都复制到客户端。我已经做了很多次了,但是我总是得到同样的结果。关于我的XAML错误,这真的是一个谜。所以,如果我理解正确的话,你不会再得到关于数据库的异常,但是现在你得到了XAML错误?我打赌这与绑定问题有关。但除此之外,我建议您只需创建一个测试解决方案,在其中添加所需的DLL和DB文件,然后尝试打开数据库并选择一些内容。这也可以是一个控制台应用程序。只是为了检查你做得对。如果您能够成功地部署它,那么错误一定是其他错误。不,我的问题不再是XAML错误。看看我文章的“编辑”部分。应用我在回答中建议的更改后,您会收到什么错误消息?我认为问题不再是数据库路径。在客户端PC上安装SQL Server Compact时,它工作得很好。这意味着数据库很好地找到(因为我可以在数据库上读写)。我使用以下代码连接到数据库:_Connection=new SqlCeConnection(“Data Source=database.sdf”);它工作得很好。问题只在于基于私有文件的部署方法不起作用(正如我在文章的更新部分所说的)。