簡體   English   中英

“無法打開數據庫文件”。 開發C#控制台應用程序時是否必須放置sqlite數據庫的完整物理位置

[英]“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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM