之前就有写过LiteDB数据库相关的一篇文章,不过内容比较简单,简单的增删查改,最近项目中又有场景要用到数据库,索性重新写了一篇。

LiteDBHelper.cs

LiteDBHelper.cs

public sealed class LiteDBHelper{private static readonly Lazy<LiteDBHelper> lazy = new Lazy<LiteDBHelper>(() => new LiteDBHelper());public static LiteDBHelper Instance { get { return lazy.Value; } }private LiteDBHelper(){}public LiteDB.LiteDatabase db = new LiteDB.LiteDatabase(GetDBPath());public ILiteCollection<A1DataModel> GetA1DataModel(){return db.GetCollection<A1DataModel>();}public ILiteCollection<A2DataModel> GetA2DataModel(){return db.GetCollection<A2DataModel>();}public ILiteCollection<B1DataModel> GetB1DataModel(){return db.GetCollection<B1DataModel>();}public ILiteCollection<B2DataModel> GetB2DataModel(){return db.GetCollection<B2DataModel>();}public static string GetDBPath(){string connectionString = string.Concat(Globals.Dir_Record_MesData, DateTime.Now.ToString("yyyy-MM-dd"), "\\");if (!Directory.Exists(connectionString)){Directory.CreateDirectory(connectionString);}connectionString = connectionString + $"/MesData{DateTime.Now.ToString("yyyyMMdd")}.db";if (!File.Exists(connectionString)){File.Create(connectionString).Dispose();  //创建完文件之后,要把资源释放掉,才能继续往文件里书写内容}return connectionString;}public class A1DataModel{public ObjectId Id { get; set; }//唯一标志,序号public int CellId { get; set; }//穴位号码public string StrNo { get; set; }//串码public DateTime datetime { get; set; }//获取到的时间public int IsUpload { get; set; }//是否上传了public DateTime ModifyTime { get; set; }//最后修改时间}public class A2DataModel{public ObjectId Id { get; set; }//唯一标志,序号public int CellId { get; set; }//穴位号码public string StrNo { get; set; }//串码public DateTime datetime { get; set; }//获取到的时间public int IsUpload { get; set; }//是否上传了public DateTime ModifyTime { get; set; }//最后修改时间}public class B1DataModel{public ObjectId Id { get; set; }//唯一标志,序号public int CellId { get; set; }//穴位号码public string StrNo { get; set; }//串码public DateTime datetime { get; set; }//获取到的时间public int IsUpload { get; set; }//是否上传了public DateTime ModifyTime { get; set; }//最后修改时间}public class B2DataModel{public ObjectId Id { get; set; }//唯一标志,序号public int CellId { get; set; }//穴位号码public string StrNo { get; set; }//串码public DateTime datetime { get; set; }//获取到的时间public int IsUpload { get; set; }//是否上传了public DateTime ModifyTime { get; set; }//最后修改时间}}

这个位置,我将四个实体模型都写进了这个单例里面,这样方便看一下,同时单例模式也是运用的Lazy   延迟加载对象,来实现对象的线程安全。

接下来我们看如果引用这些操作。

数据的增删查改

 var db = LiteDataBase.LiteDBHelper.Instance.GetA1DataModel();for (int i = 1; i < 11; i++){db.Insert(new A1DataModel(){CellId = i,datetime = DateTime.Now,IsUpload = i % 2 == 0 ? 0 : 1,StrNo = Guid.NewGuid().ToString().Replace("-", "").ToUpper()});Thread.Sleep(50);}var gg = db.Query().Where(x => x.datetime.ToString().Contains("2022")).OrderByDescending(x=>x.datetime).ToList();dgv_data.DataSource = gg;
  A1DataModel dt1 = LiteDataBase.LiteDBHelper.Instance.GetA1DataModel().FindOne(x => x.StrNo == strNo);dgv_data.DataSource = dt1;

使用LinqToSQL

使用LinqToSQL进行条件查询以及筛选

 List<A1DataModel> ls = LiteDataBase.LiteDBHelper.Instance.GetA1DataModel().Query().ToList();var qulist = (from c in lsorderbyc.datetime ascendingwhere c.IsUpload == 0select c.StrNo).Take(1).ToList();string val = qulist[0].ToString();dgv_data.DataSource = val;

进行查询修改操作

 A1DataModel am1 = LiteDataBase.LiteDBHelper.Instance.GetA1DataModel().FindOne(x => x.StrNo == strNoinfo);am1.IsUpload = 1;am1.ModifyTime = DateTime.Now;am1.CellId = cellIndex;result = LiteDataBase.LiteDBHelper.Instance.GetA1DataModel().Update(am1);

LiteDB是一个小型、快速、轻量级的.NET NoSQL嵌入式数据库。

  • Serverless NoSQL Document Store
  • 简单的API,类似于MongoDB
  • 单个DLL中.NET 4.5/NETStandard1.3/2.0的100%C代码(小于450kb)
  • Thread-safe
  • 具有完整事务支持的ACID
  • 写入失败后的数据恢复(WAL日志文件)
  • 使用DES(AES)加密的数据文件加密
  • 使用属性或fluent mapper API将您的POCO类映射到BsonDocument
  • 存储文件和流数据(如MongoDB中的GridFS)
  • 单数据文件存储(如SQLite)
  • 索引文档字段以进行快速搜索
  • LINQ对查询的支持
  • SQL-Like访问/转换数据的命令
  • LiteDB Studio-用于数据访问的漂亮UI
  • 开源,人人免费-包括商业用途
  • 从NuGet安装:Install-Package LiteDB

New v5

  • 新的存储引擎
  • read操作没有锁(多个读卡器)
  • 每个集合Write个锁(多个写入程序)
  • Internal/System collections
  • New SQL-Like Syntax
  • 新的查询引擎(支持投影、排序、筛选、查询)
  • 部分文档加载(根级别)

C# 嵌入式数据库LiteDB相关推荐

  1. 使用 C# 开发的轻量级开源数据库 LiteDB

    你好,这里是 Dotnet 工具箱,定期分享 Dotnet 有趣,实用的工具或组件,希望对您有用!   简介   LiteDB 是一个小型.快速.轻量级的 .NET NoSQL 嵌入式数据库,也就是我 ...

  2. lmdb简介——结合MVCC的B+树嵌入式数据库

    lmdb简介 lmdb是openLDAP项目开发的嵌入式(作为一个库嵌入到宿主程序)存储引擎.其主要特性有: 基于文件映射IO(mmap) 基于B+树的key-value接口 基于MVCC(Multi ...

  3. Java与嵌入式数据库SQLite的结合

    为什么80%的码农都做不了架构师?>>>    最近研究了一下嵌入式数据库,并使用Java与一个叫做SQLite的轻量级数据库结合写了个小程序,这个过程中也获得了不少经验,下面来总结 ...

  4. SEPM嵌入式数据库损坏的一种修复方法及sem5.log的缩小方法

    若要修复SEPM嵌入式数据库损坏,可参考下面的方法: 1. 运行嵌入式数据库进程 DBSRV9.EXE(program files\symantec\symantec endpoint protect ...

  5. .NET平台开源项目速览(3)小巧轻量级NoSQL文件数据库LiteDB

    今天给大家介绍一个不错的小巧轻量级的NoSQL文件数据库LiteDB.本博客在2013年也介绍过2款.NET平台的开源数据库: 1.[原创]开源.NET下的XML数据库介绍及入门 2.[原创]C#开源 ...

  6. java做一个简单的数据库,哪个嵌入式数据库用Java写成一个简单的键/值存储?

    我最近问了一个关于Neo4j的问题,我有工作,似乎很好.它是可嵌入的,它是用Java编写的,没有(太)许多依赖. 然而,它是一个图形数据库,我不知道这是一个好主意或不使用它作为一个简单的键/值存储. ...

  7. 关于java嵌入式数据库的选择,强烈建议H2 嵌入式数据库

    2019独角兽企业重金招聘Python工程师标准>>> 不听红薯言,吃亏在眼前. 先发表个人意见,Derby是垃圾,H2王道. 这段时间开发movingLife合租记账软件过程中,开 ...

  8. 【渝粤教育】广东开放大学 嵌入式数据库 形成性考核 (48)

    选择题 题目:SQL语句中的条件用以下哪一项来表达( ) 题目:"Create Unique Index AAA On 学生表(学号)"将在学生表上创建名为I_xsb的( ). 题 ...

  9. 嵌入式数据库 SQLite 浅析

    SQLite是一个非常轻量级自包含(lightweight and self-contained)的DBMS,它可移植性好,很容易使用,很小,高效而且可靠.SQLite嵌入到使用它的应用程序中,它们共 ...

  10. SQLite/嵌入式数据库

    SQLite/嵌入式数据库 的项目要么不使用数据库(一两个文配置文件就可以搞定),要么就会有很多的数据,用到 postgresql,操练sqlite的还没有.现在我有个自己的小测试例子,写个数据库对比 ...

最新文章

  1. html新增了哪些功能,HTML5相比HTML新增了哪些功能?
  2. 每一个有理想的程序员都应该读的一本书-《rework》
  3. java上课作业(第三次)
  4. 《游戏设计师修炼之道:数据驱动的游戏设计》一3.8小结
  5. windows.h和winsock2.h包含顺序问题(转)
  6. 【转】AB实验设计思路及实验落地
  7. WinSocket模型的探讨——完成端口模型
  8. spark学习-52-Spark的org.apache.spark.SparkException: Task not serializable
  9. python常用排序_python中的各种排序
  10. BGP(2):BGP 的报文格式
  11. leaflet 加载海量点位,点击marker 查看详情功能
  12. C++读取Wav文件
  13. 微服务理论与实践[1]-什么是微服务
  14. Python+tkinter库实现简单图书管理系统
  15. 软件功能测试包含了哪些测试项目?功能测试报告收费标准
  16. 好诗分享_《我想和你一起生活 》
  17. 北大操作系统陈向群第六章知识点
  18. underscore.js源码整体框架解析
  19. 仿阿姨帮|58到家上门O2O系统源码( BAOCMS二次开发 )
  20. JS_Detail和Discipline

热门文章

  1. android加载obj文件,android – 从SD卡Rajawali解析.obj模型
  2. iOS-性能优化的那些事
  3. i350在linux系统刷MAC,MAC 10.14 安装教程10-基于黑果小兵大神EFI文件的修改过程
  4. jenkins中配置git下载代码
  5. python批量修改文件名加后缀_python文件操作之批量修改文件后缀名的方法
  6. 强制卸载pip以及安装老版本pip
  7. 【滤波器】3. 同相输入有源低通滤波器
  8. 【并联机构工作空间分析系列1】 多个圆/圆环求交 得到重叠部分边界 Matlab程序
  9. 证件照更换背景 裁剪尺寸 智能图片放大 照片 证件照大师
  10. Win10为什么电脑没有本地组策略编辑器