通用的CRUD之LiteDB

前言

你要开发一个系统,是不是首要任务是先建库,建表,建字段,既所谓的数据建模(听起来高大上一点,数据建模也确实是个烧脑的活),要费不少功夫。
不知你是否遇到过这样的场景。A产品有3个测试参数,B产品有6个测试参数,而且值和类型都各不相同,用SQL你要怎么建表呢?
有人会说这简单“参数名,参数值两列搞定”,NO!数据类型考虑了吗,数据量考虑了吗?
有人又说"每个参数建一列,A,B两个产品共建9列用来存各自的值。",如果某天C产品又有9个参数呢,又去增加字段?,你又说”item1,item2...N,多增加几十个备用",有考虑过查询吗?有考虑过他人看到这样的表不头大吗?
还有人说“一列JSON列搞定”,数据查询和数据统计一样把人折磨的不要不要的。

NOSQL的出现,让你眼前一亮,上面的问题迎刃而解。建库,建表,甚至建字段都是很愉悦的事情,你传入什么数据,NOSQL就给你自动创建好,相应的数据库和表(准确的说NoSQL的表叫数据集)。
同一个列可以有不同数据库类型,某一列存单纯的一个数字,还是一个对象都可以随心所欲。

今天要介绍的就是嵌入式NOSQL数据库,LiteDB,就是一个NOSQL版的SQLite。
LiteDB是嵌入式,跨平台,纯c#开发的轻量数据库。详情,请移步到https://www.litedb.org了解。
笔者使用LiteDB,掐指一算,已有6个年头,虽然踩过不少坑,经历过数据库损坏的痛苦经历,但依然没有放弃它,还是爱不释手,因为它在某些应用场景确实非常贴近我的需求。目前经历过几次版本迭代,功能也越来越完善。
现在切入正题
让我一步一步带你增删改查。

安装

Install-Package DbCRUD.LiteDB 安装包

插入数据

插入对象数据到DB

          var dic1 = new Dictionary<string, object>
          {
              { "_id", 2 },
              { "Name", "n2" },
              { "Qty", 200},
              //{ "DDate", DateTime.Now }
          };
          string dictable = "dicdata";
          var result= testdb.Upsert(dictable, dic1);

插入JSON数据到DB

  var dic1 = new Dictionary<string, object>
           {
               { "Name", "n2" },
               { "Qty", 19},
               //{ "DDate", DateTime.Now }
           };
           //异步插入
           string jsondata = JsonConvert.SerializeObject(dic1);
           var result = await testdb.InsertAsync("jsondata", jsondata); 

SQL命令插入,方便喜欢SQL语句的开发人员

testdb.Insert("insert Sqldata('name','date') value ('test','2023-04-16')");

批量插入

 //插入列表
           List<Dictionary<string, object>> listdata = new List<Dictionary<string, object>>();
           int maxid = testdb.Max<int>(dictable);
           for (int i = 0; i < 10; i++)
           {
               maxid++;
               var dic2 = new Dictionary<string, object>
               {
                   { "_id",maxid },
                   { "Name", "n2" },
                   { "Qty", 19},
                   { "DDate", DateTime.Now }
               };
               listdata.Add(dic2);
           }
           var listResult= testdb.Insert(dictable, listdata);

更新数据

            //更新部分字段数据
           var updata = new Dictionary<string, object>
           {
               { "Name", "updatetest" },
               { "Qty", 300}
           };
           var upresult = testdb.UpDate(dictable, updata, "_id=2");

更新及插入数据(数据存在更新,不存在插入)

          var dic1 = new Dictionary<string, object>
          {
              { "_id", 2 },
              { "Name", "n2" },
              { "Qty", 200},
              //{ "DDate", DateTime.Now }
          };
          string dictable = "dicdata";
          var result= testdb.Upsert(dictable, dic1);

查询数据

         testdb.Find<Dictionary<string, object>>(dictable, "_id=2")

删除数据

  string dictable = "dicdata";
  var result = testdb.Delete(dictable,2);

更多使用方法请移步到仓库 https://gitee.com/lzcode/db-crud


我的分享希望能给你带去帮助,您的打赏是我继续为您分享的动力。

通用的CRUD之LiteDB

原文链接:https://www.cnblogs.com/zzwen/archive/2023/05/05/17351036.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:通用的CRUD之LiteDB - Python技术站

(0)
上一篇 2023年5月6日
下一篇 2023年5月6日

相关文章

  • 深入浅析C# 11 对 ref 和 struct 的改进

    深入浅析C# 11 对 ref 和 struct 的改进 简介 C# 11 是微软新推出的一项编程语言的更新版本,其中包含了对于 ref 和 struct 的一些优化改进。此次改进旨在提高代码的运行效率并降低代码运行的堆内存的占用。为了能够更好地理解这些改进,需要先了解 ref 和 struct 的相关知识。 ref 和 struct 在 C# 中,ref …

    C# 2023年6月6日
    00
  • C#一个简单的定时小程序实现代码

    下面是详细的讲解“C#一个简单的定时小程序实现代码”的完整攻略。 1. 设计思路 我们需要实现一个简单的定时小程序,应该首先考虑怎样实现计时功能。在C#中,常见的计时方式有两种:一种是使用System.Timer类,另一种是使用System.Threading.Timer类。这两种方式都可以实现定时器的功能,但有一定的差别。下面我们将分别介绍这两种方式的使用…

    C# 2023年5月31日
    00
  • vs2019 实现C#调用c++的dll两种方法

    vs2019 实现C#调用c++的dll两种方法 本文主要介绍使用vs2019实现C#调用c++的dll两种方法。 方法一:使用DllImport 编写C++动态链接库 cpp // cppdll.h extern “C” __declspec(dllexport) int add(int a, int b); cpp // cppdll.cpp int a…

    C# 2023年6月3日
    00
  • C#面向对象之模拟实现商城购物功能

    C#面向对象模拟实现商城购物功能可以分为以下几个步骤: 1. 创建商品类(Product)及其属性 第一步我们需要创建一个商品类,用来保存商品的相关信息。在C#中,创建类非常简单,只需要使用class关键字即可,具体实现如下: class Product { // 商品名称 public string Name { get; set; } // 商品价格 p…

    C# 2023年5月31日
    00
  • C#事件中关于sender的用法解读

    当我们定义一个事件时,必须要在事件的定义中指定sender参数。sender参数表示事件的触发者,用于在事件处理中判断事件的来源。 在事件的处理中,可以利用sender参数来获取事件的触发者,进行相应的处理。 下面我们通过代码示例来详细讲解C#事件中关于sender的用法。 示例1 public class MyEventArgs : EventArgs {…

    C# 2023年5月31日
    00
  • C#表达式目录树示例详解

    接下来我将为你详细讲解 C# 表达式目录树示例的完整攻略。 什么是C#表达式目录树? C# 表达式目录树是一个用于表示 C# 运行时代码语义的对象模型。它可以把 C# 代码解析为树型结构数据,这里的树指的是一种抽象的数据结构。在表达式目录树中,每个节点都代表着一个 C# 程序中的某个代码元素,比如方法调用、变量引用等。 表达式目录树的组成 C# 表达式目录树…

    C# 2023年5月31日
    00
  • C#更新SQLServer中TimeStamp字段(时间戳)的方法

    一、概述 TimeStamp字段也叫RowVersion字段,它的存储空间为8个字节,用来表示某一条记录的版本号,取值范围在datetime2类型的范围内,但它不是一个日期时间字段,也不是一个自增长字段,是Sql Server自有的一种数据类型。 在更新数据库表的时候,我们经常要更新TimeStamp字段,下面是C#更新SQLServer中TimeStamp…

    C# 2023年5月31日
    00
  • C#用户控件之温度计设计

    下面是关于”C#用户控件之温度计设计”的详细攻略: 步骤一:创建C#用户控件 在Visual Studio中创建一个类库项目,然后在项目中添加一个新的用户控件。给这个用户控件添加一个“温度计”名称属性,以便在使用控件时可以设置温度计的标签。 步骤二:定义属性 在用户控件类中定义“温度”属性。由于温度可以是一个实数,我们可以使用float或double类型来存…

    C# 2023年6月1日
    00
合作推广
合作推广
分享本页
返回顶部