我在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文件,我想在连接字符串中使用相对路径。 有什么建议?谢谢。
答案 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="Data Source=|DataDirectory|\Database\HMProjectDB.sdf;Password=HMProject;Persist Security Info=False;"" 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的说明。