即使是做网络应用,在断线情况下,也需要考虑数据的本地存储。在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的数据库,保存后是一个文件。
三:数据库维护
可以在VS中方面的维护SQLITE数据,如下图:
可以在VS中使用类似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样例:Data Source=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();
}
}
}
}
}
本文出处:
http://www.cnblogs.com/luminji/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

