簡體   English   中英

C#-添加表時,SQLite拋出“數據庫未打開”錯誤

[英]C# - SQLite throwing “database is not open” error when adding table

我正在使用C#和System.Data.SQLite(來自https://system.data.sqlite.org的庫)編寫應用程序,感覺就像在撞牆。 我對較大代碼段的單元測試是隨機拋出異常,因此在准備在此處提出問題時,我以盡可能少的代碼段開始了一個新項目。 這段代碼創建一個新的sqlite文件,然后向其中添加一個表,每次嘗試添加表時都會拋出“ Database is not open錯誤。

看看關於Stack Overflow的類似問題,很多問題都與將SQLite與Android一起使用有關,在此情況並非如此。

在我的研究中,我已經看到我只想在需要的時候保持打開狀態,但是正如從代碼示例中可以看到的那樣,我正在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();
                }
            }
        }
    }
}

您仍然需要.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() ,使用時將其關閉。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM