SQLIte无法打开数据库

6
我刚开始着手处理一个样例应用,只需要调用我的SQLite数据库中的一些表格,除此之外我已经解决了其他遇到的问题。但是有一个问题一直困扰着我,尽管我已经搜索了很多,但是对于连接字符串、权限问题等提供的建议都不适用于我。对于权限问题,我添加了“Everyone”用户并授予了完全控制权限,但我仍然遇到同样的错误。
以下是我正在尝试执行的代码:
// calling function
void getRecords2()
    {
        MySqlLite.DataClass ss = new MySqlLite.DataClass();
        DataTable dt = ss.selectQuery("select * from english_words"); 
    }

// the SQLite class that execute the code
using System.Data;
using System.Data.SQLite;

namespace MySqlLite
{
    class DataClass
    {
        private SQLiteConnection sqlite;

        public DataClass()
        {            
            //This part killed me in the beginning.  I was specifying "DataSource"
            //instead of "Data Source"
            sqlite = new SQLiteConnection(@"Data Source=C:\testwork\db\MrPick.sqlite3.db;Version=3;FailIfMissing=True");

        }

        public DataTable selectQuery(string query)
        {
            SQLiteDataAdapter ad;
            DataTable dt = new DataTable();

            try
            {
                SQLiteCommand cmd;
                sqlite.Open();  //Initiate connection to the db
                cmd = sqlite.CreateCommand();
                cmd.CommandText = query;  //set the passed query
                ad = new SQLiteDataAdapter(cmd);
                ad.Fill(dt); //fill the datasource

                cmd.Dispose();
                sqlite.Dispose();  

            }
            catch (SQLiteException ex)
            {
                //Add your exception code here.
            }
            sqlite.Close();
            return dt;
        }
    }
}

注意:我使用了以下的汇编语言:
ADO.NET SQLite Data Provider
Version 1.0.82.0 September 3, 2012
Using SQLite 3.7.14
Originally written by Robert Simpson
Released to the public domain, use at your own risk!
Official provider website: http://system.data.sqlite.org/

非常感谢您在这方面提供的帮助。


5
好的,什么是例外情况,它在哪里得到的? - cdhowie
你确定,你的数据库版本是3吗? - Hamlet Hakobyan
异常信息为:System.Data.SQLite.SQLiteException (0x80004005):无法打开数据库文件。 - Rama
如果删除或保留数据库版本,不会发生任何更改,错误仍然存在。那么如何确保数据库文件的版本? - Rama
C:\testwork\db\MrPick.sqlite3.db 这个文件存在吗?我见过 .db3.sqlite 的扩展名,但从未见过 .sqlite3.db - Bobson
是的,它存在,并且我还使用Sqlitemanager添加了新的数据库,其扩展名为.sqlite。因此,当我在连接字符串中输入当前扩展名“.sqlite”时,它会生成“找不到表”的错误。而当我添加.db扩展名(该扩展名未出现在文件系统中)时,它会生成“无法打开数据库文件”的错误。 - Rama
3个回答

11

当我遇到这个错误时,我必须在SQLiteConnection构造函数中将parseViaFramework设置为true

SQLiteConnection connection = new SQLiteConnection(connectionString, true);
connection.Open();

https://dev59.com/9Ggv5IYBdhLWcg3wDsnZ - kikea

11

根据你的评论,你遇到了“无法打开数据库文件”的错误,因为你将代码指向了一个不存在的文件。

“找不到表”错误意味着它找到了数据库,但没有找到你要查找的表。另一方面,“无法打开数据库文件”意味着它甚至无法找到数据库,也没有尝试查找表格。当你收到“找不到表”时,离正确工作的状态就更近了。

你应该将路径改回与磁盘上的文件匹配,然后使用像Firefox SQLite Manager这样的工具确认english_words表确实存在于你的数据库中。

如果不存在,你应该使用该工具创建它,如果存在,则应在这里发布关于“找不到表”错误的另一个问题。

希望这可以帮助你。


SQLite 中存在一种行为,即如果连接字符串中指定的数据库不存在,则会创建一个新的数据库,因此在错误的连接字符串中始终会出现“表未找到错误”。 - Rama
1
@Nasser - 是的,但是你将FailIfMissing设置为true,所以如果它找不到它,它就不会创建它。 - Bobson
2
我遇到了同样的问题,但对我来说问题是connectionString的总长度超过了128个字符,包括“Datasource=C:/<path>/<databaseName>.db”。缩短长度就可以解决问题。 - Shrikant Prabhu

0

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

我尝试了许多在stackoverflow上建议的选项 但是在参考 https://stackoverflow.com/a/17780808/2021073
https://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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接