C# Sqlite数据库加密
sqlite官方的数据库加密是收费的,而且比较贵。
幸亏微软提供了一种免费的方法。
1 sqlite加密demo
这里我做了一个小的demo演示如下:
在界面中拖入数据库名、密码、以及保存的路径
比如我选择保存路径桌面的sqlite目录,数据库名guigutool.db,密码1234
点创建数据库。
我们在桌面文件夹sqlite看到guigutool.db
然后向其中插入
2.开发过程
2.1 通过Nuget安装依赖包
Microsoft.Data.Sqlite.Core
SQLitePCLRaw.bundle_e_sqlcipher
Dapper
2.2 新建项目Sqlite工具箱
在Form中拖入控件这里就省略了。
2.3 建立连接过程
static SqliteConnection conn = null;private void getConn(){string dbpath = txt_path.Text;string dbname = txt_dbname.Text;string pwd = txt_pwd.Text;string dbpathConn = Path.Combine(@"Data Source=" + dbpath, dbname);string connString = new SqliteConnectionStringBuilder(dbpathConn){Mode = SqliteOpenMode.ReadWriteCreate,Password = pwd}.ToString();if (conn != null){conn.Dispose();}conn = new SqliteConnection(connString);}
2.4 创建数据库
创建数据库时,会自动创建一个测试表User
private void btn_createdb_Click(object sender, EventArgs e){if (String.IsNullOrEmpty(txt_dbname.Text) || String.IsNullOrEmpty(txt_pwd.Text)){MessageBox.Show("请输入数据库名和密码");return;}string dbFullPath = Path.Combine(txt_path.Text, txt_dbname.Text);ShowInfo(txtInfo, dbFullPath);if (File.Exists(dbFullPath)){MessageBox.Show("该数据库已存在,不能创建");return;}getConn();if (conn.State == System.Data.ConnectionState.Closed){conn.Open();var createTable = @"CREATE table if not exists ""User"" (""Id"" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,""name"" TEXT,""age"" INTEGER);";var result = conn.Execute(createTable);conn.Close();ShowInfo(txtInfo, "数据库:" + this.txt_path.Text + txt_dbname.Text + "已创建成功,并插入了测试表User");}}
2.5 插入记录
private void btn_insert_Click(object sender, EventArgs e){getConn();if (conn.State == System.Data.ConnectionState.Closed){conn.Open();var name = GenerateSurname();var age = GenerateAge();var insertSql = $@"INSERT INTO ""main"".""User""(name,age) VALUES (""{name}"", {age});";int result = conn.Execute(insertSql);conn.Close();ShowInfo(txtInfo, $"插入记录成功==> Name:{name} Age:{age} ");}}
2.6 从数据库中查询记录
private void btn_query_Click(object sender, EventArgs e){getConn();if (conn.State == System.Data.ConnectionState.Closed){conn.Open();var name = GenerateSurname();var age = GenerateAge();var selectSql = "select id,name,age from main.User;";var users = conn.Query<User>(selectSql).ToList();ShowInfo(txtInfo, $"================ 查询db[{txt_dbname.Text}]到以下记录:===================");foreach (var user in users){ShowInfo(txtInfo, $"Id:{user.Id} Name:{user.Name} Age:{user.Age} ");}ShowInfo(txtInfo, $"=============== 共{users.Count} 条 ================");conn.Close();}}
以上就是主要的代码。
项目的完整代码可以在以下资源中下载。
https://download.csdn.net/download/wang6733284/87503163
相关文章:
C# Sqlite数据库加密
sqlite官方的数据库加密是收费的,而且比较贵。 幸亏微软提供了一种免费的方法。 1 sqlite加密demo 这里我做了一个小的demo演示如下: 在界面中拖入数据库名、密码、以及保存的路径 比如我选择保存路径桌面的sqlite目录,数据库名guigutool…...
高压放大器在声波谐振电小天线收发测试系统中的应用
实验名称:高压放大器在声波谐振电小天线收发测试系统中的应用研究方向:信号传输测试目的:声波谐振电小天线颠覆了传统电小天线以电磁波谐振作为理论基础的天线发射和接收模式,它借助声波谐振实现电磁信号的辐射或接收。因为同频的…...
锁相环的组成和原理及应用
一.锁相环的基本组成 许多电子设备要正常工作,通常需要外部的输入信号与内部的振荡信号同步,利用锁相环路就可以实现这个目的。 锁相环路是一种反馈控制电路,简称锁相环(PLL)。锁相环的特点是:利用外部输入的参考信号控制环路内…...
[C++]string类模拟实现
目录 前言: 1. string框架构造 2. 默认函数 2.1 构造函数 2.2 析构函数 2.3 拷贝构造 2.4 赋值重载 3. 迭代器 4. 整体程序 前言: 本篇文章模拟实现了C中string的部分功能,有助于大家了解和熟悉string类,虽然这个类不难实…...
一个更适合Java初学者的轻量级开发工具:BlueJ
Java是世界上最流行的编程语言之一,它被广泛用于从Web开发到移动应用的各种应用程序。大部分Java工程师主要是用IDEA、Eclipse为主,这两个开发工具由于有强大的能力,所以复杂度上就更高一些。如果您刚刚开始使用Java,或者您更适合…...
从程序员到项目组长,要经历六重修炼
最近和粉丝朋友们交流时发现,有很多刚刚开始做项目组长的朋友自我认可度非常低,感觉做组长之后天天打杂,技术也荒废了。领导天天找你要成果,下属天天找你说困难,你在中间受领导和下属的夹板气。时间久了,你…...
我的 System Verilog 学习记录(5)
、 引言 本文简单介绍 System Verilog 语言的 控制流。 前文链接: 我的 System Verilog 学习记录(1) 我的 System Verilog 学习记录(2) 我的 System Verilog 学习记录(3) 我的 System Ver…...
多芯片设计 Designing For Multiple Die
Why a system-level approach is essential, and why its so challenging作者:Ann MutschlerAnn Mutschler is executive editor at Semiconductor Engineering.将多个裸片或芯粒集成到一个封装中,与将它们放在同一硅片上有着很大的区别。在同一硅片上&a…...
2022年全国职业院校技能大赛(中职组)网络安全竞赛试题A(10)
目录 竞赛内容 模块A 基础设施设置与安全加固 一、项目和任务描述: 二、服务器环境说明 三、具体任务(每个任务得分以电子答题卡为准) A-1任务一 登录安全加固(Windows, Linux) 1.密码策略(Windows, …...
数据结构-简介
目录 1、简介 2、作用 3、分类 4、实现分类 1、简介 数据结构指的是组织和存储数据的方法。它涉及到一系列的算法和原则,用来设计和实现不同种类的数据类型,如数组、链表、树、图等等。数据结构的目的是在计算机程序中有效地管理和操作数据ÿ…...
python装饰器及其用法
python装饰器是什么? Python装饰器是一种语法结构,它可以让开发者在不修改原函数的基础上,在函数的前后运行额外的代码,这些代码可以达到修改函数行为的目的。Python装饰器的实质是一个可调用的对象,它可以接收函数作为参数…...
Appium自动化测试之启动时跳过初始化设置
Appium每次启动时都会检查和安装Appium Settings,这是完全没有必要的,在首次使用Appium连接设备是Appium Settings便已经安装好。怎样跳过安装Appium Settings呢?之前的做法是修改appium中的源文件中的android-helpers.js实现,如M…...
JavaScript DOM【快速掌握知识点】
目录 DOM简介 获取元素 修改元素 添加和移除元素 事件处理 DOM简介 JavaScript DOM 是指 JavaScript 中的文档对象模型(Document Object Model);它允许 JavaScript 与 HTML 页面交互,使开发者可以通过编程方式动态地修改网页…...
不需要高深技术,只需要Python:创建一个可定制的HTTP服务器!
目录 1、编写服务端代码,命名为httpserver.py文件。 2、编写网页htmlcss文件,命名为index.html和style.css文件。 3、复制htmlcss到服务端py文件同一文件夹下。 4、运行服务端程序。 5、浏览器中输入localhost:8080显示如下: 要编写一个简单的能发布…...
渗透测试常用浏览器插件汇总
1、shodan这个插件可以自动探测当前网站所属的国家、城市,解析IP地址以及开放的服务和端口,包括但不限于FTP、DNS、SSH或者其他服务等,属被动信息搜集中的一种。2、hackbar(收费之后用Max Hackerbar代替)这个插件可用于…...
社区1月月报|OceanBase 4.1 即将发版,哪些功能将会更新?
我们每个月都会和大家展开一次社区进展的汇报沟通会,希望通过更多的互动交流让OceanBase 开源社区更加透明,实现信息共享,也希望能营造更加轻松的氛围,为大家答疑解惑,让大家畅所欲言。如果您对我们的社区有任何建议&a…...
Javascript的API基本内容(二)
一、事件监听 结合 DOM 使用事件时,需要为 DOM 对象添加事件监听,等待事件发生(触发)时,便立即调用一个函数。 addEventListener 是 DOM 对象专门用来添加事件监听的方法,它的两个参数分别为【事件类型】和…...
ChatGPT热度“狂飙”,OceanBase也去找它唠了唠
最近互联网的关键字 非 ChatGPT 莫属 就是这个小东西 集唠嗑、提问、答疑、科普、写作于一体 让我看看哪个孤独的打工人 还没和 ChatGPT 聊上一聊 有人说 ChatGPT 这么智能 或将取代人类的工作 OceanBase 的小编表示不服气 于是,抱着好奇之心试了一试 对 …...
HTTP协议基础知识点扫盲;HTTPS协议及密码学基础
目录 一、Http协议的特性 二、http协议的请求 1.请求行第一行,包含三个信息:请求方式,url,http协议版本 2.请求头浏览器向服务器发送一些状态数据,标识数据等等 3.请求主体请求代理端项服务器端,发送的…...
【golang/go语言】Go语言之反射
本文参考了李文周的博客——Go语言基础之反射。 一、反射初识 1. 什么是反射 在计算机科学中,反射是指计算机程序在运行时(run time)可以访问、检测和修改它本身状态和行为的一种能力。用比喻来说,反射就是程序在运行的时候能够…...
Java+Swing+Mysql实现超市管理系统
一、系统介绍1.开发环境操作系统:Win10开发工具 :IDEA2018JDK版本:jdk1.8数据库:Mysql8.02.技术选型JavaSwingMysql3.功能模块4.系统功能1.系统登录登出管理员可以登录、退出系统2.商品信息管理管理员可以对商品信息进行查询、添加…...
华为OD机试题,用 Java 解【机器人走迷宫】问题
最近更新的博客 华为OD机试题,用 Java 解【停车场车辆统计】问题华为OD机试题,用 Java 解【字符串变换最小字符串】问题华为OD机试题,用 Java 解【计算最大乘积】问题华为OD机试题,用 Java 解【DNA 序列】问题华为OD机试 - 组成最大数(Java) | 机试题算法思路 【2023】使…...
软件测试基本概念
软件测试基本概念 1. 什么是软件测试 软件测试就是验证软件产品特性(功能, 界面, 兼容性, 性能…)是否符合用户的需求,同时软件测试不仅要测试系统是否做了其应该做的, 还需要测试系统是否未作其不应该做的。 2. 调试与测试 软件测试与调试的区别: …...
数学建模介绍
🚀write in front🚀 📜所属专栏: 🛰️博客主页:睿睿的博客主页 🛰️代码仓库:🎉VS2022_C语言仓库 🎡您的点赞、关注、收藏、评论,是对我最大的激励…...
【LVGL】学习笔记--(2)GUI Guider的使用
基于上一篇【LVGL】学习笔记--(1)Keil中嵌入式系统移植LVGL,已经成功地移植了LVGL到我们的嵌入式板子上,并配合磁控旋钮编码器(或者诸如触摸屏、按键、键盘等其他输入设备均可),实现了简单界面的显示工作。这一章将学习…...
OpenCV-PyQT项目实战(6)项目案例02:滚动条应用
欢迎关注『OpenCV-PyQT项目实战 Youcans』系列,持续更新中 OpenCV-PyQT项目实战(1)安装与环境配置 OpenCV-PyQT项目实战(2)QtDesigner 和 PyUIC 快速入门 OpenCV-PyQT项目实战(3)信号与槽机制 …...
3 决策树及Python实现
1 主要思想 1.1 数据 1.2 训练和使用模型 训练:建立模型(树) 测试:使用模型(树) Weka演示ID3(终端用户模式) 双击weka.jar选择Explorer载入weather.arff选择trees–>ID3构建树…...
小程序和Vue+uniapp+unicloud培训课件
文章目录**一、什么是小程序****1.1** **小程序简介****1.2** **小程序的特点****1.3** **小程序的开发流程**个人小程序和企业小程序的区别1.4 小程序代码构成1.4.1 JSON 配置1.4.2 WXML 模板**数据绑定**逻辑语法条件逻辑列表渲染模板引用共同属性1.4.3 WXSS 样式1.4.4 JS 逻…...
C语言--指针进阶2
目录前言函数指针函数指针数组指向函数指针数组的指针回调函数前言 本篇文章我们将继续学习指针进阶的有关内容 函数指针 我们依然用类比的方法1来理解函数指针这一全新的概念,如图1 我们用一段代码来验证一下: int Add(int x, int y) {return xy;…...
【步进电机和 Arduino】
【步进电机和 Arduino】 前言1. 什么是步进电机及其工作原理?1.1 步进电机结构1.2 绕线方式1.3 通电方式2. 如何使用Arduino和A17步进驱动器控制NEMA4988步进电机2.1 A4988 和 Arduino 连接2.2 测量AB相2.3 A4988 限流3. 步进电机和 Arduino3.1 示例代码 13.2 示例代码 24. 使…...
温岭新站seo/找小网站的关键词
最开始直接缓存数据库,再后来根据业务需要缓存一些业务结果或页面结果,是有必要的,这里需要一步一步,不可能当时就做这种优化。优化是一步一步的。 不能太过,也不能太少了,看业务规划。 memcache对数据库的…...
湘潭网站建设公司/沈阳网站关键字优化
1.解题过程: 直接用 base64 解码,得到 flag...
大连seo外包公司/品牌推广百度seo
1.软件的前期准备分为“需求准备”和“构建准备”,两者都有系统的规范。code complete中对这两者都提出了详细的确认方法。这里的确认方法并非戒律,而更像备忘。 2.在构建活动中的设计部分,书中提出了几大范围,我个人觉得划分得非…...
wordpress图片错乱的问题/被代运营骗了去哪投诉
在使用PXE结合kickstart文件可实现网络全自动安装Linux系统,按照kickstart语法须要在ks.cfg文件中指定操作系统安装的位置(指定硬盘)如hda、sda或硬盘的UUID等唯一标识,分区信息以及建立mbr的位置。如果硬盘命名指定有误ÿ…...
做外贸在那些网站找客户/福州短视频seo
一种特殊的索引,它会把某个数据表的某个数据列出现过的所有单词生成一份清单。 alter table tablename add fulltext(column1,column2) 只能在MyISAM数据表中创建 少于3个字符的单词不会被包含在全文索引里,可以通过修改my.cnf修改选项 ft_min_word_le…...
网站建设培训课程/西安百度竞价托管公司
需求:要创建一个半年生成一次的报表给领导看。现有的做法是在数据库中提取出数据后在Excel中通过filter筛选出最近半年的数据,没错,纯手动操作(弊端有二:容易出错,效率低)。如何自动化呢&#x…...