C# SQLite

		/// <summary>
		/// 创建数据库文件
		/// </summary>
		public static void CreateDatabase()
		{
			// Data文件夹不存在时,首先创建Data文件夹
			if (!Directory.Exists(AppDomain.CurrentDomain.BaseDirectory + "Data"))
			{
				Directory.CreateDirectory(AppDomain.CurrentDomain.BaseDirectory + "Data");
			}

			// 创建数据库文件
			SQLiteConnection.CreateFile(AppDomain.CurrentDomain.BaseDirectory + "Data\\Note");

			// 创建并打开连接
			SQLiteConnection conn = new SQLiteConnection("Data Source=" + AppDomain.CurrentDomain.BaseDirectory + "Data\\Note");
			conn.Open();

			// 创建Command并设置类型
			SQLiteCommand cmd = conn.CreateCommand();
			cmd.CommandType = CommandType.Text;

			// 打开自动清理数据库模式,此条命令必须放在创建表之前使用
			// 当从SQLite中删除数据时,数据文件大小不会减小,当重新插入数据时,
			// 将使用那块“空白”空间,打开自动清理后,删除数据后,会自动清理“空白”空间
			cmd.CommandText = "PRAGMA auto_vacuum = 1";
			cmd.ExecuteNonQuery();

			// 创建article表
			StringBuilder strBuilder = new StringBuilder();
			strBuilder.Append("CREATE TABLE article");
			strBuilder.Append("(");
			strBuilder.Append("id INTEGER PRIMARY KEY AUTOINCREMENT,");
			strBuilder.Append("category TEXT NOT NULL COLLATE NOCASE,");
			strBuilder.Append("title TEXT NOT NULL COLLATE NOCASE,");
			strBuilder.Append("content BLOB NOT NULL,");
			strBuilder.Append("creationTime TEXT NOT NULL,");
			strBuilder.Append("modificationTime TEXT NOT NULL");
			strBuilder.Append(")");
			cmd.CommandText = strBuilder.ToString();
			cmd.ExecuteNonQuery();

			// 更改密码
			conn.ChangePassword("iSunshine.net@Gmail.com");

			// 关闭连接
			conn.Close();
		}

		/// <summary>
		/// 判断数据文件是否正常
		/// </summary>
		/// <param name="filePath">文件路径</param>
		/// <returns>正常则返回true</returns>
		public static bool IsDbFileCorrect(string filePath)
		{
			SQLiteConnection conn = new SQLiteConnection("Data Source=" + filePath + ";Password=");
			bool canOpen = false;
			try
			{
				conn.Open(); // 尝试打开链接,发生异常则说明数据库文件损坏
				SQLiteCommand cmd = conn.CreateCommand();
				cmd.CommandType = CommandType.Text;
				cmd.CommandText = "PRAGMA table_info(article)"; // 尝试查询表信息,发生异常则说明数据库文件损坏
				SQLiteDataReader dataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
				if (dataReader.Read())
				{
					canOpen = true;
				}
				dataReader.Close();
			}
			catch
			{
				canOpen = false;
			}
			return canOpen;
		}

posted @ 2010-09-01 09:34  ssihc  阅读(694)  评论(0编辑  收藏  举报