DbCRUD.LiteDB
1.8.4
dotnet add package DbCRUD.LiteDB --version 1.8.4
NuGet\Install-Package DbCRUD.LiteDB -Version 1.8.4
<PackageReference Include="DbCRUD.LiteDB" Version="1.8.4" />
paket add DbCRUD.LiteDB --version 1.8.4
#r "nuget: DbCRUD.LiteDB, 1.8.4"
// Install DbCRUD.LiteDB as a Cake Addin #addin nuget:?package=DbCRUD.LiteDB&version=1.8.4 // Install DbCRUD.LiteDB as a Cake Tool #tool nuget:?package=DbCRUD.LiteDB&version=1.8.4
DbCRUD
介绍
开发项目过程中,不同的开发项目可能会用到不同的数据库,初次接触一门新的数据库,要投入不少的学习成本和踩不少的坑。本库就是基于此背景开发,�?SQL �?NOSQL 常用数据库增删改查,并尽量保持一样的输入输出,减少你学习成本投入。我踩过的坑,不用你再踩�?
软件架构
使用 c# .core(现在统一�?net)开发,可自行实�?IDbCRUD 接口自由扩展�?
安装教程
- :tw-1f1f1: 安装 DbCRUD.LiteDB
Install-Package DbCRUD.LiteDB 安装包
使用说明
LiteDB
- 数据库连接及初始�?
//数据库连�?Database connection IDbCRUD testdb = new LiteDbCRUD(@"filename=CRUDTestDB.db;Mode=Shared"); //共享模式访问数据�? //IDbCRUD testdb = new LiteDbCRUD(@"filename=CRUDTestDB.db");//相对路径([程序目录]\DATA) //IDbCRUD testdb = new LiteDbCRUD(@"filename=C:\CRUDTestDB.db");//绝对路径指定数据库保存路�?
插入数据
//**同步插入对象数据 Insert object data synchronously
var customer = new CrudTestModel
{
//Id = id + 50, ////实体类,ID不赋值,默认根据数据类型自动整数编号,支持int,long,objectid
Name = "objectData",
Phones = new string[] { "80000", "90000" },
IsActive = true,
Dic = new Dictionary<string, object>
{
{ "Name", "Embed_Data" },
{ "DDate", DateTime.Now }
},
FFloat = random.NextDouble(),
};
var result = testdb.Insert(tb_custormer, customer);
//**同步插入字典数据 Insert dictionary data synchronously
var dic1 = new Dictionary<string, object>
{
//{ "_id", 1 },//***如果不指定ID,插入时会自动编一个objectid的唯一ID
{ "Name", "LitedbCRUD" },
{ "Qty",random.Next(1,10000) },
{ "DDate", DateTime.Now }
};
var result11 = testdb.Insert(autoIDData, dic1);
//插入JSON数据
string jsondata = JsonConvert.SerializeObject(dic1);
var result12 =testdb.Insert(tb_jsondata, jsondata);
//**sql命令插入
testdb.Insert($"insert into {sqldata}('name','date') values ('test','{DateTime.Now.ToString("yyyy-MM-dd")}'");
//**批量插入列表 Batch insert
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", "Batch insert" },
{ "Qty",random.Next(1,10000) },
{ "DDate", DateTime.Now }
};
listdata.Add(dic2);
}
var listResult= testdb.Insert(dictable, listdata);
更新数据
var updata = new Dictionary<string, object>
{
{ "Name", "更新指定字段数据" },
{ "Qty", 300}
};
var upresult = testdb.UpDate(dictable, updata, "_id=2"); //更新_id=2的数�?
更新及插入数据(数据存在更新,不存在插入�?
//** 更新或插入数�?Update or insert data
var dic1 = new Dictionary<string, object>
{
{ "_id", 2 },
{ "Name", "Insert or update" },
{ "Qty", 200},
{ "DDate", DateTime.Now }
};
var result= testdb.Upsert(dictable, dic1);
Assert.IsTrue(result.Status);
//** Batch insert or update
var dic3 = new Dictionary<string, object>
{
{ "_id", 3 },
{ "Name", "Batch insert or update" },
{ "Qty", 300},
{ "DDATE", DateTime.Now }
};
List<Dictionary<string,object>> listdata=new List<Dictionary<string, object>> { dic3,dic1};
var listresult = testdb.Upsert(dictable, listdata);
查询数据
//查找id=2的数�?
var databyid = testdb.FindByID<Dictionary<string, object>>(dictable,2);
//查找Qty>10的数�?
var wheredata = testdb.Find<Dictionary<string, object>>(dictable, "Qty>10");
//sql语句查找的数�?
string sqlcmd = $"select * from {dictable}";
var sqldata = testdb.Find<Dictionary<string, object>>(sqlcmd);
//查找id>2的数�?返回按DDATE排序,并排除dic列的最新一条数�?
var ondresult = testdb.FindOne<CrudTestModel>(tb_custormer, "_id>2", project: "!dic", sort: "!DDATE");
//【SQL语法模糊查询】,查找name�?Litedb'开头的数据,不区分大小写
var wheredata1 = testdb.Find<Dictionary<string, object>>(autoIDData, "Name like'Litedb%'");
//【简写语法】分页查找Qty>10,返回除_id列,按DDATE倒序排序的数据,返回第一�?0条数据�?
var pagedata = testdb.GetPagingData<Dictionary<string, object>>(tb_jsondata, "Qty>10", project: "!_id", sort: "!DDATE", pageindex: 1, pagecount: 10);
//【SQL语法】分页查找Qty>10,返回除_id列,按DDATE倒序排序的数据,返回第一�?0条数据�?
var mgdb_pagedata = testdb.GetPagingData<Dictionary<string, object>>(tb_jsondata, "Qty>10", project: "name,ddate", sort: "DDATE desc", pageindex: 1, pagecount: 10);
Assert.AreEqual(pagedata.Count(), mgdb_pagedata.Count());
//【返回DataTable】分页查找Qty>10,返回除_id列,按DDATE倒序排序的数据,返回第一�?0条数据�?
var datatable_pagedata = testdb.GetPagingData(autoIDData, "Qty>10", project: "!_id", sort: "!DDATE", pageindex: 1, pagecount: 10);
//【多条件查询】分页查找Qty>10,返回除_id列,按DDATE倒序排序的数据,返回第一�?0条数据�?
var mu_where = testdb.GetPagingData<Dictionary<string, object>>(dictable, "_id>=6 and Qty>10", sort: "!DDATE", pageindex: 1, pagecount: 10);
//【日期范围查询】查找DDATE>='2023-06-05 09:12:24' �?DDATE<='2023-06-05 13:28:48'的数据�?
var date_result = testdb.GetPagingDataAndResult<Dictionary<string, object>>(dictable, $"DDATE>='2023-06-05 09:12:24' and DDATE<='{DateTime.Now:yyyy-MM-dd HH:mm:ss}'");
//【SQL语法in查询】查找Qty=200�?00的数据�?
var sql_in_result = testdb.GetPagingDataAndResult<Dictionary<string, object>>(dictable, "Qty in(200,300)");
//【LiteDB in查询】查找Qty=200�?00的数据�?
var lite_in_result = testdb.GetPagingDataAndResult<Dictionary<string, object>>(dictable, "Qty in[200,300]");
//【in模糊查询】查找Name=Batch insert和data结尾的数据。不支持模糊匹配�?
var in_fuzzy = testdb.GetPagingDataAndResult<Dictionary<string, object>>(dictable, "Name in('Batch insert','data')");
Assert.IsNotNull(in_fuzzy.Data);
//【委托查询】查找_id>=6 and Qty>10的数据。数据在委托中返回,方便进行数据处理
var action_result = testdb.GetPagingDataAction<CrudTestModel1>(dictable, "_id>=6 and Qty>10", datalist =>
{
double sum = datalist.Sum(s => s.FFloat);
});
删除数据
//**删除_id=2的数�?
var result = testdb.Delete(dictable,2);
//** 删除_id等于'ID82'的记�?注意_id列是字符串时,如果要删除ID值,必须具名参数,即增加'id:'.否则会当成条件,导致删除失败
var result22 = testdb.Delete(tb_stringID,id:"ID82");
//**删除qty<30的数�?
var wherresult = testdb.Delete(dictable, "Qty<30");
//**使用sql语句删除_id=30的数�?
string sql = $"delete {dictable} where _id=30";
var sqlresult = testdb.Delete(sql);
//单值key-value string key = "test"; var v = DateTime.Now; //保存 var result = testdb.SaveKeyValue(key, v); //判断是否存在 bool isExists= testdb.KeyValueExists(key) //获取 var getv = testdb.GetKeyValue<DateTime>(key); //删除 bool ok= testdb.DelKeyValue(key) //对象key-value var crud_result = testdb.FindAndResult<CrudTestModel>(tb_custormer, $"{testdb.IdName}=1"); if (crud_result.Data != null) { //单对�? string objkey = "object_keyvalue"; var obj_result = testdb.SaveKeyValue(objkey, crud_result.Data.FirstOrDefault()); Assert.IsTrue(obj_result.State); Assert.IsTrue(testdb.KeyValueExists(objkey)); var objv = testdb.GetKeyValue<CrudTestModel>(objkey); Assert.IsTrue(objv.ID>0); //数组列表 string arraykey = "array_keyvalue"; var arraykey_result = testdb.SaveKeyValue(arraykey, crud_result.Data); Assert.IsTrue(arraykey_result.State); Assert.IsTrue(testdb.KeyValueExists(arraykey)); var arraykeyv = testdb.GetKeyValue<IEnumerable<CrudTestModel>>(arraykey); Assert.IsTrue(arraykeyv.Count()>0); }
消息事件绑定
public DbTest() {
t estdb.Message += Testdb_Message;
}
private void Testdb_Message((string Message, string Level, DateTime Time) obj)
{
Debug.WriteLine($"{obj.Time}|{obj.Level}|{obj.Message}");
}
增删改查系列�?
- 🍁 LiteDB: Install-Package DbCRUD.LiteDB
- 🍃 MongoDB: Install-Package DbCRUD.MongoDB
- 🍀 Mysql: Install-Package DbCRUD.Mysql
- 🌿 Sqlite: Install-Package DbCRUD.Sqlite
- 🍂 SQL SERVER: Install-Package DbCRUD.SqlServer
一致的增删改查语法
LiteDB
IDbCRUD testdb = new LiteDbCRUD(@"filename=CRUDTestDB.db");
//【日期范围查询】查找DDATE>='2023-06-05 09:12:24' �?DDATE<='2023-06-05 13:28:48'的数据�?
var date_result = testdb.GetPagingDataAndResult<Dictionary<string, object>>(dictable, $"DDATE>='2023-06-05 09:12:24' and DDATE<='{DateTime.Now:yyyy-MM-dd HH:mm:ss}'");
MongoDB
IDbCRUD testdb =new MongoDbCRUD("mongodb://localhost:27017/testdb");
//【日期范围查询】查找DDATE>='2023-06-05 09:12:24' �?DDATE<='2023-06-05 13:28:48'的数据�?
var date_result = testdb.GetPagingDataAndResult<Dictionary<string, object>>(dictable, $"DDATE>='2023-06-05 09:12:24' and DDATE<='{DateTime.Now:yyyy-MM-dd HH:mm:ss}'");
Mysql
IDbCRUD testdb = new MysqlCRUD(@"Server=127.0.0.1;Database=testdb;Uid=root;Pwd=;");
//【日期范围查询】查找DDATE>='2023-06-05 09:12:24' �?DDATE<='2023-06-05 13:28:48'的数据�?
var date_result = testdb.GetPagingDataAndResult<Dictionary<string, object>>(dictable, $"DDATE>='2023-06-05 09:12:24' and DDATE<='{DateTime.Now:yyyy-MM-dd HH:mm:ss}'");
Sqlite
IDbCRUD testdb = new SqliteCRUD($@"Data Source=sqlitedb.db; Cache=Shared")
//【日期范围查询】查找DDATE>='2023-06-05 09:12:24' �?DDATE<='2023-06-05 13:28:48'的数据�?
var date_result = testdb.GetPagingDataAndResult<Dictionary<string, object>>(dictable, $"DDATE>='2023-06-05 09:12:24' and DDATE<='{DateTime.Now:yyyy-MM-dd HH:mm:ss}'");
SQL SERVER
IDbCRUD testdb = new SqlServerCRUD(@"Data Source=xxx;Initial Catalog=xxx;User ID=sa;Password=xxx;Encrypt=True;TrustServerCertificate=True;");
//【日期范围查询】查找DDATE>='2023-06-05 09:12:24' �?DDATE<='2023-06-05 13:28:48'的数据�?
var date_result = testdb.GetPagingDataAndResult<Dictionary<string, object>>(dictable, $"DDATE>='2023-06-05 09:12:24' and DDATE<='{DateTime.Now:yyyy-MM-dd HH:mm:ss}'");
实体模型
public class CrudTestModel
{
[BsonId]
public int ID { get; set; }
public string Name { get; set; }
public string[] Phones { get; set; }
public bool IsActive { get; set; }
public Dictionary<string, object> Dic { get; set; }
public double FFloat { get; set; } = 0.118;
public DateTime DDATE { get; set; } = DateTime.Now;
}
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 is compatible. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- DbCRUD (>= 1.6.1)
- LiteDB (>= 5.0.21)
- Newtonsoft.Json (>= 13.0.3)
-
net6.0
- DbCRUD (>= 1.6.1)
- LiteDB (>= 5.0.21)
- Newtonsoft.Json (>= 13.0.3)
-
net7.0
- DbCRUD (>= 1.6.1)
- LiteDB (>= 5.0.21)
- Newtonsoft.Json (>= 13.0.3)
-
net8.0
- DbCRUD (>= 1.6.1)
- LiteDB (>= 5.0.21)
- Newtonsoft.Json (>= 13.0.3)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
1.8.4 | 89 | 10/25/2024 |
1.8.3 | 83 | 10/24/2024 |
1.8.2 | 113 | 6/24/2024 |
1.8.1 | 154 | 4/27/2024 |
1.8.0 | 128 | 4/8/2024 |
1.7.4 | 130 | 4/6/2024 |
1.7.3 | 156 | 3/22/2024 |
1.7.2 | 148 | 3/21/2024 |
1.7.1 | 618 | 11/13/2023 |
1.7.0 | 492 | 11/10/2023 |
1.6.9 | 530 | 10/31/2023 |
1.6.8 | 623 | 9/3/2023 |
1.6.7 | 634 | 8/27/2023 |
1.6.6 | 747 | 8/4/2023 |
1.6.5 | 764 | 7/31/2023 |
1.6.4 | 704 | 7/27/2023 |
1.6.3 | 721 | 7/24/2023 |
1.6.2 | 737 | 7/23/2023 |
1.6.1 | 763 | 7/20/2023 |
1.6.0 | 742 | 7/14/2023 |
1.5.9 | 771 | 7/9/2023 |
1.5.8 | 729 | 7/7/2023 |
1.5.7 | 763 | 7/6/2023 |
1.5.6 | 776 | 6/26/2023 |
1.5.5 | 761 | 6/18/2023 |
1.5.4 | 745 | 6/13/2023 |
1.5.3 | 721 | 6/11/2023 |
1.5.1 | 743 | 6/9/2023 |
1.5.0 | 776 | 6/8/2023 |
1.4.0 | 751 | 6/6/2023 |
1.3.0 | 744 | 5/14/2023 |
1.2.4 | 783 | 5/11/2023 |
1.2.3 | 770 | 5/10/2023 |
1.2.2 | 742 | 5/8/2023 |
1.2.1 | 773 | 5/7/2023 |
1.2.0 | 750 | 5/6/2023 |
1.1.0 | 729 | 5/4/2023 |
1.0.0 | 754 | 4/25/2023 |
优化数据库连接