ado.net 操作sqlite

news2024/11/15 13:04:04

新建控制台项目

在这里插入图片描述
安装nuget包Microsoft.Data.Sqlite
在这里插入图片描述

数据库名字和链接

string dbName = "test.db";
SqliteConnection? connection = null;
try
{
    //创建链接
    connection = new SqliteConnection($"Data Source={dbName}");
    //打开链接
    connection.Open();
}
catch (Exception ex)
{
    Console.WriteLine(ex.Message);
}
finally
{
    //使用完关闭
    connection?.Close();
}
Console.WriteLine("执行执行完毕");
Console.ReadKey();

创建表

/// <summary>
/// 创建表
/// </summary>
static void CreateTable(SqliteConnection connection)
{
    var studentTable = @"CREATE TABLE IF NOT EXISTS Student(Id INTEGER PRIMARY KEY AUTOINCREMENT,Name TEXT NOT NULL,Age INTEGER)";
    using (var command = new SqliteCommand(studentTable, connection))
    {
        var status = command.ExecuteNonQuery();
        Console.WriteLine($"创建学生表结果:{status}");
    }
}

/// <summary>
/// 查询数据库中的表
/// </summary>
/// <param name="connection"></param>
static void QueryTables(SqliteConnection connection)
{
    var querySql = "SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%';";
    using (var command = new SqliteCommand(querySql, connection))
    using (var reader = command.ExecuteReader())
    {
        while (reader.Read())
        {
            Console.WriteLine($"表名:{reader.GetString(0)}");
        }
    }
}

在这里插入图片描述

增加数据

/// <summary>
/// 插入数据
/// </summary>
/// <param name="connection"></param>
static void InsertData(SqliteConnection connection)
{
    string insertSql = @"INSERT INTO Student (Name, Age) VALUES (@Name, @Age)";

    using (var command = new SqliteCommand(insertSql, connection))
    {
        command.Parameters.AddWithValue("@Name", "小明");
        command.Parameters.AddWithValue("@Age", 25);
        command.ExecuteNonQuery();
        command.Parameters["@Name"].Value = "小红";
        command.Parameters["@Age"].Value = 22;
        command.ExecuteNonQuery();
        Console.WriteLine("插入成功");
    }
}

在这里插入图片描述

查询数据

/// <summary>
/// 查询数据
/// </summary>
/// <param name="connection"></param>
static void QueryData(SqliteConnection connection)
{
    var querySql = "Select Id,Name,Age FROM Student;";
    using (var command = new SqliteCommand(querySql, connection))
    using (var reader = command.ExecuteReader())
    {
        while (reader.Read())
        {
            Console.WriteLine($"Id:{reader.GetInt32(0)},姓名:{reader.GetString(1)},年龄:{reader.GetInt32(2)}");
        }
    }
}

在这里插入图片描述

修改数据

/// <summary>
/// 更新数据
/// </summary>
/// <param name="connection"></param>
static void UpdateData(SqliteConnection connection)
{
    string updateSql = @"UPDATE Student SET Age=@Age WHERE Id=@Id";

    using (var command = new SqliteCommand(updateSql, connection))
    {
        command.Parameters.AddWithValue("@Id", 1);
        command.Parameters.AddWithValue("@Age", 31);
        command.ExecuteNonQuery();
        //查询结果
        QueryData(connection);
    }
}

在这里插入图片描述

删除数据

/// <summary>
/// 删除数据
/// </summary>
/// <param name="connection"></param>
static void DeleteData(SqliteConnection connection)
{
    string deleteSql = @"DELETE FROM Student WHERE Id=@Id";

    using (var command = new SqliteCommand(deleteSql, connection))
    {
        command.Parameters.AddWithValue("@Id", 1);
        command.ExecuteNonQuery();
        //查询结果
        QueryData(connection);
    }
}

在这里插入图片描述
完整代码如下

using Microsoft.Data.Sqlite;

namespace AdoNetSqliteStu
{
    internal class Program
    {
        static void Main(string[] args)
        {
            string dbName = "test.db";
            SqliteConnection? connection = null;
            try
            {
                //创建链接
                connection = new SqliteConnection($"Data Source={dbName}");
                //打开链接
                connection.Open();
                //创建表
                CreateTable(connection);
                QueryTables(connection);
                //插入数据
                InsertData(connection);
                //查询数据
                QueryData(connection);
                //更新数据
                UpdateData(connection);
                //删除数据
                DeleteData(connection);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                //使用完关闭
                connection?.Close();
            }
            Console.WriteLine("执行执行完毕");
            Console.ReadKey();
        }

        /// <summary>
        /// 创建表
        /// </summary>
        static void CreateTable(SqliteConnection connection)
        {
            var studentTable = @"CREATE TABLE IF NOT EXISTS Student(Id INTEGER PRIMARY KEY AUTOINCREMENT,Name TEXT NOT NULL,Age INTEGER)";
            using (var command = new SqliteCommand(studentTable, connection))
            {
                var status = command.ExecuteNonQuery();
                Console.WriteLine($"创建学生表结果:{status}");
            }
        }

        /// <summary>
        /// 查询数据库中的表
        /// </summary>
        /// <param name="connection"></param>
        static void QueryTables(SqliteConnection connection)
        {
            var querySql = "SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%';";
            using (var command = new SqliteCommand(querySql, connection))
            using (var reader = command.ExecuteReader())
            {
                while (reader.Read())
                {
                    Console.WriteLine($"表名:{reader.GetString(0)}");
                }
            }
        }

        /// <summary>
        /// 插入数据
        /// </summary>
        /// <param name="connection"></param>
        static void InsertData(SqliteConnection connection)
        {
            string insertSql = @"INSERT INTO Student (Name, Age) VALUES (@Name, @Age)";

            using (var command = new SqliteCommand(insertSql, connection))
            {
                command.Parameters.AddWithValue("@Name", "小明");
                command.Parameters.AddWithValue("@Age", 25);
                command.ExecuteNonQuery();
                command.Parameters["@Name"].Value = "小红";
                command.Parameters["@Age"].Value = 22;
                command.ExecuteNonQuery();
                Console.WriteLine("插入成功");
            }
        }
    
        /// <summary>
        /// 查询数据
        /// </summary>
        /// <param name="connection"></param>
        static void QueryData(SqliteConnection connection)
        {
            var querySql = "Select Id,Name,Age FROM Student;";
            using (var command = new SqliteCommand(querySql, connection))
            using (var reader = command.ExecuteReader())
            {
                while (reader.Read())
                {
                    Console.WriteLine($"Id:{reader.GetInt32(0)},姓名:{reader.GetString(1)},年龄:{reader.GetInt32(2)}");
                }
            }
        }
        
        /// <summary>
        /// 更新数据
        /// </summary>
        /// <param name="connection"></param>
        static void UpdateData(SqliteConnection connection)
        {
            string updateSql = @"UPDATE Student SET Age=@Age WHERE Id=@Id";

            using (var command = new SqliteCommand(updateSql, connection))
            {
                command.Parameters.AddWithValue("@Id", 1);
                command.Parameters.AddWithValue("@Age", 31);
                command.ExecuteNonQuery();
                //查询结果
                QueryData(connection);
            }
        }

        /// <summary>
        /// 删除数据
        /// </summary>
        /// <param name="connection"></param>
        static void DeleteData(SqliteConnection connection)
        {
            string deleteSql = @"DELETE FROM Student WHERE Id=@Id";

            using (var command = new SqliteCommand(deleteSql, connection))
            {
                command.Parameters.AddWithValue("@Id", 1);
                command.ExecuteNonQuery();
                //查询结果
                QueryData(connection);
            }
        }
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RK33568 android12 背景图片替换

文章目录 前言一、直接文件替换二、使用属性替换1.属性获取图片的代码分析2.设置图片路径前言 项目中,需要替换背景图片,要求是黑色的背景图片 修改前: 修改后: 一、直接文件替换 文件路径 device/rockchip/rk356x/overlay/frameworks/base/core/res/res/drawable-nod…

为什么要用数字化营销管理平台?

数字化营销管理平台是一种利用数字技术来整合和优化营销流程的工具。它能够帮助企业更高效地进行市场推广、客户关系管理以及销售活动。 一、主要功能 1.数据整合与分析 整合多渠道数据&#xff0c;包括网站流量、社交媒体互动、电子邮件营销反馈等。通过数据分析&#xff0…

Docker 存储空间不足无法导入加载镜像

问题:在载入镜像时,发现docker没有空间了 解决办法: 更改docker的存储路径 1.添加新的硬盘 docker info #查看docker的存储位置 df -Th #查看占用以及挂载情况 发现没有可用的剩余空间,我们可以添加一个新的硬盘 在l

EMC学习之接地与平面

1 不同信号地的放置 下图为数字地和射频地的两种放置方式&#xff0c;第一个布局方式射频电流必须要经过数字地才能返回电源GND上&#xff0c;而且射频地与数字地之间的间隙很小&#xff0c;所以更容易通过寄生电容来耦合噪声。第二个布局数字地与射频地没有重叠&#xff0c;平…

iOS 18 Beta 5:苹果的细腻之笔,绘制用户体验新画卷

在苹果的世界里&#xff0c;每一次系统更新都是对用户体验进行的一次精心雕琢。 随着iOS 18 Beta 5的上线&#xff0c;苹果带来了一系列令人耳目一新的功能&#xff0c;同时也在系统的每个细微之处展现了对完美的追求。 Safari浏览器的“干扰控制”功能 在今天信息充斥的数字…

BF算法,KMP算法

前言&#xff1a;今天我们来学习两种算法&#xff0c;BF算法和KMP算法。相信会让许多小伙伴们打开新世界的大门。 1 BF算法 实践是检验真理的唯一标准。举一个例子说明BF算法。现在我们要在一个主串中找子串的位置。那我们该如何解决这个问题呢&#xff1f;最简单的办法自然是…

【数据结构-哈希前缀】力扣2845. 统计趣味子数组的数目

给你一个下标从 0 开始的整数数组 nums &#xff0c;以及整数 modulo 和整数 k 。 请你找出并统计数组中 趣味子数组 的数目。 如果 子数组 nums[l…r] 满足下述条件&#xff0c;则称其为 趣味子数组 &#xff1a; 在范围 [l, r] 内&#xff0c;设 cnt 为满足 nums[i] % mod…

springboot打包找不到主类

1.打包jar包 idea中点击项目结构project stucture ,选择artfacts 2.

机器学习辅助复合材料预测,性能管理优化创新材料,这种王炸般的组合,还真是大开眼界!

在人工智能与复合材料技术融合的背景下&#xff0c;复合材料的研究和应用正迅速发展&#xff0c;创新解决方案层出不穷。从复合材料性能的精确预测到复杂材料结构的智能设计&#xff0c;从数据驱动的材料结构优化到多尺度分析&#xff0c;人工智能技术正以其强大的数据处理能力…

网络空间安全考研方向:5大专业值得选择,你喜欢哪一个?

网络空间安全考研方向包括网络与信息安全、信息安全工程、信息对抗技术、信息安全与管理、网络安全与执法等专业&#xff0c;旨在培养网络安全领域的高级专业人才&#xff0c;涵盖网络攻击与防御、信息加密与解密、信息安全评估与管理等核心知识与技能&#xff0c;为国家和社会…

4、物品抓取(6自由度机械臂逆运动学)

目录 1.坐标系建立 2.运用解析法计算各个舵机旋转角度 ​3.举例 1.坐标系建立 采用笛卡尔坐标系图1&#xff0c;即由三个互相垂直的坐标轴所组成的坐标系&#xff0c;以机械臂正向为X轴方向&#xff0c;横向为Y轴方向&#xff0c;纵向为Z轴方向。 图1 笛卡尔坐标系 2.运用…

实现qt的多语言转换

前言&#xff1a;qt实现多语言转换主要&#xff0c;用到lrelease.exe&#xff0c;在QT下运行图片和语言转换&#xff0c;需要对对应格式的内容进行转换。图片和语言&#xff0c;甚至是字体均是通过添加.qrc配置&#xff0c;来转换。图片转换成.rcc格式。而语言通过在.excel编辑…

觉飞内衣洗衣机怎么样?各维度专业剖析觉飞、希亦、由利三大机型

由于我们的内衣、内裤和袜子等等贴身小件衣物的清洁频率比一般的衣物要高。而且&#xff0c;如果我们人工手洗的话&#xff0c;不仅会大大浪费了我们的时间&#xff0c;而且还不能进行对这些贴身的以为进行深层消毒和除菌。这种情况下&#xff0c;就得需要一台专门用于清洗内衣…

Passware Kit Mobile

Passware Kit Mobile Passware Kit Mobile年度许可证最多支持 300 次成功移动设备提取&#xff0c;并且每年可续订。年度试用许可证最多支持 5 次成功提取。 从移动设备提取和解密用户数据的取证工具。 最先进的移动取证工具 Passware 取证产品被世界顶级执法机构用于破获需要解…

编译Android使用的ffmpeg库

1 下载NDK 官网&#xff1a;NDK 下载 | Android NDK | Android Developers 2 下载ffmpeg 官网&#xff1a;FFmpeg 3 下载配置msys2 在我之前的博客中有写windows下编译ffmpeg 最详细教程_windows 编译 ffmpeg-CSDN博客 4 编写编译脚本 在ffmpeg的路径下新建一个脚本…

【原创教程】电气电工06:打孔攻丝篇

打孔攻丝,是我们电气电工工作中经常遇到的,比如我们要在某个地方安装一个传感器,我们需要固定在底板上,这时候就需要我们会这个基本技能;我们在柜内布局安装板时,也需要进行打孔攻丝。 下面我们介绍一下这项技能。 首先我们先要熟悉钻头和丝锥,我们来…

STM32标准库学习笔记-11.I2C通信

参考教程&#xff1a;【STM32入门教程-2023版 细致讲解 中文字幕】 I2C通信 I2C&#xff08;Inter IC Bus&#xff09;是由Philips公司八十年代推出的一种通用数据总线两根通信线&#xff1a;SCL&#xff08;Serial Clock&#xff09;、SDA&#xff08;Serial Data&#xff0…

适用于所有Android手机的5个最佳Android手机解锁工具

在当今互联互通的世界中&#xff0c;我们移动设备的安全至关重要。但是&#xff0c;由于忘记密码、屏幕破裂或其他不可预见的问题&#xff0c;用户可能会发现自己被锁定在 Android 设备之外。为了满足这一需求&#xff0c;出现了各种 Android 解锁工具&#xff0c;提供创新的解…

CMake编译不同文件目录下的C++文件

由于我们构建一个项目的时候&#xff0c;通常不会将所有的源文件放在一个文件目录下&#xff0c;这样既不方便开发&#xff0c;也不方便源码阅读&#xff0c;我们通常会对项目文件进行分层&#xff0c;比如分为include、src、res、lib这些目录&#xff0c;src下又分为model、co…

解决怎样在使用Signal Tap进行在线调试时,单独编译工程没有报错,而在Signal tap添加了信号之后进行时编译报错。

问题 如下图所示&#xff0c;我们在Signal Tap中添加完相应的信号之后对于工程进行重新编译时&#xff0c;显示报错信息&#xff1a; 报错原因 这里错误显示的时我们使用的设备只有30个 类型为M9K的RAM位置。然而&#xff0c;当前设计需要超过30个位置才能成功适配。意思就是…