# QuickCode **Repository Path**: azio/QuickCode ## Basic Information - **Project Name**: QuickCode - **Description**: No description available - **Primary Language**: C# - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2021-07-19 - **Last Updated**: 2021-07-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # QuickCode快速使用手册 ## 数据库操作 - **依赖核心DLL** ``` Mysoft.QuickCode.dll ``` - **引入依赖** ```csharp using Mysoft.QuickCode.DAL; ``` - **文档例子中用的BaseEntity数据结构** ```csharp using System; using Mysoft.Map.Extensions.DAL; namespace Mysoft.Test.Entity { [Serializable] [DataEntity(Alias = "myUser")] public class MyUser : BaseEntity { [DataColumn(PrimaryKey = true)] public Guid UserGUID{ set; get; } [DataColumn(IsNullable = true)] public string UserCode{ set; get; } [DataColumn(IsNullable = true)] public string UserName{ set; get; } [DataColumn(IsNullable = true)] public int IsDisabled{ set; get; } } } ``` - **数据新增** 1. **单条数据新增** ```csharp //要新增的数据 var user = new MyUser(){ UserGUID=Guid.NewGuid(), UserName="皮皮瞎" }; //新增或修改数据,如果数据库中根据主键查询不到对应的数据,则默认会新增,最终调用的是小平台的Insert方法。 QuickDAL.Context.SaveEntity(user); /* 此方法和上面方法的区别是,如果user对应的字段值未赋值,则会调用小平台的SetDefaultValue设置每个字段对应数据类型的默认值。 一般用于更新场景下,如果不需要全部设置未默认值,第二个参数不需要传 */ QuickDAL.Context.SaveEntity(user, true); ``` 2. **批量数据新增** ```csharp //假设这里新增了3个用户信息 var list = new List(); list.Add(ew MyUser(){ UserGUID=Guid.NewGuid(), UserName="皮皮瞎1" }); list.Add(ew MyUser(){ UserGUID=Guid.NewGuid(), UserName="皮皮瞎2" }); list.Add(ew MyUser(){ UserGUID=Guid.NewGuid(), UserName="皮皮瞎3" }); //批量写入用户信息到数据库。内部使用的是sqlbulkcopy实现,已经对字段或属性映射顺序自动处理,因此无字段顺序要求。 QuickDAL.Context.BatchInsert(list); ``` - **数据修改** 1. **通过实体方式修改** ```csharp user.UserName="皮皮虾"; user.IsDisabled=0; //如果IsDisabled数据类型为int类型,而非int?类型 /* 更新用户信息。由于IsDisabled为int类型,且int类型的默认值本身为0,所以在更新的时候,0不会被更新到数据库。 因为内部使用的小平台的Update方法。所以如果要更新,则需要使用SetDefaultValue方法设置。 */ QuickDAL.Context.SaveEntity(user); /* 更新用户信息。会将IsDisabled=0更新到数据库,同时其他字段如果也是默认值,则也会更新数据库。 此方式更新,务必在更新前先从数据库读取当前数据信息,再给要更新的字段赋值后再更新,同时启用事务。 如果采用new对象方式更新,数据库已存在值的其他字段也会更新为默认值。 */ QuickDAL.Context.SaveEntity(user, true); ``` 2. **通过Expression语法修改** ```csharp var userGUID = Guid.NewGuid(); //这种语法更新,会按需更新。 //第一个参数:a=>new MyUser(){UserName="皮皮瞎", IsDisabled=0}。指定了什么字段就更新什么字段。 //第二个参数则为更新的条件。 //翻译后的意思大约是:update myUser set UserName='皮皮瞎', IsDisabled=0 where UserGUID='xxxxxx' and IsDisabled<>0 QuickDAL.Context.UpdateEntity(a=>new MyUser(){UserName="皮皮瞎", IsDisabled=0}, a=>a.UserGUID=userGUID && a.IsDisabled<>0); ``` - **数据查询** 1. **单条数据查询** ```csharp //假如已知要查询用户的GUID var userGUID=Guid.NewGuid(); //通过主键查询单条记录。 var user = QuickDAL.Context.GetEntity(userGUID); //使用Expression表达式方式查询符合条件的第一条用户数据。 var user1 = QuickDAL.Context.GetEntity(a=>a.UserName=="皮皮瞎"); //在VB语言中中,由于VB无法自动区分委托和一般参数,所以使用Expression方式时,请使用方法GetEntityOne方法。如下: //Dim user1 As MyUser = QuickDAL(Of MyUser).Context.GetEntityOne(Function(a) a.UserName = "皮皮瞎"); ``` 2. **集合数据查询** ```csharp //批量查询用户编码不等于空或不为null的记录 var user = QuickDAL.Context.GetEntityList(a=> a.UserCode <> "" || a.UserCode.Sqlable().IsNotNull()); ``` - **数据删除** - **其他语法** 1. Exists ```csharp //判断数据库中是否存在满足条件的数据 var result = QuickDAL.Context.Exists(a=> a.UserCode <> "" || a.UserCode.Sqlable().IsNotNull()); ``` 2. Sqlable对象 > 常用开发中SQL中还有一些其他条件查询语法,不然:in,is null, is not null等,为了方便表达这些语义,因此将一些关键字语法 统一扩展到了Sqlable对象中。例如如下语法中,判断UserCode是否为null: ```csharp QuickDAL.Context.GetEntityList(a=> a.UserCode <> "" || a.UserCode.Sqlable().IsNotNull()); ``` *** ## Excell导入导出 - 依赖DLL ``` Mysoft.QuickCode.dll ``` - 引入依赖 ```csharp using Mysoft.QuickCode.Office; ``` 1. 数据导出 2. 数据导入 3. 高级导出 4. 高级导入