连接字符串,包含数据库文件的相对路径

Mar*_*tin 39 c# string connection sql-server-ce

我在winforms App中从sdf数据库加载数据.我使用数据库文件的完整路径.示例:

conn = new SqlCeConnection

{

ConnectionString ="Data Source=F:\\My Documents\\Project1\\bin\\Debug\\Database.sdf"

};
Run Code Online (Sandbox Code Playgroud)

我想使用数据库文件的相对路径.例如.我在文件夹F:\ My Documents\Project1\bin\Debug\Data\file.sdf中有sdf文件,我想在连接字符串中使用相对路径.有什么建议?谢谢.

Nim*_*oud 88

相对路径:

ConnectionString = "Data Source=|DataDirectory|\Database.sdf";
Run Code Online (Sandbox Code Playgroud)

将DataDirectory修改为可执行文件的路径:

string executable = System.Reflection.Assembly.GetExecutingAssembly().Location;
string path = (System.IO.Path.GetDirectoryName(executable));
AppDomain.CurrentDomain.SetData("DataDirectory", path);
Run Code Online (Sandbox Code Playgroud)

  • 应该标记为答案.这是管理员可以做的事情吗? (2认同)
  • 要了解有关 **DataDirectory** 术语的更多信息,请查看 http://msdn.microsoft.com/en-us/library/cc716756.aspx(位于文档末尾) (2认同)

小智 7

如果数据库文件存在如下,请将此代码尝试到工作目录.

d:\ HMProject\DATABASE\HMProject.sdf

string Path = Environment.CurrentDirectory;
string[] appPath =  Path.Split(new string[] { "bin" }, StringSplitOptions.None);
AppDomain.CurrentDomain.SetData("DataDirectory", appPath[0]);
Run Code Online (Sandbox Code Playgroud)

.sdf文件的连接字符串

<add name="LocalDB" connectionString="metadata=res://*/Client.HMProject.csdl|res://*/Client.HMProject.ssdl|res://*/Client.HMProject.msl;provider=System.Data.SqlServerCe.4.0;provider connection string=&quot;Data Source=|DataDirectory|\Database\HMProjectDB.sdf;Password=HMProject;Persist Security Info=False;&quot;" providerName="System.Data.EntityClient" />

谢谢

ck.Nitin(TinTin)


RC1*_*140 4

相对于什么,您的应用程序?如果是这样,那么您可以简单地使用以下命令获取应用程序的当前路径:

System.Environment.CurrentDirectory 
Run Code Online (Sandbox Code Playgroud)

并将其附加到连接字符串中

  • 您不能只是“将其附加到连接字符串”。您必须解析连接字符串,提取数据源值,添加当前目录,然后重建连接字符串。这一点很重要。 (6认同)