我正在使用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();
}
}
}
}
}
答案 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()
,使用者对其进行处理时它将被关闭。