C#调用SQLite的详细代码举例

  using System;

  using System.Collections.Generic;

  using System.Data;

  using System.Data.SQLite;

  using System.Linq;

  using System.IO;

  namespace SqliteTest

  {

  public class SQLiteHelper

  {

  /*******条件语法*******/

  //1.简单的删除条件:Age > 40

  //2.使用逻辑运算符:Age > 40 And Country = 'USA'

  //3.使用IN运算符:IN运算符用于指定列的值必须属于一个特定的值列表:Category IN ('Electronics', 'Books', 'Toys')

  //4.使用LIKE运算符:LIKE运算符用于在列的值中搜索特定的模式(通常用于字符串) Username LIKE 'j%';

  //5.使用BETWEEN运算符:OrderDate BETWEEN '2023-01-01' AND '2023-03-31'

  //6.使用IS NULL 或 IS NOT NULL:Manager IS NULL

  // 用于与SQLite数据库交互的连接对象

  private SQLiteConnection connection;

  // 操作的表名

  private string tableName;

  // 表的列名,以逗号分隔的字符串

  private string columnNameStr;

  //表的列名

  private string[] columnNames;

  ///

  /// 通过指定的数据库文件路径初始化SQLiteHelper类的实例。

  ///

  /// 数据库文件的路径。

  public SQLiteHelper(string dbAddress)

  {

  // 创建SQLite连接字符串构建器,并设置数据源和版本

  var connectionStringBuilder = new SQLiteConnectionStringBuilder

  {

  DataSource = dbAddress,

  Version = 3

  };

  // 通过连接字符串构建器创建SQLite连接对象

  connection = new SQLiteConnection(connectionStringBuilder.ConnectionString);

  // 打开数据库连接

  connection.Open();

  }

  ///

  /// 关闭数据库连接。

  ///

  public void Close()

  {

  // 如果连接不为空且状态为打开,则关闭连接

  if (connection != null && connection.State == ConnectionState.Open)

  {

  connection.Close();

  }

  }

  ///

  /// 创建表,包括指定的列和类型。

  ///

  /// 要创建的表名。

  /// 是否自动添加自增ID。

  /// 列名数组。

  /// 列类型数组。

  public void CreateTable(string tableName, bool hasAutoIncrementId, string[] columns, Type[] columnTypes)

  {

  // 设置当前操作的表名

  this.tableName = tableName;

  // 设置列名字符串

  columnNameStr = string.Join(",", columns);

  columnNames = columns;

  // 创建列定义列表

  var columnDefinitions = new List();

  // 如果需要自动添加ID列

  if (hasAutoIncrementId)

  {

  columnDefinitions.Add("ID INTEGER PRIMARY KEY AUTOINCREMENT");

  }

  // 遍历列类型数组,添加列定义

  for (int i = 0; i < columns.Length; i++)

  {

  var columnName = columns[i];

  var columnTypeStr = GetColumnType(columnTypes[i]);

  columnDefinitions.Add($"{columnName} {columnTypeStr}");

  }

  // 构建列定义字符串

  string columnDefinitionsStr = string.Join(", ", columnDefinitions);

  // 构建创建表的SQL语句

  string sqlStr = $"CREATE TABLE IF NOT EXISTS {tableName} ({columnDefinitionsStr});";

  // 执行非查询SQL命令创建表

  ExecuteNonQuery(sqlStr);

  }

  ///

  /// 删除当前的表

  ///

  public void DeleteTable()

  {

  string sql = $"DROP TABLE IF EXISTS {tableName};";

  ExecuteNonQuery(sql);

  }

  ///

  /// 创建索引以提高查询效率,在创建表之后使用

  ///

  /// 要创建索引的列名。

  public void CreateIndex(string columnName)

  {

  string sql = $"CREATE INDEX IF NOT EXISTS {columnName} ON {tableName} ({columnName});";

  ExecuteNonQuery(sql);

  }

  ///

  /// 销毁指定的索引。

  ///

  /// 要删除的索引的名称。

  public void DeleteIndex(string columnName)

  {

  string sql = $"DROP INDEX IF EXISTS {columnName};";

  ExecuteNonQuery(sql);

  }

  ///

  /// 获取C#类型对应的SQLite类型字符串。

  ///

  /// C#中的类型。

  /// 对应的SQLite类型字符串。

  private string GetColumnType(Type type)

  {

  // 根据C#类型返回对应的SQLite类型字符串

  switch (Type.GetTypeCode(type))

  {

  case TypeCode.Int32:

  case TypeCode.UInt32:

  case TypeCode.Int64:

  case TypeCode.UInt64:

  return "INTEGER";

  case TypeCode.Double:

  return "REAL";

  case TypeCode.Single:

  return "FLOAT";

  case TypeCode.DateTime:

  return "DATETIME";

  case TypeCode.Boolean:

  return "BOOLEAN";

  default:

  return "TEXT";

  }

  }

  ///

  /// 向表中插入记录。

  ///

  /// 要插入的值的数组。

  /// 插入操作影响的行数。

  public int Insert(params object[] values)

  {

  // 创建参数列表并初始化

  var parameters = values.Select((value, index) => new SQLiteParameter($"@{index}", value)).ToArray();

  // 构建参数化SQL语句

  var parameterNames = string.Join(", ", parameters.Select(p => p.ParameterName));

  // 构建插入数据的SQL语句

  string sql = $"INSERT INTO {tableName} ({columnNameStr}) VALUES ({parameterNames});";

  // 执行非查询SQL命令并返回影响的行数

  return ExecuteNonQuery(sql, parameters);

  }

  ///

  /// 获取多条件的字符串组合

  ///

  /// True为And逻辑,False 为 OR 逻辑

  ///

  ///

  ///

  ///

  public string GetMultiContidion(bool bAnd, string condition1, string condition2, params string[] conditions)

  {

  if (bAnd)

  {

  if (conditions != null && conditions.Length > 0)

  {

  string str1 = string.Join(" And ", conditions);

  return string.Join(" And ", condition1, condition2, str1);

  }

  else

  {

  return string.Join(" And ", condition1, condition2);

  }

  }

  else

  {

  if (conditions != null && conditions.Length > 0)

  {

  string str1 = string.Join(" OR ", conditions);

  return string.Join(" OR ", condition1, condition2, str1);

  }

  else

  {

  return string.Join(" OR ", condition1, condition2);

  }

  }

  }

  ///

  /// 根据条件删除记录。

  ///

  /// 删除条件。

  /// 删除操作影响的行数。

  public int Delete(string condition)

  {

  // 构建删除数据的SQL语句

  string sql = $"DELETE FROM {tableName} WHERE {condition};";

  // 执行非查询SQL命令并返回影响的行数

  return ExecuteNonQuery(sql);

  }

  ///

  /// 更新表中的记录。

  ///

  /// 要更新的列名。

  /// 新的值。

  /// 更新条件。

  /// 更新操作影响的行数。

  public int Update(string columnName, object value, string condition)

  {

  // 构建更新数据的SQL语句

  string query = $"UPDATE {tableName} SET {columnName} = @{value} WHERE {condition};";

  // 创建参数对象并添加到SQL命令中

  var parameter = new SQLiteParameter(value.ToString(), value);

  // 执行非查询SQL命令并返回影响的行数

  return ExecuteNonQuery(query, parameter);

  }

  ///

  /// 根据条件查询列的值。

  ///

  /// 要查询的列名。

  /// 查询条件。

  /// 查询结果的值。

  public object GetValue(string columnName, string condition)

  {

  // 构建查询数据的SQL语句

  string selectQuery = $"SELECT {columnName} FROM {tableName} WHERE {condition};";

  // 执行查询SQL命令并返回查询结果

  return ExecuteScalar(selectQuery);

  }

  ///

  /// 根据条件查询列的值。

  ///

  /// 要查询的列名。

  /// 查询条件。

  /// 查询结果的值。

  public List GetValues(string columnName, string condition)

  {

  List values = new List();

  string selectQuery = "";

  if (string.IsNullOrWhiteSpace(condition))

  {

  selectQuery = $"SELECT {columnName} FROM {tableName};";

  }

  else

  {

  selectQuery = $"SELECT {columnName} FROM {tableName} WHERE {condition};";

  }

  try

  {

  using (var reader = ExecuteQuery(selectQuery))

  {

  while (reader.Read())

  {

  values.Add(reader[columnName]);

  }

  }

  }

  catch (Exception ex)

  {

  LogException(ex);

  }

  return values;

  }

  ///

  /// 根据条件获取所有行的数据

  ///

  ///

  ///

  public List> GetRowDatas(string condition)

  {

  List> values = new List>();

  string selectQuery = "";

  if (string.IsNullOrWhiteSpace(condition))

  {

  selectQuery = $"SELECT {columnNameStr} FROM {tableName};";

  }

  else

  {

  selectQuery = $"SELECT {columnNameStr} FROM {tableName} WHERE {condition};";

  }

  try

  {

  using (var reader = ExecuteQuery(selectQuery))

  {

  while (reader.Read())

  {

  Dictionary dict = new Dictionary();

  foreach (var columnName in columnNames)

  {

  dict.Add(columnName, reader[columnName]);

  }

  values.Add(dict);

  }

  }

  }

  catch (Exception ex)

  {

  LogException(ex);

  }

  return values;

  }

  ///

  /// 执行非查询SQL命令(如INSERT, UPDATE, DELETE)。

  ///

  /// SQL命令字符串。

  /// SQL命令参数数组。

  /// 命令执行影响的行数。

  public int ExecuteNonQuery(string sql, params SQLiteParameter[] parameters)

  {

  try

  {

  // 使用SQLiteCommand对象执行SQL命令

  using (var command = connection.CreateCommand())

  {

  command.CommandText = sql;

  if (parameters != null)

  {

  command.Parameters.AddRange(parameters);

  }

  return command.ExecuteNonQuery();

  }

  }

  catch (Exception ex)

  {

  // 记录异常信息到日志文件

  LogException(ex);

  return 0;

  }

  }

  ///

  /// 执行查询SQL命令(如SELECT),返回SQLiteDataReader对象。

  ///

  /// SQL命令字符串。

  /// SQLiteDataReader对象。

  private SQLiteDataReader ExecuteQuery(string sql)

  {

  try

  {

  using (var command = connection.CreateCommand())

  {

  command.CommandText = sql;

  return command.ExecuteReader();

  }

  }

  catch (Exception ex)

  {

  LogException(ex);

  return null;

  }

  }

  ///

  /// 执行查询SQL命令(如SELECT),返回单个结果。

  ///

  /// SQL命令字符串。

  /// 查询结果的单个值。

  private object ExecuteScalar(string sql)

  {

  try

  {

  using (var command = connection.CreateCommand())

  {

  command.CommandText = sql;

  return command.ExecuteScalar();

  }

  }

  catch (Exception ex)

  {

  LogException(ex);

  return null;

  }

  }

  ///

  /// 记录异常信息到日志文件。

  ///

  /// 要记录的异常对象。

  private void LogException(Exception ex)

  {

  // 将异常信息追加到日志文件中

  string errorMessage = $"发生错误:{ex.Message}{Environment.NewLine}{ex.StackTrace}";

  File.AppendAllText("error.log", errorMessage);

  }

  }

  }