SQLite在C#中的使用
SQLite是一款轻型的数据库,在一些数据量不太大的程序中,它暂用的资源非常低。支持很多操作系统和许多语言,所以还是很方便的。在C#中,要用的话可以通过网站来下载或者在VS中通过NuGet来下载。这个就不多说了,当你下载并且装完数据库后,就可以直接使用它,下面就先看下最基础的数据库操作:
首先就是关于创建数据库和创建表:
private static void Create() {
if (!Directory.Exists(AppDomain.CurrentDomain.BaseDirectory + "Data")) {
Directory.CreateDirectory(AppDomain.CurrentDomain.BaseDirectory + "Data");
SQLiteConnection.CreateFile(AppDomain.CurrentDomain.BaseDirectory + "Data\\test2.db3");
}
if (!File.Exists(AppDomain.CurrentDomain.BaseDirectory + "Data\\test2.db3")) {
string datasource = "Data Source=" + AppDomain.CurrentDomain.BaseDirectory + "Data\\test2.db3";
SQLiteConnection conn = new SQLiteConnection(datasource);
conn.Open();
SQLiteCommand cmd = conn.CreateCommand();
string sql = "Create TABLE Test(ID GUID PRIMARY KEY,Content INTEGER NOT NULL)";
cmd.CommandText = sql;
cmd.Connection = conn;
cmd.ExecuteNonQuery();
conn.Close();
}
}
然后么就是什么增删改查之类的东西了,这其实都差不多的:
private static void Create() {
if (!Directory.Exists(AppDomain.CurrentDomain.BaseDirectory + "Data")) {
Directory.CreateDirectory(AppDomain.CurrentDomain.BaseDirectory + "Data");
SQLiteConnection.CreateFile(AppDomain.CurrentDomain.BaseDirectory + "Data\\test2.db3");
}
if (!File.Exists(AppDomain.CurrentDomain.BaseDirectory + "Data\\test2.db3")) {
string datasource = "Data Source=" + AppDomain.CurrentDomain.BaseDirectory + "Data\\test2.db3";
SQLiteConnection conn = new SQLiteConnection(datasource);
conn.Open();
SQLiteCommand cmd = conn.CreateCommand();
string sql = "Create TABLE Test(ID GUID PRIMARY KEY,Content INTEGER NOT NULL)";
cmd.CommandText = sql;
cmd.Connection = conn;
cmd.ExecuteNonQuery();
conn.Close();
}
}
private static void Add() {
using (SQLiteConnection conn = new SQLiteConnection("Data Source=" + AppDomain.CurrentDomain.BaseDirectory + "Data\\test2.db3")) {
conn.Open();
SQLiteCommand cmd = conn.CreateCommand();
DbTransaction trans = conn.BeginTransaction(); //延时事务
try {
for (int i = ; i < ; i++) {
cmd.CommandText = "insert into Test values(@ID,@Content)";
cmd.Parameters.Add(new SQLiteParameter("@ID", Guid.NewGuid()));
cmd.Parameters.Add(new SQLiteParameter("@Content", i));
cmd.ExecuteNonQuery();
}
trans.Commit(); //提交事务
} catch {
trans.Rollback(); //事务回滚
throw;
}
}
}
private static void DeleteOne() {
using (SQLiteConnection conn = new SQLiteConnection("Data Source=" + AppDomain.CurrentDomain.BaseDirectory + "Data\\test2.db3")) {
conn.Open();
SQLiteCommand cmd = conn.CreateCommand();
cmd.CommandText = string.Format("delete from Test where Content=@value");
cmd.Parameters.Add(new SQLiteParameter("@value", ));
cmd.ExecuteNonQuery();
}
}
private static List<Guid> GetGuid() {
using (SQLiteConnection conn = new SQLiteConnection("Data Source=" + AppDomain.CurrentDomain.BaseDirectory + "Data\\test2.db3")) {
List<Guid> list = new List<Guid>();
conn.Open();
SQLiteCommand cmd = conn.CreateCommand();
cmd.CommandText = "select * from Test where Content=@content";
cmd.Parameters.Add(new SQLiteParameter("content", ));
SQLiteDataReader dr = cmd.ExecuteReader();
while (dr.Read()) {
Guid ID = dr.GetGuid();
list.Add(ID);
}
return list;
}
}
然后再看到上面的Add()的方法中,如果一次性的批量加入数据时,需要对事务进行一个处理,因为如果不处理的话一次的执行就是一条事务,这样时间都花在了开始事务、提交事务上,速度会很慢。应该把这个添加变为一个统一的事务,同事如果出错,还可以进行事务回滚。
跟事务有关联的是一个锁的问题,当有两个以上链接要读写同一个数据库的时候就会发生死锁的问题。虽然我还没碰到过,不过还是先知道下比较好,免的以后出错。具体的概念嘛还是看看别人写的:链接1&&链接2。
最后是我的Demo
SQLite在C#中的使用的更多相关文章
- sqlite在火狐中安装及使用
1.SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中.它是D.RichardHipp建立的公有领域项目.它的设计目标是嵌入式的,而且目前已经在很多嵌入 ...
- sqlite 删除表中重复数据(亲测可用)
例子:表名 Paper .通过字段PaperID查找重复数据. 1 --查询某表中重复的数据 select * from Paper group by PaperID having co ...
- android 检测sqlite数据表中字段(列)是否存在 (转)
原文摘自 http://www.tuicool.com/articles/jmmMnu 一般数据库升级时,需要检测表中是否已存在相应字段(列),因为列名重复会报错.方法有很多,下面列举2种常见的方式: ...
- SQLite在C#中的安装与操作
SQLite 介绍 SQLite,是一款轻型的数据库,用于本地的数据储存. 先说说优点,它占用资源非常的低,在嵌入式设备中需要几百K的内存就够了:作为轻量级数据库,他的处理速度也足够快:支持的的容量级 ...
- SQLite在.NET中自适应32位/64位系统
如果一个.NET应用要自适应32位/64位系统,只需要在项目的“目标平台”设置为“Any CPU”.但是如果应用中使用了SQLite,情况就不同了. SQLite的.NET开发包来自是System.D ...
- SQLITE在IIS中使用问题
在WEB中使用这个数据库时,System.Data.SQLite.dll 这个经常会出问题 主要是版本问题,sqlite.DLL的版本要和Framework版本匹配 这是下载地址 http://www ...
- 看不见的攻击面:查看 SQLite 数据库就中招?
Navicat 客户端存在一个 XSS,在查看表字段时,没有对内容进行处理,导致一个 XSS 问题.利用这个漏洞可以读取敏感文件,比如 /Users/XXXX/.bash_history . 漏洞发现 ...
- sqlite 查询数据库中所有的表名,判断某表是否存在,将某列所有数值去重后获得数量
1.列出当前db文件中所有的表的表名 SQL语句:SELECT * FROM sqlite_master WHERE type='table'; 结构如下: 注:网上有人说可以带上db文件的名称,如: ...
- 【SQLite】 C#中操作SQlite
简介 SQLite是轻量级数据库,具体的介绍请参考官网(SQLite官网).在WinForm的项目中需要采用独立的数据库访问,可在断网单机上使用,所以选择了SQLite! 使用 主要针对C#项目(Wi ...
- 关于在SQLITE数据库表中插入本地系统时间的做法
首先,我参考下面的博文地址:http://blog.csdn.net/liuzhidong123/article/details/6847104 sqlite3 表里插入系统时间(时间戳) 分类: s ...
随机推荐
- “CMake”这个名字是“cross platform make”
cmake_百度百科 https://baike.baidu.com/item/cmake/7138032?fr=aladdin CMake 可以编译源代码.制作程序库.产生适配器(wrapper). ...
- IO流入门-第一章-FileInputStream
FileInputStreamj基本用法和方法示例 import java.io.*; public class FileInputStreamTest01 { public static void ...
- Json对象与Json字符串的转化
1.jQuery插件支持的转换方式: $.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符串转换成json对象 2.浏览器支持的转 ...
- 原!mysql5.6 存储过程 批量建表
由于业务需求,需要按天分表,因此写了个存储过程,根据时间生成表. 根据createTime 的时间,以及 while循环的变量设置范围,生成该指定日期及之后的多张表. BEGIN ); ); ; '; ...
- OVN实战---《An Introduction to OVN Routing》翻译
Overview 在前面一篇文章的基础上,现在我将通过OVN创建一个基础的三层网络.创建的最终结果将是一对logical switches通过一个logical router相连.另外,该路由器会通过 ...
- Python 模块之Logging——常用handlers的使用
一.StreamHandler 流handler——包含在logging模块中的三个handler之一. 能够将日志信息输出到sys.stdout, sys.stderr 或者类文件对象(更确切点,就 ...
- 异常处理、socke基于TCP协议编程
一.异常处理 1.错误和异常 1.程序中难免出现错误,而错误分成两种 (1)语法错误(这种错误过不了Python解释器的语法检测,必须在程序执行前改正) #语法错误示范一 if #语法错误示范二 de ...
- 从库函数解析STM32地址映射
STM32的存储映射是靠基地址和地址偏移实现的. 32位的M3有4GB的寻址空间,其中用于片上外设的有512MB,基地址为0x40000000. M3各外设基地址,包括片上外设.片上静态RAM和FLA ...
- 【Linux】Ubuntu下录屏&&制作GIF
在做Android的时候,想制作GIF用来演示效果.一番摸索.找到了一个简单可行的办法: App在模拟器中执行,用录屏软件录制.再将视频转成GIF. 系统: Ubuntu 15.04 录屏软件: Re ...
- What are the top 10 things that we should be informed about in life
1.Realize that nobody cares, and if they do, you shouldn't care that they care. Got a new car? Nobod ...