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 ...
随机推荐
- JS给TR隔行换色,鼠标经过有动感
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DT ...
- java 字符串解析为json 使用org.json包的JSONObject+JSONArray
参考: https://blog.csdn.net/xingfei_work/article/details/76572550 java中四种json解析方式 JSONObject+JSONArray ...
- Redis几个认识误区(转)
add by zhj: 文章很老了,2010年的,注意,下面几点是作者认为的误区 原文:http://timyang.net/data/redis-misunderstanding/ 前几天微博发生了 ...
- 我的Android进阶之旅------>Android Listview跳到指定条目位置的两种实现方法
前言 今天实现ListView跳转到第一个条目位置时,使用smoothScrollToPosition(int position)方法跳转实现了,但是交互说不需要这样的动画效果,需要直接跳转到第一项, ...
- Django - ModelForm组件
一.ModelForm组件 这是一个神奇的组件,通过名字我们可以看出来,这个组件的功能就是把model和form组合起来,先来一个简单的例子来看一下这个东西怎么用:比如我们的数据库中有这样一张学生表, ...
- EasySQLMAIL使用实践系列
原文:http://blog.sina.com.cn/s/articlelist_5713986487_0_1.html 通过sql语句发送微信消息(转) 使用EasySQLMAIL的外部接口功能实现 ...
- 简单的 H5 视频推流解决方案
导语 随着直播平台爆发式增长,直播平台从 PC 端转战移动端,紧跟着直播的潮流,自己学习实现了一套简单的 H5 视频推流的解决方案,下面就给小伙伴们分享一下自己学习过程中的经验. 环境部署 1. 配置 ...
- jvm堆配置参数
1.-Xms初始堆大小默认物理内存的1/64(<1GB)(官方建议)2.-Xmx最大堆大小默认物理内存的1/4(<1GB)(官方建议),实际中建议不大于4GB3.一般建议设置 -Xms=- ...
- 吴超老师课程--Sqoop的安装和介绍
SQOOP是用于对数据进行导入导出的. (1)把MySQL.Oracle等数据库中的数据导入到HDFS.Hive.HBase中 (2)把HDFS.Hive.HBase中的数据导出到MySQ ...
- String与反序
将String类型的字符串里的内容进行反序排列得到一个新的String类型字符串,下面提供两种方法实现: 法1.先将原String类型字符串转换为字符数组,通过字符数组来操作各个位上的单个字符,通过对 ...