C# SQLite数据库入门使用说明

作者:任前程 时间:2024-01-25 20:01:20 

前言

我们在开发应用是经常会需要用到一些数据的存储,存储的方式有多种,使用数据库是一种比较受大家欢迎的方式。但是对于一些小型的应用,如一些移动APP,通常的数据库过于庞大,而轻便的SQLite则能解决这一问题。不但操作方便,而且只需要要一个文件即可,在这里我们来说一说使用C#语言操作SQLite数据库。

一、NuGet引入SQLite库

在VS菜单:工具→NuGet包管理器→管理解决方案的NuGet程序包 打开NuGet解决方案窗口。

搜索 sqlite,选择官方的库安装到指定的项目中。:

C# SQLite数据库入门使用说明

提示:System.Data.SQLite 分为 x86 和 x64 版本,这里推荐使用NuGet自动安装。使用 Any CPU 编译的时候,会自动拷贝32位和64位 Interop DLL文件到子目录中。程序运行的时候会根据电脑的运行环境自动选择合适的dll。

C# SQLite数据库入门使用说明

二、DBHelper类库


using System.Collections.Generic;
using System.Data;
using System.Data.SQLite;
using System.Configuration;
using System.Data.SqlClient;
//using MySql.Data.MySqlClient;

namespace ConsoleApp5
{
public class DBHelper
{
 private readonly static string connStr = ConfigurationManager.ConnectionStrings["Data Source=mesclient.sqlite;Version=3"].ConnectionString;

//获取 appsetting 设置的值
 //private readonly static string appStr = ConfigurationManager.AppSettings["TestKey"];

//获取 connection 对象
 public static IDbConnection CreateConnection()
 {
  IDbConnection conn = new SQLiteConnection(connStr);//MySqlConnection //SqlConnection
  conn.Open();
  return conn;
 }

//执行非查询语句
 public static int ExecuteNonQuery(IDbConnection conn, string sql, Dictionary<string, object> parameters)
 {
  using (IDbCommand cmd = conn.CreateCommand())
  {
   cmd.CommandText = sql;
   foreach (KeyValuePair<string, object> keyValuePair in parameters)
   {
    IDbDataParameter parameter = cmd.CreateParameter();
    parameter.ParameterName = keyValuePair.Key;
    parameter.Value = keyValuePair.Value;
    cmd.Parameters.Add(parameter);
   }
   return cmd.ExecuteNonQuery();
  }
 }

//执行非查询语句-独立连接
 public static int ExecuteNonQuery(string sql, Dictionary<string, object> parameters)
 {
  using (IDbConnection conn = CreateConnection())
  {
   return ExecuteNonQuery(conn, sql, parameters);
  }
 }

//查询首行首列
 public static object ExecuteScalar(IDbConnection conn, string sql, Dictionary<string, object> parameters)
 {
  using (IDbCommand cmd = conn.CreateCommand())
  {
   cmd.CommandText = sql;
   foreach (KeyValuePair<string, object> keyValuePair in parameters)
   {
    IDbDataParameter parameter = cmd.CreateParameter();
    parameter.ParameterName = keyValuePair.Key;
    parameter.Value = keyValuePair.Value;
    cmd.Parameters.Add(parameter);
   }
   return cmd.ExecuteScalar();
  }
 }

//查询首行首列-独立连接
 public static object ExecuteScalar(string sql, Dictionary<string, object> parameters)
 {
  using (IDbConnection conn = CreateConnection())
  {
   return ExecuteScalar(conn, sql, parameters);
  }
 }

//查询表
 public static DataTable ExecuteQuery(IDbConnection conn, string sql, Dictionary<string, object> parameters)
 {
  DataTable dt = new DataTable();
  using (IDbCommand cmd = conn.CreateCommand())
  {
   cmd.CommandText = sql;
   foreach (KeyValuePair<string, object> keyValuePair in parameters)
   {
    IDbDataParameter parameter = cmd.CreateParameter();
    parameter.ParameterName = keyValuePair.Key;
    parameter.Value = keyValuePair.Value;
    cmd.Parameters.Add(parameter);
   }
   using (IDataReader reader = cmd.ExecuteReader())
   {
    dt.Load(reader);
   }
  }

return dt;
 }

//查询表--独立连接
 public static DataTable ExecuteQuery(string sql, Dictionary<string, object> parameters)
 {
  using (IDbConnection conn = CreateConnection())
  {
   return ExecuteQuery(conn, sql, parameters);
  }
 }
}
}

三、基本使用

1. 判断数据文件是否存在


/// <summary>
/// 检查数据库是否存在不存在创建
/// </summary>
/// <returns></returns>
public static bool CheckDataBase()
{
try
{
 //判断数据文件是否存在
 bool dbExist = File.Exists("mesclient.sqlite");
 if (!dbExist)
 {
  SQLiteConnection.CreateFile("mesclient.sqlite");
 }

return true;
}
catch (Exception)
{
 return false;
}
}

2. 判断表是否存在


/// <summary>
/// 检查数据表是否存在,不存在创建
/// </summary>
/// <returns></returns>
public static bool CheckDataTable(string connStr)
{
try
{
 using (SQLiteConnection conn = new SQLiteConnection(connStr))
 using (SQLiteCommand cmd = conn.CreateCommand())
 {
  conn.Open();
  cmd.CommandText = "SELECT count(*) FROM sqlite_master WHERE type = 'table' AND name = 'serverinfo'";
  object ob = cmd.ExecuteScalar();
  long tableCount = Convert.ToInt64(ob);
  if (tableCount == 0)
  {
   //创建表
   cmd.CommandText = @"
  BEGIN;
   create table serverinfo
   (Id INTEGER PRIMARY KEY AUTOINCREMENT,Name TEXT,
   Url text,DelayTime integer,UsageCounter INTEGER,
    Status integer,CreateTime DATETIME);
   CREATE UNIQUE INDEX idx_serverInfo ON serverinfo (Name);
  COMMIT;
  ";
   //此语句返回结果为0
   int rowCount = cmd.ExecuteNonQuery();
   return true;
  }
  else if (tableCount > 1)
  {
   return false;
  }
  else
  {
   return true;
  }
 }
}
catch (Exception ex)
{
 return false;
}
}

3. 查询


string sql = "SELECT * FROM serverinfo WHERE Name =@ServerName AND Url = @Url and date(CreateTime)=date(@Date);";
Dictionary<string, object> parameters = new Dictionary<string, object>();
parameters.Add("ServerName",endpointElement.Name);
parameters.Add("Url", endpointElement.Address);
parameters.Add("Date", DateTime.Now.ToString("yyyy-MM-dd"));
DataTable dt=SqliteHelper.ExecuteQuery(connStr, sql, parameters);
if (dt.Rows.Count>0)
{
UsageCounter = dt.Rows[0].Field<long>("UsageCounter");
GetTime = dt.Rows[0].Field<DateTime>("CreateTime");
}

4. 新增/修改


//存在更新,不存在插入
string updateSql = "REPLACE INTO serverinfo(Name,Url,DelayTime,UsageCounter, Status,CreateTime) VALUES(@Name,@Url,@DelayTime,@UsageCounter,@Status, @CreateTime)";
Dictionary<string, object> ups = new Dictionary<string, object>();
ups.Add("Name", name);
ups.Add("Url", url);
ups.Add("DelayTime", delayTime);
ups.Add("UsageCounter", usageCounter);
ups.Add("Status", status);
ups.Add("CreateTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
int count= SqliteHelper.ExecuteNonQuery(connStr, updateSql, ups);
if (count>0)
{
return true;
}
else
{
return false;
}

5. 删除


//删除记录
string updateSql =
"DELETE FROM serverinfo where content=@Content and flag=@Flag;";
Dictionary<string, object> updateParameters = new Dictionary<string, object>();
updateParameters.Add("Content", Content);
updateParameters.Add("Flag", Flag);
int count = SqliteHelper.ExecuteNonQuery(connStr, updateSql, updateParameters);
if (count > 0)
{
return true;
}
else
{
return false;
}

四、参考文章

  • Create SQLite Database and table

  • Writing to a SQLite Database in C#

  • SQLite with VS2012 and .NET 4.5 — ANY CPU Build

  • how to check if a table exists in C#

  • SQLite auto increment issue

  • Inserting a date to SQLite

  • SQLite REPLACE Statement

  • sqlite select with condition on date

  • Using SQLite how do I index columns in a CREATE TABLE statement?

来源:https://renqiancheng.com/2018/11/C-SQLite-数据库使用说明.html

标签:c#,sqlite,数据库
0
投稿

猜你喜欢

  • 什么是XSLT,什么是XPath

    2008-01-21 13:12:00
  • 浅析PHP中的字符串编码转换(自动识别原编码)

    2023-09-08 08:04:44
  • 简单介绍Python的轻便web框架Bottle

    2023-06-26 06:19:06
  • python通过伪装头部数据抵抗反爬虫的实例

    2022-03-11 09:56:04
  • SQL CASE 表达式的具体使用

    2024-01-28 09:57:29
  • Pycharm及python安装详细教程(图解)

    2023-01-06 00:26:00
  • Python中的集合一起来学习一下

    2022-05-01 05:06:59
  • golang中字符串MD5生成方式总结

    2024-04-23 09:41:05
  • SQL Join的一些总结(实例)

    2024-01-14 04:28:16
  • Python如何截图保存的三种方法(小结)

    2023-08-24 22:17:19
  • 在Python的Bottle框架中使用微信API的示例

    2022-06-02 00:12:47
  • 在Python的web框架中中编写日志列表的教程

    2021-11-06 05:15:29
  • python输出结果刷新及进度条的实现操作

    2022-09-24 15:13:15
  • Python xlrd excel文件操作代码实例

    2021-05-19 21:52:18
  • python飞机大战pygame游戏框架搭建操作详解

    2022-09-24 05:49:51
  • Python 操作SQLite数据库的示例

    2024-01-28 00:23:59
  • 用python标准库difflib比较两份文件的异同详解

    2023-01-29 07:34:29
  • Javascript的常规数组和关联数组对比小结

    2024-04-28 09:47:29
  • python中使用xlrd、xlwt操作excel表格详解

    2023-06-25 03:59:51
  • SQL汇总统计与GROUP BY过滤查询实现

    2024-01-22 20:21:43
  • asp之家 网络编程 m.aspxhome.com