我在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文件,我想在连接字符串中使用相对路径。有什么建议?谢谢。
相对路径:
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);
这对我有用:
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")
如果数据库文件存在如下,请尝试将此代码添加到工作目录。
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="Data Source=|DataDirectory|\Database\HMProjectDB.sdf;Password=HMProject;Persist Security Info=False;"" providerName="System.Data.EntityClient" />
谢谢
ck.Nitin(TinTin)
相对于什么,你的申请?如果是这样,那么您可以简单地获取应用程序当前路径:
System.Environment.CurrentDirectory
并将其附加到连接字符串
在连接字符串中有相对路径的几个奇怪错误后,我觉得有必要在这里发布。
使用“| DataDirectory |”时或“〜”你不允许使用“../”升级和退出!
示例是使用几个项目访问放置在其中一个项目中的同一localdb文件。
“〜/../ other”和“| DataDirectory | /../ other”将失败
即使它明确地写了at MSDN here它给出的错误,有点不清楚,很难找到,在这里找不到它。
<?xml version="1.0"?>
<configuration>
<appSettings>
<!--FailIfMissing=false -->
<add key="DbSQLite" value="data source=|DataDirectory|DB.db3;Pooling=true;FailIfMissing=false"/>
</appSettings>
</configuration>
您可以尝试下面的代码块,这正是您正在寻找的:
SqlConnection conn = new SqlConnection
{
ConnectionString = "Data Source=" + System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase) + "\\Database.sdf"
};
在配置文件中给出相对路径
ConnectionString = "Data Source=|DataDirectory|\Database.sdf";
将DataDirectory更改为可执行文件路径
string path = AppDomain.CurrentDomain.BaseDirectory;
AppDomain.CurrentDomain.SetData("DataDirectory", path);
如果您使用的是EntityFramework,则可以在Context类中设置DataDirectory路径
我在web.config文件中这样做了。我加入了Sobhan的回答,谢谢顺便说一句。
<connectionStrings>
<add name="listdb" connectionString="Data Source=|DataDirectory|\db\listdb.sdf"/>
</connectionStrings>
其中“db”成为我的数据库目录而不是“App_Data”目录。
通常打开:
var db = Database.Open(“listdb”);
尝试为连接到Windows窗体应用程序的数据库指定相对文件路径时,我遇到了同样的问题。我能够通过遵循从Microsoft向Windows窗体添加数据源的说明(例如,for connecting an Access database)来解决此问题。
通过使用此方法,Visual Studio将为您设置数据库的相对文件路径,而不是尝试手动设置它。如果您的数据库在应用程序外部,它将创建数据库的副本并将其添加到您的应用程序中的适当位置。虽然您可以手动更改App.config和/或Settings.settings或其中一个脚本中的连接字符串,但我发现此方法容易出错。相反,我发现最好遵循Microsoft的说明。