无法打开数据库文件

本文关键字:数据库 文件 | 更新日期: 2023-09-27 18:36:07

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"文件在我的主机上,我认为数据源是错误的。如果数据库文件在线托管,如何设置连接数据?权限文件在这里没有问题。

无法打开数据库文件

尝试打开网络驱动器上的数据库时,我遇到了相同的异常(路径以"''''myServer''myDbFile..."开头),我通过将true放在连接构造函数中的parseViaFramework参数来解决它。

sql_con = new SQLiteConnection(a, true);
这是一个

连接字符串问题,

SQL 精简版连接字符串格式

基本:

Data Source=filename;Version=3;

使用 UTF16 :

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

使用密码 :

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

使用 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. 提供数据库的公司/主机允许远程连接。

在连接字符串中添加"日志模式=关闭;"时,我的问题已解决

禁用日志文件这完全禁用回滚日志。

数据源=c:''mydb.db;版本=3;日志模式=关闭;

我遇到了同样的问题,并使用查询字符串修复了它,如下所示:@"数据源=C:''ProgramData''proj''lodeDb.db;版本=3;FailIfMissing = False"

我的意思是,当我使用数据库文件位置的完整路径时,它可以工作,当我使用"~/lodeDb.db"时它不起作用

我在共享托管服务器上遇到了同样的问题,我的 C# 代码能够从 SQLIte db 文件中读取数据。但是在添加/更新数据时,它抛出错误"无法打开数据库"

我尝试了许多在堆栈溢出上建议的选项,但是在引用 https://stackoverflow.com/a/17780808/2021073 和 https://www.sqlite.org/pragma.html#pragma_journal_mode 之后,我尝试将日志模式=关闭; 添加到连接字符串

它对我有用

示例代码

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

这个解决方案对我有用:

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" 解决了这个问题