即使是做网络应用,在断线情况下,也需要考虑数据的本地存储。在SQLite出现之前,数据量大的情况下,我们一直使用ACCESS,数据量小,则文件存储。ACCESS不支持事务原子性,在断电情况下(这种情况总是会发生)会导致数据很难恢复。
一:安装
SQLITE,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统。我直接使用的是http://sqlite.phxsoftware.com/(An open source ADO.NET provider for the SQLite database engine)。下载完毕是一个EXE,安装后根目录如下:
Bin下有一个测试工具,可以查看本地运行SQLITE的各项性能指标。
二:新建数据库
安装完毕后,打开visual studio,新建数据连接,可以看到数据源多了一项SQLite。
新建连接,如下图。SQLITE的数据库,保存后是一个文件。
三:数据库维护
可以在Visual Studio中方面的维护SQLITE数据,如下图:
可以在Visual Studio中使用类似SQL查询分析器的功能,如下图:
四:混合模式
安装完毕,可以直接在项目集的引用中,多了
System.Data.SQLite
System.Data.SQLite.Linq
两个程序集,由于http://sqlite.phxsoftware.com/的System.Data.SQLite是混合模式程序集,是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集。故需要在App.config中配置如下参数。
- <?xml version="1.0" encoding="utf-8" ?>
- <configuration>
- <startup useLegacyV2RuntimeActivationPolicy="true">
- <supportedRuntime version="v4.0"/>
- </startup>
- </configuration>
五:SQLiteHelper
最后,提供一个自己写的SQLiteHelper:
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Data.SQLite;
- using System.Data;
- using System.Data.Common;
- namespace Com.Luminji.DataService.SQLHelpers
- {
- public class SQLiteHelper
- {
- /// <summary>
- /// ConnectionString样例:Datasource=Test.db3;Pooling=true;FailIfMissing=false
- /// </summary>
- public static string ConnectionString { get; set; }
- private static void PrepareCommand(SQLiteCommand cmd, SQLiteConnection conn, string cmdText, params object[] p)
- {
- if (conn.State != ConnectionState.Open)
- conn.Open();
- cmd.Parameters.Clear();
- cmd.Connection = conn;
- cmd.CommandText = cmdText;
- cmd.CommandType = CommandType.Text;
- cmd.CommandTimeout = 30;
- if (p != null)
- {
- foreach (object parm in p)
- cmd.Parameters.AddWithValue(string.Empty, parm);
- }
- }
- public static DataSet ExecuteQuery(string cmdText, params object[] p)
- {
- using (SQLiteConnection conn = new SQLiteConnection(ConnectionString))
- {
- using (SQLiteCommand command = new SQLiteCommand())
- {
- DataSet ds = new DataSet();
- PrepareCommand(command, conn, cmdText, p);
- SQLiteDataAdapter da = new SQLiteDataAdapter(command);
- da.Fill(ds);
- return ds;
- }
- }
- }
- public static int ExecuteNonQuery(string cmdText, params object[] p)
- {
- using (SQLiteConnection conn = new SQLiteConnection(ConnectionString))
- {
- using (SQLiteCommand command = new SQLiteCommand())
- {
- PrepareCommand(command, conn, cmdText, p);
- return command.ExecuteNonQuery();
- }
- }
- }
- public static SQLiteDataReader ExecuteReader(string cmdText, params object[] p)
- {
- using (SQLiteConnection conn = new SQLiteConnection(ConnectionString))
- {
- using (SQLiteCommand command = new SQLiteCommand())
- {
- PrepareCommand(command, conn, cmdText, p);
- return command.ExecuteReader(CommandBehavior.CloseConnection);
- }
- }
- }
- public static object ExecuteScalar(string cmdText, params object[] p)
- {
- using (SQLiteConnection conn = new SQLiteConnection(ConnectionString))
- {
- using (SQLiteCommand command = new SQLiteCommand())
- {
- PrepareCommand(command, conn, cmdText, p);
- return command.ExecuteScalar();
- }
- }
- }
- }
- }
六:附注
SQLite官方网站: http://www.sqlite. org/ 时第一眼看到关于SQLite的特性。
1. ACID事务
2. 零配置 – 无需安装和管理配置
3. 储存在单一磁盘文件中的一个完整的数据库
4. 数据库文件可以在不同字节顺序的机器间自由的共享
5. 支持数据库大小至2TB
6. 足够小, 大致3万行C代码, 250K
7. 比一些流行的数据库在大部分普通数据库操作要快
8. 简单, 轻松的API
9. 包含TCL绑定, 同时通过Wrapper支持其他语言的绑定
10. 良好注释的源代码, 并且有着90%以上的测试覆盖率
11. 独立: 没有额外依赖
12. Source完全的Open, 你可以用于任何用途, 包括出售它
13. 支持多种开发语言,C, PHP, Perl, Java, ASP .NET,Python
原文链接:http://www.cnblogs.com/luminji/archive/2010/12/19/1910396.html
【编辑推荐】