簡體   English   中英

無法打開數據庫文件

[英]Unable to open the database file

private void SetConnection()
{
     string a = string.Format(@"Data Source={0};Version=3;New=False;Compress=True;", "~/lodeDb.db");
     sql_con = new SQLiteConnection(a);
}

private void ExecuteQuery(string txtQuery)
{
     SetConnection();
     sql_con.Open();
     sql_cmd = sql_con.CreateCommand();
     sql_cmd.CommandText = txtQuery;
     sql_cmd.ExecuteNonQuery();
     sql_con.Close();
}

當我運行sql_cmd.ExecuteNonQuery時,Sqlexception 是:

“無法打開數據庫文件”。

我主機上的“lodeDb.db”文件,我認為數據源有誤。 如果是在線托管的數據庫文件,如何設置連接的datasource? 權限文件在這里沒有問題。

嘗試打開網絡驅動器上的數據庫(路徑以“\\\\ myServer \\ myDbFile ...”開頭)時,我得到了同樣的異常,我通過將true到連接構造函數中的parseViaFramework參數來解決它。

sql_con = new SQLiteConnection(a, true);

這是一個連接字符串問題,

SQL Lite連接字符串格式

基礎:

Data Source=filename;Version=3;

使用UTF16:

Data Source=filename;Version=3;UseUTF16Encoding=True;

使用密碼:

Data Source=filename;Version=3;Password=myPassword;

使用pre 3.3x數據庫格式:

Data Source=filename;Version=3;Legacy Format=True;

使用連接池:

Data Source=filename;Version=3;Pooling=False;Max Pool Size=100;

只讀連接:

Data Source=filename;Version=3;Read Only=True;

編輯1:
連接到遠程數據庫不同,您必須檢查以下內容。

  1. 防火牆端口允許。
  2. 公司/主機提供數據庫允許遠程連接。

添加“Journal Mode = Off”時我的問題解決了。 在連接字符串中

禁用日志文件此文件完全禁用回滾日志。

數據源= c:\\ mydb.db;版本= 3;日志模式=關閉;

我遇到了同樣的問題並使用查詢字符串修復它:@“Data Source = C:\\ ProgramData \\ proj \\ lodeDb.db; Version = 3; FailIfMissing = False”

通過這個,我的意思是,當我使用完整路徑的DB文件的位置,它工作,當我使用“〜/ lodeDb.db”它不起作用

這個解決方案對我有用:

var index = dialog.FileName.IndexOf('\\'); example: "C:\TEST.DB"
if (0 != index) {
    Models.Context.CreateDatabase(dialog.FileName);
    OpenProject(dialog.FileName);
}
else //example: "\\Ceng\Share\MyPC"
{
    var path = dialog.FileName.Replace('\\', '/');
    Models.Context.CreateDatabase(path);
    OpenProject(path);
}

我通過設置 System.Data.SQLite dll=>properties=>Copy local=>"True" 解決了這個問題

我在共享托管服務器上遇到了同樣的問題,我的 C# 代碼能夠從 SQLIte db 文件中讀取數據。 但是在添加/更新數據時拋出錯誤“無法打開數據庫”

我嘗試了 stackoverflow 上建議的許多選項但是在參考https://stackoverflow.com/a/17780808/2021073https://www.sqlite.org/pragma.html#pragma_journal_mode 之后我嘗試添加journal mode=Off; 到連接字符串

它對我有用

示例代碼

SQLiteConnection connection = new SQLiteConnection("Data Source=G:\dbfolder\sqlite3.db;Version=3;Mode=ReadWrite;journal mode=Off;", true);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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