SQLite文件为空

时间:2015-01-03 21:06:51

标签: c# sqlite file

所以......我正在开发需要小而快速访问数据库文件的项目。现在我可以创建文件,但我无法填写它。我正在调用应该创建表的查询,但文件仍然是空的。可以请别人帮助我吗?

static class Database
 {
      private static SQLiteConnection _connection;
      public static bool Connected {
           get { return _connection != null; }
      }

      public static void Connect(string file)
      {
           _connection = new SQLiteConnection("Data Source=" + file + ";Version=3;");
           _connection.Open();
      }

      public static void Disconnect()
      {
           _connection.Close();
           _connection = null;
      }

      public static SQLiteDataReader Query(string sql)
      {
           SQLiteCommand cmd = new SQLiteCommand(sql, _connection);
           return cmd.ExecuteReader();
      }

      public static void ExecuteFile(string file)
      {
           foreach (string line in File.ReadLines(file).Where(line => !line.Trim().StartsWith("--")))
           {
                Query(line.Trim());
           }
      }

      public static void Install(string file)
      {
           SQLiteConnection.CreateFile(file);
           Connect(file);

           // Installation
           ExecuteFile("install.sql");

           Disconnect();
      }
 }

我正在调用'Install'方法来创建该数据库。这是安装文件:

-- Database configuration
PRAGMA journal_mode = OFF 
PRAGMA foreign_keys = ON

-- Database schema creation
CREATE TABLE Metadata(ID INTEGER PRIMARY KEY AUTOINCREMENT,name VARCHAR(256), value VARCHAR(256))
CREATE TABLE T1 (ID VARCHAR(64) PRIMARY KEY NOT NULL, name VARCHAR(256), parent VARCHAR(64)     REFERENCES T1(ID))
CREATE TABLE T2(ID VARCHAR(64) PRIMARY KEY NOT NULL, msg TEXT, userName VARCHAR(256), userEMail VARCHAR(256), userNick VARCHAR(256), t1 VARCHAR(256) REFERENCES T1(ID), position INTEGER)
CREATE TABLE ChangeRecords(ID INTEGER PRIMARY KEY AUTOINCREMENT, changeAction INTEGER, filePath TEXT, data BLOB, position INTEGER, lenght INTEGER, t2 VARCHAR(64) REFERENCES T2(ID))
CREATE TABLE T3(ID INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR(256), url TEXT)

-- Metadata defaults
INSERT INTO Metadata (name,value) VALUES ('credentials_name','null')
INSERT INTO Metadata (name,value) VALUES ('credentials_email','null')
INSERT INTO Metadata (name,value) VALUES ('credentials_nickname','null')
INSERT INTO Metadata (name,value) VALUES ('prefer_nickname','false')
INSERT INTO Metadata (name,value) VALUES ('root','master')
INSERT INTO Branches (id, name) VALUES ('fc613b4dfd6736a7bd268c8a0e74ed0d1c04a959f59dd74ef2874983fd443fc9','master')

毕竟这个文件仍然是空的(0字节)!

1 个答案:

答案 0 :(得分:-1)

它耗费了很长时间,但我找到了解决方案。我之后不得不添加GC.Collect(); _connection = null;所以所有的析构函都被调用了!