我目前正在使用Microsoft.Data.Sqlite
名称空间来开发UWP应用。
我可以将数据写入数据库以及所有内容,但是当我想删除数据库时,出现错误提示ExecuteNonQuery can only be called when the connection is open.
我通常对使用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);
答案 0 :(得分:1)
在创建deleteCommand
对象时,您忽略了向其添加数据库连接。
更改行:
SqliteCommand deleteCommand = new SqliteCommand("DROP TABLE VisibilityTable");
收件人:
SqliteCommand deleteCommand = new SqliteCommand("DROP TABLE VisibilityTable", db);
顺便说一句,您应该考虑像使用Connection一样将整个调用包装在using(..)
块中。
示例:
using(SqliteCommand deleteCommand = new SqliteCommand("DROP TABLE VisibilityTable", db))
{
deleteCommand.ExecuteNonQuery();
}