Visual studio C#中通过nuget安装sqlite库及C#中sliqte的用法

以前在Visual studio 的2017版中讲过如何使用sqlite,这里我们再次说说如何使用sqlite,以前Nuget使用还不是很流行很普及,大多数人不知道,但随着VS的升级,Nuget成为安装插件或者引用库文件标准的获取手段,所以这里我们用nuget来安装sqlite。

文章目录

  • 一、库文件的准备
  • 二、sqlite的使用方法
    • 1、基础的使用方法
    • 2、关键对象SQLiteCommand 的说明
  • 三、为sqlite编辑辅助类
    • 1、SqliteAssist类的实现
    • 2、sqliteAssist调用

文章原出处: https://blog.csdn.net/haigear/article/details/130022415

一、库文件的准备

在这里插入图片描述
接下来,也要安装system.data.sqlite,否则也还是找不到运行sqlite的必须的名称空间和库文件。
在这里插入图片描述
通过nuget安装好上面的库后,我们的sqlite在C#中就可以顺利的使用了。

二、sqlite的使用方法

1、基础的使用方法

任何数据库的使用方法基本都一样,只不过是连接的字符串格式会不太一样,比如sql server,mysql都会有其连接的服务器地址,即使是本地安装的数据库都必须给出服务器地址。但sqlite不一样,她不需要服务器。所以可以直接像连接access的mdb文件一样连接。

我们来看一个典型的两段代码,一个是读取记录的代码,一个是添加记录的代码:

//读取记录代码 
void loadSqliteRecord(int x=0)
{
//设置连接字符串
string constr = "Data Source=../data/MyDataBase.db;";
//设置SQL查询语句
string sql = "select * from TestTab";
//创建连接对象
SQLiteConnection con = new SQLiteConnection(constr);
//创建命令对象
SQLiteCommand cmd = new SQLiteCommand(sql, con);
con.Open();
SQLiteDataReader reader = cmd.ExecuteReader();
if (reader.HasRows)
while (reader.Read())
//向下拉框中添加登录名列表
comboBox1.Items.Add(reader.GetString(x));
con.Close();
cmd = null;
con.Dispose();
}

//添加记录代码
void insertSqliteRecord(string id)
{
Random ra = new Random(20);//这个随机数不是数据库调用的必要语句
string constr = "Data Source=../data/MyDataBase.db;";
//设置SQL查询语句
string sql = "insert into TestTab(id,name,age) values('"+id+"','student0"+ id.TrimStart("stu".ToCharArray())+"','"+ra.Next(16,20)+"')";
//创建连接对象
SQLiteConnection con = new SQLiteConnection(constr);
//创建命令对象
SQLiteCommand cmd = new SQLiteCommand(sql, con);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
cmd = null;
con.Dispose();

通过以上的代码,我们中知道,操作数据库之前,必须要先建立连接,依靠SQLiteConnection 对象建立连接。都依靠SQLiteCommand 对象来执行sql查询语句,无论是增删改查中的哪一种。

2、关键对象SQLiteCommand 的说明

SQLiteConnection 无非就是提供一个连接对象,可供后续的操作,这里就没有必要深究了,用就是了。但这里要说明一下SQLiteCommand 对象,因为一些关键的直接与数据打交道的操作都是与他分不开。

1、SQLiteCommand 提供的ExecuteReader方法可以返回一个SQLiteDataReader 对象,以供查询数据。
3、SQLiteCommand 提供的ExecuteNonQuery方法,直接执行一些无须返回查询结果的sql语句,比如增删改。

有了以上两种方法基本就全了,常规的所有操作(增删改查)都可以顺利的完成了。

三、为sqlite编辑辅助类

我们不能每次需要对数据进行操作的时候,来一次临时的数据连接,然后写一大堆的准备代码,实际,操作起来,对于增删改查来说,就是sql语句不同,所以我们完全可以自己编写一个辅助静态类,直接调用,将sql语句需要的具体内容以参数的形式传入即可得到我们需要的结果。
以下是代码实现:

1、SqliteAssist类的实现

using System.Data.SQLite;

public class SqliteAssist
{
    private readonly string connectionString;

    public SqliteAssist(string dbPath)
    {
        // 设置SQLite连接字符串
        connectionString = $"Data Source={dbPath};Version=3;";
    }

    // 执行查询并返回结果集
    public SQLiteDataReader getQueryReader(string query)
    {
        SQLiteConnection connection = new SQLiteConnection(connectionString);
        SQLiteCommand command = new SQLiteCommand(query, connection);
        connection.Open();
        SQLiteDataReader reader = command.ExecuteReader();
        return reader;
    }

    // 执行非查询语句,如INSERT、UPDATE、DELETE等
    public int recordChange(string query)
    {
        SQLiteConnection connection = new SQLiteConnection(connectionString);
        SQLiteCommand command = new SQLiteCommand(query, connection);
        connection.Open();
        int result = command.ExecuteNonQuery();
        return result;
    }

    // 执行查询并返回单个值
    public object getChangeCount(string query)
    {
        SQLiteConnection connection = new SQLiteConnection(connectionString);
        SQLiteCommand command = new SQLiteCommand(query, connection);
        connection.Open();
        object result = command.ExecuteScalar();
        return result;
    }
}

2、sqliteAssist调用

string dbPath = "mytest.db";
sqliteAssist sa= new sqliteAssist(dbPath);

// 查询操作,我们这里通过getQueryReader获取了一个SQLiteDataReader
SQLiteDataReader reader = sqliteHelper.getQueryReader("SELECT * FROM users");
while (reader.Read())
{
    Console.WriteLine($"ID: {reader["id"]}, Name: {reader["name"]}");
}

// 插入一条记录(这里的recordChange中的参数可以是增删改三种操作的任意一个)
int affectedRows = sqliteHelper.recordChange("INSERT INTO users (name) VALUES ('John')");
Console.WriteLine($"Rows affected: {affectedRows}");

// 返回所更新记录的个数
object count = sqliteHelper.getChangeCount("SELECT COUNT(*) FROM users");
Console.WriteLine($"Count: {count}");

当然,你可以根据你的实际业务需求去为你的sqliteAssist类增添更多的适用快捷的函数,这里只是举例而已,没有更多的实际业务领域。

文章随时可能更新,转载请注明文章原出处:文章原出处:https://blog.csdn.net/haigear/article/details/130022415

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/10093.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Qt Quick - TabBar

Qt Quick - TabBar使用总结一、概述二、调整选项卡三、Flickable标签三、定制化一、概述 TabBar其实就是选项卡,TabBar是由TabButton控件填充,TabBar可以与任何提供currentIndex属性的布局或容器控件一起使用,如StackLayout或SwipeView。Tab…

Vector - CAPL - CAN x 总线信息获取

在CAN&CANFD测试中,我们经常需要获取到CAN总线的负载、错误帧、过载帧、发送错误等等CAN总线上面的信息,这些信息如此重要,但是如果真的要写代码去实现也是相当不易的,那我们该如何去获取到的呢?下面我们就来一起看…

Object方法

私人博客 许小墨のBlog —— 菜鸡博客直通车 系列文章完整版,配图更多,CSDN博文图片需要手动上传,因此文章配图较少,看不懂的可以去菜鸡博客参考一下配图! 系列文章目录 前端系列文章——传送门 JavaScript系列文章—…

柔性数组【结构体和动态内存的结合】

全文目录前言柔性数组的定义语法柔性数组的特点柔性数组的使用柔性数组的优势前言 很多人可能没有听过柔性数组这个概念,但是在C99中柔性数组是确实存在的。我个人感觉有点像动态内存和结构体的结合。 柔性数组的定义语法 结构中的最后一个元素允许是未知大小的数…

NumPy 秘籍中文第二版:三、掌握常用函数

原文:NumPy Cookbook - Second Edition 协议:CC BY-NC-SA 4.0 译者:飞龙 在本章中,我们将介绍许多常用函数: sqrt(),log(),arange(),astype()和sum()ceil(),modf()&…

《Java8实战》第1章 Java 8、9、10 以及 11 的变化

如想了解 Oracle 公司对 JDK 的最新支持情况,请访问https://www.oracle.com/technetwork/java/java-se-supportroadmap.html。所有的示例代码均可见于图灵社区本书主页 http://ituring.com.cn/book/2659“随书下载”处。 1.1 为什么要关心 Java 的变化 Java8做的…

[MAUI 项目实战] 手势控制音乐播放器(三): 动画

文章目录吸附动画确定位置平移动画回弹动画使用自定义缓动函数多重动画点击动画项目地址上一章节我们创建了手势容器控件PanContainer,它对拖拽物进行包装并响应了平移手势和点击手势。拖拽物现在虽然可以响应手势操作,但视觉效果较生硬,一个…

总结一下Redis的缓存雪崩、缓存击穿、缓存穿透

缓存是提高系统性能的一种常见手段,其中Redis是一种常用的高性能缓存数据库。但是在使用缓存时,可能会遇到一些问题,比如缓存击穿、缓存穿透、缓存雪崩等问题,本文将介绍这些问题的概念、原因以及解决方案。 缓存击穿 缓存击穿指…

SQL Server 连接查询和子查询

提示: 利用单表简单查询和多表高级查询技能,并且根据查询要求灵活使用内连接查询、外连接查询或子查询等。同时还利用内连接查询的两种格式、三种外连接查询语法格式和子查询的语法格式。 文章目录前言1.查询所有学生的学号、姓名、选修课程号和成绩方法…

Vue学习——【第四弹】

前言 上一篇文章 Vue学习——【第三弹】 中我们了解了MVVM模型,这篇文章接着学习Vue中的数据代理。 简单介绍 数据代理就是**一个对象(A)来代理对另一个对象(B)的属性操作(A一定要包含B)。**直接看定义大家可能觉得有些抽象,我们可以用代码来实现。 …

全景丨0基础学习VR全景制作,后期篇:嵌入视频前期注意事项及后期处理

大家好,欢迎观看蛙色官方系列全景摄影课程! 一、前期拍摄要点 嵌入视频的简介和用途 livepano即完全无缝融合到全景图中的热点嵌入视频。 这种无缝融合是真正无缝,从而让观者产生沉浸感和真实感。例如在场景中放入宠物、让喷泉动起来、灯光…

MPAM中PARTID的虚拟化(Virtualization)

MPAM支持对PARTID的virtualization,需要在满足所有以下条件下才能使用: 在当前的security状态下有实现EL2;支持MPAM virtualization,也就是MPAMIDR_EL1.HAS_HCR等于1; 以下是MPAM中使用virtual-to-physical PARTID ma…

Scala之面向对象

目录 Scala包: 基础语法: Scala包的三大作用: 包名的命名规范: 写包的好处: 包对象: 导包说明: 类和对象: 定义类: 封装: 构造器: 主从…

Spark 之 解析json的复杂和嵌套数据结构

本文主要使用以下几种方法: 1,get_json_object():从一个json 字符串中根据指定的json 路径抽取一个json 对象 2,from_json():从一个json 字符串中按照指定的schema格式抽取出来作为DataFrame的列 3,to_j…

【SpringMVC】第一个springmvc项目

需求: 用户在页面发起一个请求, 请求交给springmvc的控制器对象,并显示请求的处理结果(在结果页面显示一个欢迎语句)。 实现步骤: 新建web maven工程 加入依赖 spring-webmvc依赖,间接把spri…

FLINK 在蚂蚁大规模金融场景的平台建设

摘要:本文整理自蚂蚁集团高级技术专家、蚂蚁集团流计算平台负责人李志刚,在 Flink Forward Asia 2022 平台建设专场的分享。本篇内容主要分为四个部分: 主要挑战架构方案核心技术介绍未来规划点击查看直播回放和演讲 PPT 一、主要挑战 1.1 金…

【 Spring MVC 核心功能(三) - 输出数据】

文章目录引言一、返回静态页面二、返回非静态页面的数据三、返回 JSON 对象四、请求转发(forward)和请求重定向(redirect)五、拓展:IDEA 热部署(热加载)3.1 添加 SpringBoot DevTools 框架3.2 开起 IDEA 的自动编译3.3 开起运行中的热部署3.4 使用 debug 启动项目引…

【机器学习】SoftMax多分类---学习笔记

SoftMax---学习笔记softMax分类函数定义:softmax分类损失函数softMax分类函数 首先给一个图,这个图比较清晰地告诉大家softmax是怎么计算的。 (图片来自网络) 定义: 给定以歌nknknk矩阵W(w1,w2,...,wk)W(w_1,w_2,...,w_k)W(w1​,w2​,...,w…

Arcgis小技巧【12】——ArcGIS标注的各种用法和示例

标注是将描述性文本放置在地图中的要素上或要素旁的过程。 本文整理了ArcGIS中的各种标注方法、可能遇到的问题和细节,内容比较杂,想到哪写到哪。 一、正常标注某一字段值的内容 右键点击【属性】,在【标注】选项卡下勾选【标注此图层中的的…

Python 小型项目大全 1~5

一、百吉饼 原文:http://inventwithpython.com/bigbookpython/project1.html 在百吉饼这种演绎逻辑游戏中,你必须根据线索猜出一个秘密的三位数。该游戏提供以下提示之一来响应您的猜测:"Pico",当您的猜测在错误的位置有…