using System; 
using System.Data; 
using System.Data.SQLite; 
using System.Collections.Generic; 
using System.IO; 
namespace FileSystemWatcthrDemo.DataHelper 
{ 
public class SqLiteHelper 
{ 
/// <summary> 
/// ConnectionString样例:Datasource=Test.db3;Pooling=true;FailIfMissing=false 
/// </summary> 
public static string ConnectionString 
{ 
get 
{ 
return @"Data source= "+DataBasePath+";"; 
} 
set { throw new NotImplementedException(); } 
} 
public static string DataBasePath 
{ 
get { return "SpringYang.db";}; 
} 
private static object lockObject = new object(); 
private static void PrepareCommand(SQLiteCommand cmd, SQLiteConnection conn, string cmdText, List<SQLiteParameter> parameters) 
{ 
if (conn.State != ConnectionState.Open) 
conn.Open(); 
cmd.Parameters.Clear(); 
cmd.Connection = conn; 
cmd.CommandText = cmdText; 
cmd.CommandType = CommandType.Text; 
cmd.CommandTimeout = 30; 
foreach (var parameter in parameters) 
{ 
cmd.Parameters.Add(parameter); 
} 
} 
public static DataSet ExecuteQuery(string cmdText, List<SQLiteParameter> parameters) 
{ 
lock (lockObject) 
{ 
using (SQLiteConnection conn = new SQLiteConnection(ConnectionString)) 
{ 
using (SQLiteCommand command = new SQLiteCommand()) 
{ 
DataSet ds = new DataSet(); 
PrepareCommand(command, conn, cmdText, parameters); 
SQLiteDataAdapter da = new SQLiteDataAdapter(command); 
da.Fill(ds); 
return ds; 
} 
} 
} 
} 
public static int ExecuteNonQuery(string cmdText, List<SQLiteParameter> parameters) 
{ 
lock (lockObject) 
{ 
using (SQLiteConnection conn = new SQLiteConnection(ConnectionString)) 
{ 
using (SQLiteCommand command = new SQLiteCommand()) 
{ 
PrepareCommand(command, conn, cmdText, parameters); 
return command.ExecuteNonQuery(); 
} 
} 
} 
} 
public static SQLiteDataReader ExecuteReader(string cmdText, List<SQLiteParameter> parameters) 
{ 
lock (lockObject) 
{ 
SQLiteConnection conn = new SQLiteConnection(ConnectionString); 
SQLiteCommand command = new SQLiteCommand(); 
PrepareCommand(command, conn, cmdText, parameters); 
SQLiteDataReader sqLiteDataReader = command.ExecuteReader(); 
return sqLiteDataReader; 
} 
} 
public static object ExecuteScalar(string cmdText, List<SQLiteParameter> parameters) 
{ 
lock (lockObject) 
{ 
using (SQLiteConnection conn = new SQLiteConnection(ConnectionString)) 
{ 
using (SQLiteCommand command = new SQLiteCommand()) 
{ 
PrepareCommand(command, conn, cmdText, parameters); 
return command.ExecuteScalar(); 
} 
} 
} 
} 
public static void CreateDataBase() 
{ 
if (!File.Exists(DataBasePath)) 
SQLiteConnection.CreateFile(DataBasePath); 
CreateTable(); 
} 
public static void CreateTable() 
{ 
ExecuteNonQuery(CodeDetailTabale, null); 
} 
private static string CodeDetailTabale 
{ 
get 
{ 
return @"CREATE TABLE [CodeDetail] ( 
[CdType] [nvarchar] (10) NOT NULL , 
[CdCode] [nvarchar] (20) NOT NULL , 
[CdString1] [ntext] NOT NULL , 
[CdString2] [ntext] NOT NULL , 
[CdString3] [ntext] NOT NULL, 
PRIMARY KEY (CdType,CdCode) 
) ;"; 
} 
} 
} 
} 
示例讲解
A、使用到自己定义的锁private static object lockObject = new object();
B、使用完连接后都进行关闭操作。使用了using
C、创建数据库命令:SQLiteConnection.CreateFile(DataBasePath);
最后再讲解个Insert or Replace into的经典用法
复制代码 代码如下:
 
Insert or Replace INTO User(ID, Name,Age) Select old.ID,new.Name,new.Age From 
(select 'Spring Yang' as Name, '25' as Age) as new left join (Select ID,Name from User where Name = 'Spring Yang' ) as old on old.Name = new.Name 
