C# Winform项目中简单使用Sqlite并在DataGridview中显示

1. SQLite概述

1.1 什么是 SQLite?

SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。它是一个零配置的数据库,这意味着与其他数据库不一样,您不需要在系统中配置。

1.2 为什么要用 SQLite?

  • 不需要一个单独的服务器进程或操作的系统(无服务器的)。
  • SQLite 不需要配置,这意味着不需要安装或管理。
  • 一个完整的 SQLite 数据库是存储在一个单一的跨平台的磁盘文件。
  • SQLite 是非常小的,是轻量级的,完全配置时小于 400KiB,省略可选功能配置时小于250KiB。
  • SQLite 是自给自足的,这意味着不需要任何外部的依赖。
  • SQLite 事务是完全兼容 ACID 的,允许从多个进程或线程安全访问。
  • SQLite 支持 SQL92(SQL2)标准的大多数查询语言的功能。
  • SQLite 使用 ANSI-C 编写的,并提供了简单和易于使用的 API。
  • SQLite 可在 UNIX(Linux, Mac OS-X, Android, iOS)和 Windows(Win32, WinCE, WinRT)中运行。

1.3 相关学习资源

SQLite官网:https://www.sqlite.org/
SQLite教程:https://www.runoob.com/sqlite/sqlite-tutorial.html

2. Microsoft.Data.Sqlite简单介绍和安装

2.1 概述

操作sqlite数据库之前你必须了解:ADO.NET、数据提供程序等知识点。目前在Winform项目中有两个常用的库:System.Data.Sqlite和Microsoft.Data.Sqlite。

  • System.Data.SQLite 的一个优点是它是由 SQLite 团队开发的,该团队已声明长期致力于支持它。支持多种数据类型,但是比较旧。
  • Microsoft.Data.Sqlite 的一个优点是它是由 Microsoft 开发的,并且可以假设它已通过 Entity Framework, .NET Core 等进行了良好的测试。只支持4中sqlite数据类类型,比较新。

在我们的测试项目中,使用的是Microsoft.Data.Sqlite,相关详细介绍可见官网:https://learn.microsoft.com/zh-cn/dotnet/navigate/data-access/

2.2 安装

在项目中,打开Nuget,搜索Microsoft.Data.Sqlite,点击【安装】
在这里插入图片描述

3. Winform测试项目

目标:实现生产数据(总产量、月产量、班产量)在数据库中的记录,并在DataGridview中根据时间戳显示相关记录。

1 初始化数据库连接

//设置连接参数
string connectstr = new SqliteConnectionStringBuilder()
{
    DataSource= "ProductRecords.db",
    Mode = SqliteOpenMode.ReadWriteCreate
}.ToString();
//连接到服务器
connection = new SqliteConnection(connectstr);

if (connection.State == System.Data.ConnectionState.Closed)
{
	//打开连接
    connection.Open();
	//创建表命令
    var createTableSqlStr = @"CREATE TABLE IF NOT EXISTS ProdTable (TimeStamp Datetime PRIMARY Key, Total INTEGER, Month INTEGER, Day INTEGER)";
    
    var createTablecmd = new SqliteCommand(createTableSqlStr, connection);
    createTablecmd.ExecuteReader();//执行表创建
}

2 增加数据记录条

public void AddRecord(DateTime stamp, uint total, uint month, uint day)
{
    if (connection.State == System.Data.ConnectionState.Open)
    {
        var addcmd = new SqliteCommand();
        addcmd.Connection = connection;
        addcmd.CommandText = "INSERT INTO ProdTable VALUES (@Stamp, @Total, @Month, @Day)";
        addcmd.Parameters.AddWithValue("@Stamp", stamp);
        addcmd.Parameters.AddWithValue("@Total", total);
        addcmd.Parameters.AddWithValue("@Month", month);
        addcmd.Parameters.AddWithValue("@Day", day);
        addcmd.ExecuteReader();
        RecordsChanged?.Invoke(null, EventArgs.Empty);
    }           
}

3. 筛选数据记录形成DataTable

public DataTable getDataTable(string startstamp)
{    
    if (connection.State == ConnectionState.Open)
    {
        string filterstr = "SELECT * FROM ProdTable";
        if(!string.IsNullOrEmpty(startstamp))
        {
        	//根据时间戳筛选表格
            filterstr = string.Format("SELECT * FROM ProdTable WHERE TimeStamp>'{0}'", startstamp);
        }
        SqliteCommand cmd = new SqliteCommand(filterstr, connection);
        SqliteDataReader sdr = cmd.ExecuteReader();

        DataTable data = new DataTable();
        data.Load(sdr, LoadOption.OverwriteChanges);

        return data;
    }
    else
    {
        return null;
    }
}

4. DataGridview中显示

//近一个月的时间戳
string starttime = DateTime.Now.AddMonths(-1).ToString("yyyy-MM-dd HH:mm:ss");
//获取DataTable
DataTable datatable = DataBaseManager.GetInstance.getDataTable(starttime);
//将获取到的DataTable赋值给DataGridview的DataSource
prodRecordsView.DataSource = datatable;

【附录】
示例程序:WinFormsSqliteApp

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-10 21:34:04       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-10 21:34:04       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-10 21:34:04       58 阅读
  4. Python语言-面向对象

    2024-07-10 21:34:04       69 阅读

热门阅读

  1. 计算机网络-HTTP常见面试题

    2024-07-10 21:34:04       22 阅读
  2. c++实战-多子棋

    2024-07-10 21:34:04       28 阅读
  3. 访问者模式在金融业务中的应用及其框架实现

    2024-07-10 21:34:04       20 阅读
  4. PyTorch清理CPU缓存

    2024-07-10 21:34:04       19 阅读
  5. qt 自定义信号和槽举例

    2024-07-10 21:34:04       21 阅读
  6. 贪吃蛇代码python实现

    2024-07-10 21:34:04       23 阅读
  7. iOS开发语言基础与Xcode工具初探

    2024-07-10 21:34:04       25 阅读
  8. 【面试题】Reactor模型

    2024-07-10 21:34:04       22 阅读
  9. nvm安装node一直没有npm

    2024-07-10 21:34:04       23 阅读
  10. 深入理解model.eval()与torch.no_grad()

    2024-07-10 21:34:04       20 阅读