当前位置: 首页 > news >正文

ASP.NET|日常开发中连接Sqlite数据库详解

在这里插入图片描述
在这里插入图片描述

ASP.NET|日常开发中连接Sqlite数据库详解

  • 前言
  • 一、安装和引用相关库
    • 1.1 安装 SQLite 驱动
    • 1.2 引用命名空间
  • 二、配置连接字符串
    • 2.1 连接字符串的基本格式
  • 三、建立数据库连接
    • 3.1 创建连接对象并打开连接
  • 四、执行数据库操作
    • 4.1 创建表(以简单的用户表为例)
    • 4.2 插入数据
    • 4.3 查询数据
    • 4.4 更新数据
    • 4.5 删除数据
  • 结束语
  • 优质源码分享

ASP.NET|日常开发中连接Sqlite数据库详解,在ASP.NET日常开发中,连接SQLite数据库是一个常见的需求,特别是对于那些需要轻量级、嵌入式数据库解决方案的应用程序。SQLite是一个自给自足的、无服务器的、零配置的SQL数据库引擎,它非常适合于嵌入式设备和移动应用程序。以下是一个详细的步骤指南,介绍如何在ASP.NET应用程序中连接SQLite数据库。

前言

        在数字浪潮汹涌澎湃的时代,程序开发宛如一座神秘而宏伟的魔法城堡,矗立在科技的浩瀚星空中。代码的字符,似那闪烁的星辰,按照特定的轨迹与节奏,组合、交织、碰撞,即将开启一场奇妙且充满无限可能的创造之旅。当空白的文档界面如同深邃的宇宙等待探索,程序员们则化身无畏的星辰开拓者,指尖在键盘上轻舞,准备用智慧与逻辑编织出足以改变世界运行规则的程序画卷,在 0 和 1 的二进制世界里,镌刻下属于人类创新与突破的不朽印记。

一、安装和引用相关库

1.1 安装 SQLite 驱动

    在ASP.NET项目中连接 SQLite 数据库,首先需要安装 SQLite 的.NET 数据访问库。可以通过 NuGet 包管理器安装System.Data.SQLite包。这个包提供了在.NET 环境下操作 SQLite 数据库所需的类和方法。

1.2 引用命名空间

    在代码文件中添加using System.Data.SQLite;引用,这样才能使用 SQLite 相关的类,如SQLiteConnection、SQLiteCommand等。

二、配置连接字符串

2.1 连接字符串的基本格式

    SQLIte 的连接字符串格式相对简单。例如,连接一个本地的 SQLite 数据库文件的连接字符串可以是:

string connectionString = "Data Source=your_database_file.db;Version=3;";

    其中,Data Source指定了 SQLite 数据库文件的路径。如果数据库文件在项目的相对路径下,需要确保路径的正确性。Version=3表示使用 SQLite 的版本 3,这是比较常用的版本。

三、建立数据库连接

3.1 创建连接对象并打开连接

    使用SQLiteConnection类来创建连接对象,例如:

SQLiteConnection connection = new SQLiteConnection(connectionString);
try
{connection.Open();// 在这里执行数据库操作
}
catch (SQLiteException ex)
{Console.WriteLine($"数据库连接错误: {ex.Message}");
}
finally
{connection.Close();
}

    在try - catch - finally块中,try部分用于打开连接并执行数据库操作;catch部分用于捕获数据库连接过程中可能出现的异常,如文件不存在、权限问题等;finally部分确保无论操作是否成功,连接都会被关闭,以释放资源。

四、执行数据库操作

4.1 创建表(以简单的用户表为例)

  • 构建创建表语句

    在 SQLite 中,使用CREATE TABLE语句来创建表。例如,创建一个名为users的表,包含id(主键,自动增长)、name和age字段的 SQL 语句如下:

    CREATE TABLE users (id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT,age INTEGER);
  • 在 C# 中执行创建表操作

    使用SQLiteCommand类来执行 SQL 语句,如下所示:

    string createTableQuery = "CREATE TABLE users (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER)";SQLiteCommand command = new SQLiteCommand(createTableQuery, connection);try{command.ExecuteNonQuery();Console.WriteLine("表创建成功。");}catch (SQLiteException ex){Console.WriteLine($"表创建错误: {ex.Message}");}

    ExecuteNonQuery方法用于执行不返回结果集的 SQL 语句,如CREATE、INSERT、UPDATE和DELETE语句,它返回受影响的行数。对于创建表操作,如果成功创建,返回值为 0。

4.2 插入数据

  • 构建插入语句

    插入数据使用INSERT INTO语句。例如,插入一条用户记录的 SQL 语句如下:

    INSERT INTO users (name, age) VALUES ('John', 20);
  • 在 C# 中执行插入操作

    同样使用SQLiteCommand类,并且推荐使用参数化查询,如下所示:

    string insertQuery = "INSERT INTO users (name, age) VALUES (@name, @age)";SQLiteCommand command = new SQLiteCommand(insertQuery, connection);command.Parameters.AddWithValue("@name", "John");command.Parameters.AddWithValue("@age", 20);try{int rowsAffected = command.ExecuteNonQuery();if (rowsAffected > 0){Console.WriteLine("数据插入成功。");}}catch (SQLiteException ex){Console.WriteLine($"数据插入错误: {ex.Message}");}

    参数化查询不仅可以防止 SQL 注入攻击,还可以方便地动态设置参数值。ExecuteNonQuery方法返回受影响的行数,对于插入操作,如果成功插入一行,返回值为 1。

4.3 查询数据

  • 构建查询语句

    查询数据使用SELECT语句。例如,查询users表中所有用户的姓名和年龄的 SQL 语句如下:

    SELECT name, age FROM users;
  • 在 C# 中执行查询操作

    创建SQLiteCommand对象并执行查询,通过SQLiteDataReader读取结果,如下所示:

    string selectQuery = "SELECT name, age FROM users";SQLiteCommand command = new SQLiteCommand(selectQuery, connection);SQLiteDataReader reader;try{reader = command.ExecuteReader();while (reader.Read()){string name = reader.GetString("name");int age = reader.GetInt32("age");Console.WriteLine($"姓名: {name}, 年龄: {age}");}reader.Close();}catch (SQLiteException ex){Console.WriteLine($"数据查询错误: {ex.Message}");}

    使用ExecuteReader方法执行查询语句,返回一个SQLiteDataReader对象。通过reader.Read方法遍历结果集,然后使用GetString、GetInt32等方法获取相应列的值。注意,获取列值时,列名或列索引要与数据库表中的定义一致。最后要记得关闭SQLiteDataReader对象,以释放资源。

4.4 更新数据

  • 构建更新语句

    更新数据使用UPDATE语句。例如,将users表中姓名为John的用户年龄更新为 21 的 SQL 语句如下:

    UPDATE users SET age = 21 WHERE name = 'John';
  • 在 C# 中执行更新操作

    构建和执行更新语句如下:

    string updateQuery = "UPDATE users SET age = @newAge WHERE name = @name";SQLiteCommand command = new SQLiteCommand(updateQuery, connection);command.Parameters.AddWithValue("@newAge", 21);command.Parameters.AddWithValue("@name", "John");try{int rowsAffected = command.ExecuteNonQuery();if (rowsAffected > 0){Console.WriteLine("数据更新成功。");}}catch (SQLiteException ex){Console.WriteLine($"数据更新错误: {ex.Message}");}

    同样使用参数化查询来构建更新语句,通过ExecuteNonQuery方法执行更新操作,并根据返回的受影响行数判断更新是否成功。

4.5 删除数据

  • 构建删除语句

    删除数据使用DELETE FROM语句。例如,删除users表中姓名为John的用户记录的 SQL 语句如下:

    DELETE FROM users WHERE name = 'John';
  • 在 C# 中执行删除操作

    构建和执行删除语句如下:

    string deleteQuery = "DELETE FROM users WHERE name = @name";SQLiteCommand command = new SQLiteCommand(deleteQuery, connection);command.Parameters.AddWithValue("@name", "John");try{int rowsAffected = command.ExecuteNonQuery();if (rowsAffected > 0){Console.WriteLine("数据删除成功。");}}catch (SQLiteException ex){Console.WriteLine($"数据删除错误: {ex.Message}");}

    还是使用参数化查询构建删除语句,执行ExecuteNonQuery方法后,根据返回的受影响行数判断删除是否成功。

结束语

        亲爱的朋友,无论前路如何漫长与崎岖,都请怀揣梦想的火种,因为在生活的广袤星空中,总有一颗属于你的璀璨星辰在熠熠生辉,静候你抵达。

         愿你在这纷繁世间,能时常收获微小而确定的幸福,如春日微风轻拂面庞,所有的疲惫与烦恼都能被温柔以待,内心永远充盈着安宁与慰藉。

        至此,文章已至尾声,而您的故事仍在续写,不知您对文中所叙有何独特见解?期待您在心中与我对话,开启思想的新交流。


--------------- 业精于勤,荒于嬉 ---------------

请添加图片描述

--------------- 行成于思,毁于随 ---------------

优质源码分享

  • 【百篇源码模板】html5各行各业官网模板源码下载

  • 【模板源码】html实现酷炫美观的可视化大屏(十种风格示例,附源码)

  • 【VUE系列】VUE3实现个人网站模板源码

  • 【HTML源码】HTML5小游戏源码

  • 【C#实战案例】C# Winform贪吃蛇小游戏源码


在这里插入图片描述


     💞 关注博主 带你实现畅游前后端

     🏰 大屏可视化 带你体验酷炫大屏

     💯 神秘个人简介 带你体验不一样得介绍

     🎀 酷炫邀请函 带你体验高大上得邀请


     ① 🉑提供云服务部署(有自己的阿里云);
     ② 🉑提供前端、后端、应用程序、H5、小程序、公众号等相关业务;
     如🈶合作请联系我,期待您的联系。
    :本文撰写于CSDN平台,作者:xcLeigh所有权归作者所有) ,https://blog.csdn.net/weixin_43151418,如果相关下载没有跳转,请查看这个地址,相关链接没有跳转,皆是抄袭本文,转载请备注本文原地址。


     亲,码字不易,动动小手,欢迎 点赞 ➕ 收藏,如 🈶 问题请留言(评论),博主看见后一定及时给您答复,💌💌💌


原文地址:https://blog.csdn.net/weixin_43151418/article/details/144309263(防止抄袭,原文地址不可删除)

相关文章:

ASP.NET|日常开发中连接Sqlite数据库详解

ASP.NET|日常开发中连接Sqlite数据库详解 前言一、安装和引用相关库1.1 安装 SQLite 驱动1.2 引用命名空间 二、配置连接字符串2.1 连接字符串的基本格式 三、建立数据库连接3.1 创建连接对象并打开连接 四、执行数据库操作4.1 创建表(以简单的用户表为例…...

python的自动化seleium安装配置(包含谷歌的chromedriver)

目录 前言介绍 一、下载谷歌浏览器chromedriver (一)查看谷歌浏览器版本 (二)去官网下载谷歌驱动(chromdriver) (三)谷歌浏览器安装位置解压 (四)配置环境变量 二、pychram里下载安装selenium 三、测试selenium是否成功 前言介绍 Selenium是一个开源的自动化测试工具&…...

QT requested database does not belong to the calling thread.线程中查询数据报错

QT requested database does not belong to the calling thread.线程中查询数据报错 QString name "ttx"; QSqlQueryModel* sql_model; QString sql_comm QString("select * from dssb_moddve_loddt_tab where name%1").arg(name); sql_model->set…...

服务器一般装什么系统?

在服务器管理中,操作系统的选择是一个关键因素,它直接影响到服务器的稳定性、性能和可维护性。那么为什么有些服务器选择Linux,而不是Windows?选择合适的操作系统对服务器的性能和安全性有多么重要? 在众多操作系统中…...

Linux vi/vim 编辑器使用教程

Linux vi/vim 编辑器使用教程 引言 Linux 系统中的 vi 和 vim 是非常强大的文本编辑器,它们以其高效性和灵活性而闻名。vim 是 vi 的增强版,提供了更多的功能和改进的用户界面。本文将详细介绍 vi/vim 的基本用法,包括打开文件、编辑文本、…...

JavaEE多线程案例之阻塞队列

上文我们了解了多线程案例中的单例模式,此文我们来探讨多线程案例之阻塞队列吧 1. 阻塞队列是什么? 阻塞队列是⼀种特殊的队列.也遵守"先进先出"的原则. 阻塞队列是⼀种线程安全的数据结构,并且具有以下特性: 当队列满的时候,继续⼊队列就会…...

梳理你的思路(从OOP到架构设计)_基本OOP知识04

目录 1、 主动型 vs.基於被动型 API 1)卡榫函数实现API 2)API的分类 3)回顾历史 4)API >控制力 2、 结语&复习: 接口与类 1)接口的表示 2)Java的接口表示 1、 主动型 vs.基於被动…...

nginx反向代理(负载均衡)

nginx的代理 代理 四层代理 七层代理 正向代理和缓存的配置方式 🐭🐮🐯🐰🐉🐍🐴🐑🐒🐔🐶🐷 反向代理》负载均衡 负载均衡&#xff…...

Android系统应用主要模块

设置 Android Settings开发总结 Launcher Android Launcher开发学习总结 System UI Android SystemUI 学习总结...

【万字详解】三维重建(二)——NeRF、NeuS、MeshUDF、NeuralUDF、3DGS、GShell

文章目录 一、NeRF:Representing Scenes as Neural Radiance Fields for View Synthesis(推荐读)1.1 式1 神经网络的输入和输出1.2 式2 体素渲染算法1.3 式3 损失函数1.4 位置编码1.5 基本原理二、经典的重建流程2.1 传统的三维重建pipeline2.2 神经网络回归2.3 可微渲染最优…...

【RK3588 Linux 5.x 内核编程】-内核线程与Seqlock

内核线程与Seqlock 文章目录 内核线程与Seqlock1、Seqlock介绍2、Seqlock相关API2.1 初始化2.2 写操作2.3 读操作3、驱动实现4、驱动验证在前面的文章中,我们介绍了 Mutex、Spinlock、Read/Write Spinlock 的使用及其实现。 它们都用于保护共享资源不被两个或多个进程同时修改…...

访问者模式的理解和实践

在软件开发过程中,设计模式为我们提供了解决常见问题的最佳实践。访问者模式(Visitor Pattern)是行为设计模式之一,它将数据操作与数据结构分离,使得在不修改数据结构的前提下,能够定义作用于这些元素的新的…...

在Scala中对Map函数的使用

package pp28{object cscc {def main(args: Array[String]): Unit {val m1 Map("马云 — 阿里巴巴" -> 1964,"马化腾 — 腾讯" -> 1971,"李彦宏 - 百度" -> 1968,"雷军 - 小米" -> 1969,"丁磊 - 网易" -> …...

PyTorch基本使用-张量的索引操作

在操作张量时,经常要去获取某些元素进行处理或者修改操作,在这里需要了解torch中的索引操作。 准备数据: data torch.randint(0,10,[4,5]) print(data--->,data)输出结果: data---> tensor([[3, 9, 4, 0, 5],[7, 5, 9, …...

OpenCV实验:图片加水印

第二篇:图片添加水印(加 logo) 1. 实验原理 水印原理: 图片添加水印是图像叠加的一种应用,分为透明水印和不透明水印。水印的实现通常依赖于像素值操作,将水印图片融合到目标图片中,常用的方法…...

sql server log文件

确定 SQL Server 实例中具有大量 VDF 的数据库 SELECT [name], COUNT(l.database_id) AS vlf_count FROM sys.databases AS s CROSS APPLY sys.dm_db_log_info(s.database_id) AS l GROUP BY [name] HAVING COUNT(l.database_id) > 100; 在收缩日志文件之前确定事务日志中…...

Elasticsearch 集群部署

Elasticsearch 是一个分布式的搜索和分析引擎,广泛应用于日志分析、全文搜索、实时数据分析等场景。它以其高性能、高可用性和易用性而著称。本文档将引导您完成一个基本的 Elasticsearch 集群配置,包括节点间的通信、客户端访问、安全设置等关键步骤。我…...

微信小程序5-图片实现点击动作和动态加载同类数据

搜索 微信小程序 “动物觅踪” 观看效果 感谢阅读,初学小白,有错指正。 一、功能描述 a. 原本想通过按钮加载背景图片,来实现一个可以点击的搜索button,但是遇到两个难点,一是按钮大小调整不方便(网上搜索…...

策略梯度定理公式的详细推导

策略梯度定理公式的详细推导 以下是策略梯度定理公式从基础概率公式到最终形式的完整推导,帮助更清晰地理解推导过程中的每一个步骤。 1. 策略梯度的目标 我们希望最大化期望累积奖励 ( J ( θ ) J(\theta) J(θ) ),其定义为: J ( θ ) E…...

力扣-图论-10【算法学习day.60】

前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向和记录学习过程(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非…...

《Python WEB安全 库全解析》

《Python WEB安全 库全解析》 一、Python WEB安全 库概述二、常见的 Python WEB安全 库介绍1. Jiasule2. Awesome Python Security3. Flask-Security4. Flask-SeaSurf 三、Python WEB 安全库的优缺点1. 优点2. 缺点 四、Python WEB 安全库的使用场景1. 开发 Web 应用2. 处理敏感…...

Linux yum-config-manager命令异常

错误信息 使用 yum-config-manager命令时错误信息如下 sudo yum-config-manager \ > --add-repo \ > https://download.docker.com/linux/centos/docker-ce.repo sudo: yum-config-manager: command not found 解决办法 第一步: sudo yum -y install yum-u…...

ios 开发配置蓝牙

如果使用了蓝牙功能, 又没有配置, 会出现以下错误: This app has crashed because it attempted to access privacy-sensitive data without a usage description. The apps Info.plist must contain an NSBluetoothAlwaysUsageDescription key with a string value explaini…...

geoserver(1) 发布sql 图层 支持自定义参数

前提使用postgis 数据库支持关联 join 支持 in,not in,like,及其他sql原生函数 新增sql图层 编写自定义sql 编辑sql语句必须输出带有geom数据 正则表达式去除 设置id以及坐标参考系 预览sql图层效果 拼接sql参数 http://xxx.com/geoserver/weather/wms?SERVICEWMS&VERSI…...

Linux:network:添加ip的时候自动添加一个本地路由

文章目录 问题问题 最近在看一个路由的问题,顺便看内核代码,发现在添加IP的时候,内核会自动添加一个local route。 net/ipv4/devinet.c inet_rtm_newaddr->__inet_insert_ifa /* Send message first, then call notifier.Notifier will trigger FIB update, so thatlis…...

go 集成nacos注册中心、配置中心

使用限制 Go>v1.15 Nacos>2.x 安装 使用go get安装SDK: go get -u github.com/nacos-group/nacos-sdk-go/v2 快速使用 初始化客户端配置ClientConfig constant.ClientConfig{TimeoutMs uint64 // 请求Nacos服务端的超时时间,默…...

ssd202d-badblock-坏块检测

这边文章讲述的是坏快检测功能 思路: 1.第一次烧录固件会实现跳坏块,但是后续使用会导致坏块的产生; 于是我在uboot环境变量添加了两个变量来控制坏快 lb_badnum //坏块个数 lb_badoff //坏块所在位置 2.第一次开机会根据lb_badnum是否…...

MySQL-练习-数据介绍

文章目录 一. 数据介绍1. 数据结构2. 创建数据库,数据表3. 员工表(employees)练习1 4. 顾客表(customers)练习2 5. 商品(products)和商品类别(categories)表练习3 6. 供应商表(suppliers)练习4 7. 订单和订单明细表练习5 二. 数据汇总三. 使用CASE WHEN …...

React框架:解锁现代化Web开发的新维度

在当今前端开发领域,React 无疑是一颗璀璨的明星。React 是由 Facebook 开发的用于构建用户界面的 JavaScript 库,它在前端开发中占据着重要的地位,为开发者提供了一种高效、灵活且可维护的方式来构建复杂的用户界面。 一、React 的背景与开…...

电阻功率,限流,等效电阻

1 电阻额定功率 2 电阻限流作用 3 电阻并联等效电阻...

web开发是做网站/宁德市人社局官网

说明本文假定读者已具备基本的C编译知识。如非特殊说明,文中“源文件”指 * .c文件,“头文件”指 *.h文件,“引用”指包含头文件。一、头文件作用C语言里,每个源文件是一个模块,头文件为使用该模块的用户提供接口。接口…...

广州邮局网站/宁波seo公司网站推广

Input fields Java代码 RowMetaInterface inputRowMeta getInputRowMeta(); inputRowMeta对象包含了输入行的元数据,包括域、数据类型、长度、名字、格式等等。例如,查找名字为"customer"的域,可以采用如下方式: Ja…...

威海城乡建设局网站首页/百度下载安装到桌面

Redmine的code review插件可以显示代码的具体内容,但是缺少代码的作者、发布时间等等信息,所以需要对插件进行修改,添加这个功能。如图所示为没有修改时的显示页面: 可以看到,图中只有代码。 我们要做的就是在上面添加…...

做网站是要写代码的吗/外包网络推广公司推广网站

Django 的模板中的数学运算前言 django模板只提供了加法的filter,没有提供专门的乘法和除法运算;django提供了widthratio的tag用来计算比率,可以变相用于乘法和除法的计算。 加法 {{value|add:10}}note:value5,则结果返回15 减法 {{value|add…...

wordpress 点餐/系统优化app

由于时间的关系,我今天只能初步的跟大家讨论一下学习数据持久化和Hibernate的概念与技术的一些所需要知道的知识,在后续的文章中我还会给出如何使用Eclipse来建立和使用Hibernate技术来操作数据库。 1.数据持久化的概述 Persistent是为了解决关系型数据库…...

网站搭建课程标准/谷歌浏览器手机版

试题 算法提高 成绩排名资源限制时间限制:1.0s 内存限制:256.0MB问题描述小明刚经过了一次数学考试,老师由于忙碌忘记排名了,于是老师把这个光荣的任务交给了小明,小明则找到了聪明的你,希望你能帮他解决这…...