Sqlite + c#:无法打开数据库文件

时间:2012-06-04 02:12:09

标签: c# sqlite connection

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”文件,我认为数据源是错误的。可以告诉我在线托管中是否有db文件。如何设置连接的数据 谢谢 注意:这里的权限文件没问题

5 个答案:

答案 0 :(得分:32)

我在尝试打开网络驱动器上的数据库时遇到了同样的异常(路径以" \\ myServer \ myDbFile ..."开头)并且我通过放置{{1}来解决它}连接构造函数中的true参数。

parseViaFramework

答案 1 :(得分:5)

这是一个连接字符串问题,

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

答案 2 :(得分:4)

添加“期刊模式=关闭”时,我的问题解决了在连接字符串

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

Data Source = c:\ mydb.db; Version = 3; Journal Mode = Off;

答案 3 :(得分:1)

我遇到了同样的问题并使用查询字符串修复了它: @“Data Source = C:\ ProgramData \ proj \ lodeDb.db; Version = 3; FailIfMissing = False”

由此,我的意思是当我使用完整路径获取DB文件的位置时,它可以工作,当我使用“〜/ lodeDb.db”时它不起作用

答案 4 :(得分:0)

此解决方案对我有用:

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);
}