2009-12-02 83 views
30

我從winforms應用程序中的sdf數據庫加載數據。我使用數據庫文件的完整路徑。例如:連接字符串與數據庫文件的相對路徑

conn = new SqlCeConnection 

{ 

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

}; 

我喜歡使用數據庫文件的相對路徑。例如。我在文件夾F中有sdf文件:\ My Documents \ Project1 \ bin \ Debug \ Data \ file.sdf,我想在連接字符串中使用相對路徑。 有什麼建議嗎?謝謝。

+0

你確定你有相對路徑嗎?你輸入的「F:\ My Documents \ Project1 \ bin \ Debug \ Data \ file.sdf」也是一個完整路徑。如果您的應用程序已經從「F:\ My Documents \ Project1 \ bin \」運行,則相對路徑將類似「\ data \ file.sdf」 – Jrud 2009-12-02 15:35:10

回答

4

相對於你的應用程序?如果是這樣,那麼你可以簡單地得到應用電流路徑以:

System.Environment.CurrentDirectory 

,並追加到連接字符串

+4

您不能只將它「附加到連接字符串」。您必須解析連接字符串,提取數據源值,在當前目錄前加上,然後重新生成連接字符串。這是不平凡的。 – 2011-01-05 18:41:40

75

相對路徑:

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

應標記爲答案。管理員可以做些什麼嗎? – 2013-09-18 13:27:42

+1

要了解有關** DataDirectory **術語的更多信息,請查看http://msdn.microsoft.com/en-us/library/cc716756.aspx(它位於文檔末尾) – 2014-03-14 15:34:59

0

請您嘗試使用下面的代碼塊,這正是您所期待的納克:

SqlConnection conn = new SqlConnection 
{ 
    ConnectionString = "Data Source=" + System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase) + "\\Database.sdf" 
}; 
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")就是答案。

4

如果數據庫文件像下面那樣存在,請將此代碼嘗試到工作目錄。

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(丁丁)

2

連接字符串中的相對路徑發生幾個奇怪的錯誤後,我覺得有必要在這裏發佈這個。

使用「| DataDirectory |」時或「〜」,你不可以使用「../」加強和縮小!

示例使用多個項目訪問放置在其中一個項目中的相同localdb文件。

「〜/../其他」和「| DataDirectory目錄| /../其他」會失敗

即使是寫清楚at MSDN here它給了其中一個有點不清楚很難找到錯誤在SO這裏找不到它。

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

不存儲連接字符串在。他們有自己的部分。 – slfan 2015-08-02 07:45:23

0

在您的配置文件中給出的相對路徑

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

更改DataDirectory目錄到你的可執行文件路徑

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

如果您正在使用的EntityFramework,那麼你可以設置在DataDirectory目錄路徑你的上下文類

0

我在web.config文件中做了這個。我添加到Sobhan的答案,謝謝btw。

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

其中「db」成爲我的數據庫目錄而不是「App_Data」目錄。

並與常開:

變種分貝= Database.Open( 「listdb」);

相關問題