C#-添加表格时,SQLite抛出“数据库未打开”错误

时间:2018-10-21 00:21:41

标签: c# sqlite

我正在使用C#和System.Data.SQLite(来自https://system.data.sqlite.org的库)编写应用程序,感觉就像在撞墙。我对较大代码段的单元测试是随机抛出异常,因此在准备在此处提出问题时,我以尽可能少的代码段开始了一个新项目。这段代码创建了一个新的sqlite文件,然后向其中添加了一个表,每次尝试添加表时,都会不断抛出Database is not open错误。

看看关于Stack Overflow的类似问题,其中许多是关于在Android上使用SQLite的问题,

在我的研究中,我已经看到我只想在需要的时候保持打开状态,但是从代码示例中可以看出,我正在使用using来隔离连接和命令彼此相邻,但是我仍然遇到问题。

我做错的事情可能很明显,但我不知所措。

谢谢!

using System.Data.SQLite;

namespace SmallCode {
    class Program {
        private const string DB_NAME = "Test.sqlite";
        private const string DB_CONN_STRING = "Data Source=" + DB_NAME + ";Version=3;";

        static void Main(string[] args) {
            Program p = new Program();
            SQLiteConnection.CreateFile(DB_NAME);

            using (SQLiteConnection c = new SQLiteConnection(DB_CONN_STRING)) {
                string sqlCreateTableAccount = "CREATE TABLE ACCOUNT (ID INTEGER PRIMARY KEY, NAME TEXT NOT NULL);";
                using (SQLiteCommand cmd = new SQLiteCommand(sqlCreateTableAccount, c)) {
                    // EXCEPTION THROWN ON NEXT LINE
                    cmd.ExecuteNonQuery();
                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

您仍然需要.Open连接...

using (SQLiteConnection c = new SQLiteConnection(DB_CONN_STRING)) {
    c.Open();  //<------ ADD THIS LINE
    string sqlCreateTableAccount = "CREATE TABLE ACCOUNT (ID INTEGER PRIMARY KEY, NAME TEXT NOT NULL);";
    using (SQLiteCommand cmd = new SQLiteCommand(sqlCreateTableAccount, c)) {
        // EXCEPTION THROWN ON NEXT LINE
        cmd.ExecuteNonQuery();
    }
 }

使用using创建连接不会自动打开连接,而只是创建连接。不过,您不必在末尾显式地.Close(),使用者对其进行处理时它将被关闭。

相关问题