2012-12-29 64 views
2

我有一个文件夹'数据'在我的WPF应用程序中有一个.sdf数据库文件。 这个文件是我的应用程序的数据库。来自WPF的数据库连接

在开发我的软件,我用这样一个固定的路径到我的分贝:

'Data Source=P:\Dropbox\Projects\MembersApp\MembersApp\bin\Debug\Data\RF_db.sdf' 

现在我想用| DataDirectory目录|值,以便应用程序始终可以找到数据库,有史以来安装的应用程序。我发现这个解决方案在StackOverflow上:

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

但是在最后一行'错误的编译常量值'给我一个错误。我已经尝试过:

string dataSourceHome = @"Data Source=|DataDirectory|\RF_db.sdf"; 

但这并不奏效。

任何想法这里有什么问题吗?

+0

我在这里找到了这个解决方案[StackOverflow] [1],它适合我。 只需将我的'Data'文件夹重命名为'App_Data'并使用以下代码: string data = @“Data Source = App_Data \ RF_db.sdf”; LocalConnection = new SqlCeConnection(data); 这适用于我当我运行我的应用程序本地。但是,当我用clickonce部署我的应用程序失败。 [1]:http://stackoverflow.com/questions/12932963/how-to-set-a-relative-path-to-a-sql-server-compact-database – PitAttack76

回答

1

不要改变你的代码DataDirectory;它由安装程序设置,并且更改它会阻止您的应用程序知道数据的安装位置。只需使用:

string dataSourceHome = @"Data Source=|DataDirectory|\RF_db.sdf"; 

,别无其他。不要拨打AppDomain.CurrentDomain.SetData("DataDirectory", path);这就是破坏事物。

0

它看起来像你创建一个ADO.Net连接字符串。您的dataSourceHome中没有信息吗? 看看this post

或者可以在ConnectionStrings.com上找到创建连接的不同方法。

1

你可以使用:

string dataSourceHome = string.Format("Data Source={0}\\RF_db.sdf", Environment.CurrentDirectory); 

string dataSourceHome = string.Format("Data Source={0}\\RF_db.sdf", System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)); 
+0

如果他正在使用安装程序或ClickOnce数据目录可能不是应用程序或程序集目录。事实上,从他的编辑看来,它并不是。 –

相关问题