-
在C#中使用SQLite数据库
轻量级桌面程序数据库不太适合用SQLServer、MySQL之类的重量级数据库,嵌入式数据库更好。在对比Access、SQLite、Firebird数据库后发现SQLite较另外两个有较多优点。
环境:.NET Framework 3.5、windows11 64位、Visual Studio 2010.
C#使用SQLite需要从SQLite官网下载DLL组件。
我是windows11,64位的开发环境,最开始下载的64位的,结果运行时报异常。通过查资料,情况比较复杂(参考:https://blog.51cto.com/xxjjing/5804868),遂重新下载了32位的包:sqlite-netFx35-binary-Win32-2008-1.0.117.0
下载地址:https://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki
下载后将包解压放到一个固定目录,需要依赖System.Data.SQLite.dll和SQLite.Interop.dll这两个文件,
在项目里右键项目 > 添加引用 > 选“浏览”选项卡,找到解压后的目录,引入System.Data.SQLite.dll,另一个文件SQLite.Interop.dll不可以通过引用方式添加,必须只能复制文件到运行目录下,通过调试发现程序会自动把System.Data.SQLite.dll也复制到运行目录下,System.Data.SQLite.dll和SQLite.Interop.dll文件会在一起。(尝试过直接复制这两个文件到程序的运行目录下不可行,Visual Studio里不管怎么刷新项目的引用列表都不会出现这两个文件,运行会报错。)
C# 中使用SQLite示例:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Data; using System.Data.SQLite; namespace SQLiteTest { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { Console.WriteLine("SQL Lite 数据库试验"); // 连接数据库,FailIfMissing=false时若文件不存在会自动创建 string connStr = "Data Source=test.db;Version=3;Pooling=true;FailIfMissing=false;"; SQLiteConnection conn = new SQLiteConnection(connStr); conn.Open(); //在指定数据库中创建一个table string sql = "create table highscores (name varchar(20), score int)"; SQLiteCommand command = new SQLiteCommand(sql, conn); command.ExecuteNonQuery(); // 插入一些数据 sql = "insert into highscores (name, score) values ('Me', 3000)"; command = new SQLiteCommand(sql, conn); command.ExecuteNonQuery(); sql = "insert into highscores (name, score) values ('Myself', 6000)"; command = new SQLiteCommand(sql, conn); command.ExecuteNonQuery(); sql = "insert into highscores (name, score) values ('And I', 9001)"; command = new SQLiteCommand(sql, conn); command.ExecuteNonQuery(); // 查询数据 sql = "select * from highscores order by score desc"; command = new SQLiteCommand(sql, conn); SQLiteDataReader reader = command.ExecuteReader(); while (reader.Read()) { Console.WriteLine("Name: " + reader["name"] + "\tScore: " + reader["score"]); } } } }
一般建表使用文本文件,不使用代码建(build.sql):
-- admin表 create table admin ( id nvarchar(32) primary key, admin_account nvarchar(32) not null, password nvarchar(32) not null ); -- file表 create table file ( id nvarchar(32) primary key, user_account nvarchar(32) not null, user_name nvarchar(32) not null, file_path nvarchar(256) not null, upload_start_time timestamp, upload_end_time timestamp, upload_ip nvarchar(20), file_md5 nvarchar(32), file_size integer, file_suffix nvarchar(4) ); -- file_remove_history表 create table file_remove_history ( id nvarchar(32) primary key, user_account nvarchar(32) not null, user_name nvarchar(32) not null, file_path nvarchar(256) not null, upload_start_time timestamp, upload_end_time timestamp, upload_ip nvarchar(20), file_md5 nvarchar(32), file_size integer, file_suffix nvarchar(4), remove_user nvarchar(20), remove_time timestamp );
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Data; using System.Data.SQLite; using System.IO; namespace U8FileBackupServer { public partial class Form1 : Form { string dbFile = System.Environment.CurrentDirectory + "\\xxx.db"; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { if (!File.Exists(dbFile)) { Console.WriteLine("文件不存在,执行创建。"); SQLiteConnection.CreateFile(dbFile); // 连接数据库,FailIfMissing=false时若文件不存在也会自动创建 SQLiteConnection conn = new SQLiteConnection("Data Source=" + dbFile + ";Version=3;Pooling=true;FailIfMissing=false;"); conn.Open(); // 打开连接 // 建表 string sqlText = new StreamReader(System.Environment.CurrentDirectory + "\\build.sql").ReadToEnd(); Console.WriteLine("= = = = = = = = = = = = = = = = = = = = = = = = ="); Console.WriteLine(sqlText); Console.WriteLine("= = = = = = = = = = = = = = = = = = = = = = = = ="); SQLiteCommand cmd = new SQLiteCommand(sqlText, conn); cmd.ExecuteNonQuery(); conn.Close(); // 关闭连接 } SQLiteConnection conn1 = new SQLiteConnection("Data Source=" + dbFile + ";Version=3;Pooling=true;FailIfMissing=true;"); conn1.Open(); // 插入一些数据 string sql = "insert into admin (id, admin_account, password) values ('111', '管理员', 'admin')"; SQLiteCommand command = new SQLiteCommand(sql, conn1); command.ExecuteNonQuery(); // 查询数据 sql = "select * from admin"; command = new SQLiteCommand(sql, conn1); SQLiteDataReader reader = command.ExecuteReader(); while (reader.Read()) { Console.WriteLine("admin_account: " + reader["admin_account"] + "\tpassword: " + reader["password"]); } conn1.Close(); } } }
出处:https://www.cnblogs.com/jsper/p/17346758.html
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
关于JS定时器的整理
JS中使用Promise.all控制所有的异步请求都完
js中字符串的方法
import-local执行流程与node模块路径解析流程
检测数据类型的四种方法
js中数组的方法,32种方法
前端操作方法
数据类型
window.localStorage.setItem 和 localStorage.setIte
如何完美解决前端数字计算精度丢失与数