2013-04-22 81 views
3

一個SQLiteConnection字符串的最基本的形式是「數據源= ...」SQLite數據源路徑奇怪的問題?

我已經嘗試了演示中,我曾呼籲MyData.sdb SQLite數據庫文件,該文件是在我的演示正確放置項目文件夾樹(例如:DemoProject \ MyData.sdb)。和以下SQLiteConnection字符串工作:

"data source = MyData.sdb" 

我可以選擇表確定。我甚至嘗試將MyData.sdb添加到演示項目文件夾中的另一個子文件夾(例如DemoProject \ Data \ MyData.sdb)並且上面的連接字符串仍然有效?哇,不敢相信。但現在是最奇怪的事情(與我在演示項目中遇到的情況相反):

當我嘗試另一個項目並將其應用於它時,它拋出一個異常,名爲「No such table ...」我試過選擇一個存在於我的SQLite數據庫中的表。這很奇怪。我懷疑這是否是數據庫文件的路徑不正確。 我一直在使用這樣的數據庫文件的絕對路徑的嘗試:

"data source = D:\\demo project\\MyData.sdb" 

然後它的工作,到底爲什麼我在演示項目中使用相對路徑爲我的SQLite數據庫文件很好,但可以」不適用於我的新項目?

我不認爲這很容易,它需要你的經驗來解釋。奇怪的事情可能在演示項目或我的新項目中,應該有一個工作異常。

請幫忙!謝謝!

+0

我的建議是:不要依賴「無證的功能」。始終按照文檔中描述的那樣做正確的事情並指定參數。該功能適合你,你發現「有用」可能會被開發者視爲一個錯誤,並且可以在下一個版本中修復 – cha 2013-04-22 06:51:35

回答

0

@「Data source =」+ System.Windows.Forms.Application.StartupPath +「demo project \ MyData.sdb」;

這與此代碼 是在應用程序運行

0

的相對路徑數據庫文件,因爲你的應用程序的當前工作目錄可能是項目之間可能無法正常工作的數據庫。你可以通過在應用運行時獲得Environment.CurrentDirectory來了解你的應用的工作目錄。

例如,在C#控制檯應用程序,工作目錄可能是:

D:\Projects\SQLiteTest\bin\Debug 

如果您的數據源恰好是"data source = MyData.sdb",那麼你的控制檯應用程序,將在D:\Projects\SQLiteTest\bin\Debug\MyData.sdb尋找該數據庫。

如果你的下一個應用程序是在IIS中運行一個asp.net應用程序,工作目錄可改爲:

C:\windows\system32\inetsrv 

您的應用程序將無法找到你的數據庫的位置,因爲你很有可能把數據庫,而不是在C:\windows\system32\inetsrv\MyData.sdb

This SO question包含一些解決方案來一致地解析數據庫的相對路徑。