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();
}