Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 与数据库的连接未打开?_C#_Sqlite_Uwp - Fatal编程技术网

C# 与数据库的连接未打开?

C# 与数据库的连接未打开?,c#,sqlite,uwp,C#,Sqlite,Uwp,我目前正在使用Microsoft.Data.Sqlite名称空间开发一个UWP应用程序 我可以将数据写入数据库和所有内容,但当我要删除数据库时,会出现一个错误,即ExecuteNonQuery只能在连接打开时调用。 我对一般使用SQLite和数据库非常陌生,所以肯定会有一些错误。我只是找不到任何与这个错误相关的东西,所以我必须在这里问一下 这是我用来初始化数据库的代码: public static void InitializeDatabase() { using (SqliteConn

我目前正在使用
Microsoft.Data.Sqlite
名称空间开发一个UWP应用程序

我可以将数据写入数据库和所有内容,但当我要删除数据库时,会出现一个错误,即
ExecuteNonQuery只能在连接打开时调用。

我对一般使用SQLite和数据库非常陌生,所以肯定会有一些错误。我只是找不到任何与这个错误相关的东西,所以我必须在这里问一下

这是我用来初始化数据库的代码:

public static void InitializeDatabase()
{
    using (SqliteConnection db =
        new SqliteConnection($"Filename=DashboardDatabase.db"))
    {
        db.Open();

        const string tableCommand = "CREATE TABLE IF NOT EXISTS " +
                                    "VisibilityTable (" +
                                    "ParameterId INTEGER NOT NULL PRIMARY KEY, " +
                                    "UserVisibility INTEGER NOT NULL, " +
                                    "GeneralVisibility INTEGER NOT NULL, " +
                                    "Format TEXT NOT NULL)";

        SqliteCommand createTable = new SqliteCommand(tableCommand, db);

        try
        {
            createTable.ExecuteReader();
        }
        catch (SqliteException sqliteException)
        {
            Log.Logger.Error("An Error occurred while creating a table in the database:");
            Log.Logger.Error(sqliteException.Message);
        }

        db.Close();
    }
}
这是我用来删除表的代码,当它想要运行
ExecuteNonQuery
方法时,会立即创建错误

public static void DeleteTable()
{
    using (SqliteConnection db = new SqliteConnection("Filename=DashboardDatabase.db"))
    {
        db.Open();

        SqliteCommand deleteCommand = new SqliteCommand("DROP TABLE VisibilityTable");

        deleteCommand.ExecuteNonQuery();

        db.Close();
    }
}
在这种情况下,我非常感谢你的帮助

编辑:

正如JayV在评论中指出的,我未能将一部分添加到我的SqliteCommand中

因此,解决方案是改变这一行:

SqliteCommand deleteCommand = new SqliteCommand("DROP TABLE VisibilityTable");
为此:

SqliteCommand deleteCommand = new SqliteCommand("DROP TABLE VisibilityTable", db);

创建
deleteCommand
对象时,忽略了向其添加数据库连接

更改行:

SqliteCommand deleteCommand = new SqliteCommand("DROP TABLE VisibilityTable");
致:

作为一个旁白,您应该考虑使用(..)中,就像您对连接所做的那样。

例如:

using(SqliteCommand deleteCommand = new SqliteCommand("DROP TABLE VisibilityTable", db))
{
    deleteCommand.ExecuteNonQuery();
}

您似乎没有将连接对象设置为新创建的
deleteCommand
对象。Try:SqliteCommand deleteCommand=newsqlitecommand(“DROP TABLE VisibilityTable”,db);这实际上就是问题所在……我只是通过与我在另一个类中创建的另一个表进行仔细比较来验证,我似乎忘记了VisibilityTable的所有方法……非常感谢您指出:)请添加一个答案,以便人们可以轻松找到。我将等待JayV这样做,因为他提出了答复:)
using(SqliteCommand deleteCommand = new SqliteCommand("DROP TABLE VisibilityTable", db))
{
    deleteCommand.ExecuteNonQuery();
}