[英]Getting 'unable to open database file' with sqlite running under mono
[英]Why am I getting "unable to open database file" on my SQLite table?
我在項目的根目錄中添加了一個 SQLite 數據庫,並將其“構建操作”屬性設置為“內容”:
我正在嘗試以這種方式打開數據庫:
using System.Data.SQLite;
. . .
string cs = "Data Source=\\F4FDataSQLite_SingleTable.db;";
using var con = new SQLiteConnection(cs);
con.Open();
...但是在上面的con.Open()
行上拋出了異常“無法打開數據庫文件”。
我不想使用數據庫的完整文件路徑 (C:\\Users\\bclay\\source\\repos\\F4F_Core\\F4F_Core\\F4FDataSQLite_SingleTable.db),因為除了我自己之外,這不會是任何人的有效路徑。
我的連接字符串是否有問題導致此錯誤消息?
嘗試這個:
var dbPath = Path.Combine(Environment.CurrentDirectory, "F4FDataSQLite_SingleTable.db");
string cs = $"Data Source={dbPath}";
using var con = new SQLiteConnection(cs);
con.Open();
或這個:
var dbPath = Path.Combine(Environment.CurrentDirectory, "F4F_Core", "F4FDataSQLite_SingleTable.db");
string cs = $"Data Source={dbPath}";
using var con = new SQLiteConnection(cs);
con.Open();
如果您的項目是否在解決方案文件夾中,則路徑可能是這兩者之一
首先,檢查項目中的debug
文件夾是否存在
下一個:
var connectoinString=Path.Combine("Data source=", Environment.CurrentDirectory, "F4FDataSQLite_SingleTable.db")
// or
var connectoinString=Path.Combine("Data source=", Application.StartupPath, "F4FDataSQLite_SingleTable.db")
using var con = new SQLiteConnection(connectoinString);
con.Open();
根據 Hesam 的回答,我嘗試了以下操作:
string connStr = Path.Combine("Data source=", Environment.CurrentDirectory, "F4FDataSQLite_SingleTable.db");
using var con = new SQLiteConnection(connStr);
con.Open();
...得到了這個:
“C:\\Users\\bclay\\source\\repos\\F4F_Core\\F4F_Core\\bin\\Debug\\netcoreapp3.1\\F4FDataSQLite_SingleTable.db”部分的 ConnectionString 格式無效,找不到等號
connStr 是:
C:\\Users\\bclay\\source\\repos\\F4F_Core\\F4F_Core\\bin\\Debug\\netcoreapp3.1\\F4FDataSQLite_SingleTable.db
(“數據源=”位不存在)
所以我試過這個:
string connStr = string.Format(@"Data source={0}\F4FDataSQLite_SingleTable.db", Environment.CurrentDirectory);
using var con = new SQLiteConnection(connStr);
con.Open();
...所以 connStr 現在是:
數據源=C:\\Users\\bclay\\source\\repos\\F4F_Core\\F4F_Core\\bin\\Debug\\netcoreapp3.1\\F4FDataSQLite_SingleTable.db
它有效。
奇怪的是,如果我使用“Application.StartupPath”而不是“Environment.CurrentDirectory”,我不得不放棄回擊:
connStr = string.Format(@"Data source={0}F4FDataSQLite_SingleTable.db", Application.StartupPath);
哪個更可取,使用“Application.StartupPath”或“Environment.CurrentDirectory”? IOW,當應用程序在用戶的機器上運行時,哪一個最有可能永遠不會引起問題?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.