

























为了便于使用SQLite.Net,参照微软企业库中数据组件的写法写了这个类,无非就是为了便于使用。
下面是代码:
代码
using System;
using System.Data;
using System.Data.Common;
using System.Data.SQLite;
using System.IO;namespace IdentifyCode.Data
{
public class Database
{
/// <summary>
/// 构造函数
/// </summary>
/// <param name="dataSource">数据文件</param>
public Database(string dataSource)
: this(dataSource, false, true)
{
}/// <summary>
/// 构造函数
/// </summary>
/// <param name="dataSource">数据文件</param>
/// <param name="readOnly">是否只读</param>
/// <param name="pooling">是否使用连接池</param>
public Database(string dataSource, bool readOnly, bool pooling)
{
if (!File.Exists(dataSource))
{
SQLiteConnection.CreateFile(dataSource);
}
SQLiteConnectionStringBuilder sb = new SQLiteConnectionStringBuilder
{
DataSource = dataSource,
Version = 3,
ReadOnly = readOnly,
Pooling = pooling
};
ConnectionString = sb.ToString();
}/// <summary>
/// 连接字符串
/// </summary>
public static string ConnectionString { get; private set; }/// <summary>
/// 获取Sql语句命令
/// </summary>
/// <param name = "query"></param>
/// <returns></returns>
public DbCommand GetSqlStringCommand(string query)
{
if (String.IsNullOrEmpty(query))
{
throw new ArgumentException("查询字符串不能为空。");
}
DbCommand command
= new SQLiteCommand(query) { CommandType = CommandType.Text };使用方法
1.带事务:
代码
Database db = new Database(dataSource);
using (SQLiteTransaction tran = db.GetTransaction())
{
using (DbCommand command = db.GetSqlStringCommand(sqlString, tran))
{
foreach (Entity entity in list)
{
db.AddInParameter(command, DbType.String, ...);
...
db.ExecuteNonQuery(command);
command.Parameters.Clear();
}
tran.Commit();
}
}
2.不带事务:
代码
Database db = new Database(dataSource);
using (DbCommand command = db.GetSqlStringCommand(sqlString))
{
foreach (Entity entity in list)
{
db.AddInParameter(command, DbType.String, ...);
...
db.ExecuteNonQuery(command);
command.Parameters.Clear();
}
}
因为SQLite默认对每个操作打开一个事务,所以如果不声明事务的话,对于任何影响超过1行数据的操作都将会消耗非常长的时间。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。