[英]“Unable to open the database file”. Do I have to put the full physical location of sqlite database when developing C# Console application
我創建了一個Sqlite數據庫mydatabase.sqlite
,並將其放在控制台應用程序項目內的App_Data
文件夾中。 我收到一個錯誤:
無法打開數據庫文件
使用sqlite和C#開發控制台應用程序時。
當我使用
string cs = @"Data Source=App_Data\mydatabase.sqlite;Version=3";
我正進入(狀態
無法打開數據庫文件錯誤;
但是當我使用
string cs = @"Data Source=C:\Users\UP_SW02\Desktop\ConsoleApplication1\ConsoleApplication1\App_Data\mydatabase.sqlite;Version=3";
該應用程序正常運行。
是否有可能使用Sqlite數據源而不使用完整的物理位置?
謝謝..
程序內部使用的所有非根目錄路徑都相對於啟動應用程序的文件夾。 請注意, 這不一定是應用程序本身所在的文件夾。使用此類路徑時必須非常小心。
您似乎想要的是相對於您自己的應用程序的文件夾。 有一個簡單的方法可以做到這一點。 如果您的項目中包含Windows.Forms
命名空間,則可以從System.Windows.Forms.Application.ExecutablePath
獲取可執行文件的路徑:
// Get app folder
String appFolder = Path.GetDirectoryName(Application.ExecutablePath)
// Combine with sqlite db path
String dbPath = Path.Combine(appFolder, @"App_Data\mydatabase.sqlite");
// Build connection string
string cs = String.Format(@"Data Source={0};Version={1}", dbPath, 3);
如果您未使用Windows窗體程序,則Application.ExecutablePath
的替代方法是System.Reflection
命名空間中的Assembly.GetExecutingAssembly().Location
。
在連接字符串中獲取文件夾相對路徑的最簡單方法是簡單地添加| DataDirectory |。
之前
string cs = @"Data Source=App_Data\mydatabase.sqlite;Version=3";
后
string cs = @"DataSource=|DataDirectory|\App_Data\mydatabase.sqlite;Version=3";
不可能,SQlite不需要完整路徑地址,但是您可以通過兩種解決方案來解決:
1-將連接路徑保存在配置文件中。
2-通過GetFolderPath
方法獲取App_Data
文件夾路徑,例如:
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
因此,您的代碼如下所示:
var fileName = Path.Combine(Environment.GetFolderPath(
Environment.SpecialFolder.ApplicationData), "mydatabase.sqlite");
string sqliteConnection = string.Format("Data Source={0};Version=3;Timeout=2;", fileName);
3-或者簡單的方法是:
string sqlitePath = Directory.GetCurrentDirectory() + "/App_Data/mydatabase.sqlite";
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.