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

问题描述 投票:37回答:10

我在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文件,我想在连接字符串中使用相对路径。有什么建议?谢谢。

c# string connection sql-server-ce
10个回答
87
投票

相对路径:

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

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

6
投票

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

d:\ HMProject \ DATABASE \ 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)


4
投票

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

System.Environment.CurrentDirectory 

并将其附加到连接字符串


3
投票

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

使用“| DataDirectory |”时或“〜”你不允许使用“../”升级和退出!

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

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

即使它明确地写了at MSDN here它给出的错误,有点不清楚,很难找到,在这里找不到它。


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

0
投票

您可以尝试下面的代码块,这正是您正在寻找的:

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

0
投票

在配置文件中给出相对路径

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

将DataDirectory更改为可执行文件路径

string path = AppDomain.CurrentDomain.BaseDirectory;
AppDomain.CurrentDomain.SetData("DataDirectory", path);

如果您使用的是EntityFramework,则可以在Context类中设置DataDirectory路径


0
投票

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

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

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

通常打开:

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


0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.