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#中的类型。
///
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
{
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
{
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
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命令字符串。
///
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);
}
}
}
- .NET Core系列之MemoryCache 初识
- 007手机一键Root(安机网一键Root) v3.0 官方最新版 一键ROOT您的Android手机
- 12306密码被盗了怎么办?12306密码外泄解决方法
- 12个字的qq网名
- 150M迷你型无线路由器怎么设置?
- 192.168.1.1打不开怎么办?路由器192.168.1.1打不开的原因以及解决办法
- 2011年电子报合订本 电子报 编辑部 中文 PDF版 [84M]
- 2015年1月15日小米新旗舰发布会现场图文直播
- 2016.3.1vivo Xplay5新品发布会现场视频直播 优酷直播
- 2016华为P9发布会视频直播地址 4月15日华为P9国行发布会直播