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

时间:2009-12-02 15:30:13

标签: c# string connection sql-server-ce

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

conn = new SqlCeConnection

{

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

};

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

9 个答案:

答案 0 :(得分:87)

相对路径:

ConnectionString = "Data Source=|DataDirectory|\Database.sdf";

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

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

答案 1 :(得分:6)

如果数据库文件如下所示,请将此代码用于工作目录。

d:\ HMProject \数据库\ HMProject.sdf

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

.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)

答案 2 :(得分:4)

相对于什么,您的申请?如果是这样,那么您只需使用以下命令获取应用程序当前路径:

System.Environment.CurrentDirectory 

并将其附加到连接字符串

答案 3 :(得分:3)

在连接字符串中有相对路径的几个奇怪错误后,我觉得有必要在这里发布。

使用“| DataDirectory |”时或者“〜”你不能使用“../”来升级和退出!

示例是使用几个项目访问放置在其中一个项目中的同一个localdb文件。

“〜/../ other”和“| DataDirectory | /../ other”将失败

即使它清楚地写了at MSDN here它给出的错误,有点不清楚,很难找到,也无法在SO找到它。

答案 4 :(得分:1)

   <?xml version="1.0"?>  
<configuration>  
  <appSettings>  
    <!--FailIfMissing=false -->  
    <add key="DbSQLite" value="data source=|DataDirectory|DB.db3;Pooling=true;FailIfMissing=false"/>  
  </appSettings>  
</configuration>  

答案 5 :(得分:0)

请尝试下面的代码块,这正是您正在寻找的内容:

SqlConnection conn = new SqlConnection
{
    ConnectionString = "Data Source=" + System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase) + "\\Database.sdf"
};

答案 6 :(得分:0)

这对我有用:

string Connection = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source="
    + HttpContext.Current.Server.MapPath("\\myPath\\myFile.db")
    + ";Extended Properties=\"Excel 12.0 Xml;HDR=YES\"";

我正在查询XLSX文件,所以不要担心连接字符串中的任何其他内容,而是担心数据源。

所以我的答案是:

HttpContext.Current.Server.MapPath("\\myPath\\myFile.db")

答案 7 :(得分:0)

我在web.config文件中这样做了。我加入了Sobhan的回答,谢谢顺便说一句。

<connectionStrings>
    <add name="listdb" connectionString="Data Source=|DataDirectory|\db\listdb.sdf"/>
  </connectionStrings>

其中“db”成为我的数据库目录而不是“App_Data”目录。

正常打开:

var db = Database.Open(“listdb”);

答案 8 :(得分:0)

在尝试为连接到Windows Forms应用程序的数据库指定相对文件路径时,我遇到了同样的问题。通过按照从Microsoft向Windows窗体添加数据源的说明(例如for connecting an Access database),我能够解决此问题。

通过使用此方法,Visual Studio将为您设置数据库的相对文件路径,而不是尝试手动设置它。如果数据库在应用程序外部,它将创建数据库的副本并将其添加到应用程序中的正确位置。尽管您可以在App.config和/或Settings.settings或您的一个脚本中手动更改连接字符串,但我发现此方法容易出错。相反,我发现通常最好遵循Microsoft的说明。