无法打开数据库文件
本文关键字:数据库 文件 | 更新日期: 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 :
连接到远程数据库不同,您必须检查以下内容。
- 防火墙端口允许性。
- 提供数据库的公司/主机允许远程连接。
在连接字符串中添加"日志模式=关闭;"时,我的问题已解决
禁用日志文件这完全禁用回滚日志。
数据源=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" 解决了这个问题