首先需要在WebConfig中配置连接字符串和数据库类型。providerName是一个枚举类型:Access,MySql,Oracle,SQLite,SqlServer。如果忽略该属性,框架会默认使用SqlServer数据库。
<connectionStrings> <add name="default" connectionString="Data Source=192.168.0.101;Database=DB_Demo;uid=sa;pwd=123" providerName="SqlServer"/> </connectionStrings>
实体类需要继承EntityBase基类。属性,外键以及构造函数如示例。通常情况下,实体类由代码生成工具进行维护。GetProperty和SetProperty是基类中的方法。这样可以避免使用反射影响效率。
public class RolesEntity : EntityBase { public RolesEntity(){ } public RolesEntity(EntityBase fkObject) : base(fkObject) { } public string RoleId { get { return GetProperty<string>("RoleId"); } set { SetProperty("RoleId", value); } } public string RoleName { get { return GetProperty<string>("RoleName"); } set { SetProperty("RoleName", value); } } } public class PersonsEntity : EntityBase { public PersonsEntity() { this.RolesModel = new RolesEntity(this); } public PersonsEntity(EntityBase fkObject) : base(fkObject) { } public string Id { get { return GetProperty<string>("Id"); } set { SetProperty("Id", value); } } public string Name { get { return GetProperty<string>("Name"); } set { SetProperty("Name", value); } } public string Sex { get { return GetProperty<string>("Sex"); } set { SetProperty("Sex", value); } } public int Age { get { return GetProperty<int>("Age"); } set { SetProperty("Age", value); } } public string RoleId { get { return GetProperty<string>("RoleId"); } set { SetProperty("RoleId", value); } } public RolesEntity RolesModel { get; set; } }
1.添加记录。使用SQL类构建一条INSERT语句。参数可以使用格式化参数方式,也可以使用重载方法自己构建DataParameter对象。使用SqlMap类执行该SQL对象。
/// <summary> /// 添加一条记录 /// </summary> /// <param name="entity">待添加的实体对象</param> /// <returns>true:添加成功 false:添加失败</returns> public bool Add(RolesEntity entity) { SQL sql = SQL.Build("INSERT INTO Roles(RoleId,RoleName) VALUES(?,?)", entity.RoleId, entity.RoleName); return SqlMap<RolesEntity>.ParseSql(sql).Execute() > 0; }
2.更新记录。使用SQL类构建一条UPDATE语句。参数可以使用格式化参数方式,也可以使用重载方法自己构建DataParameter对象。使用SqlMap类执行该SQL对象。
/// <summary> /// 更新一条记录 /// </summary> /// <param name="entity">待更新的实体对象</param> /// <returns>true:更新成功 false:更新失败</returns> public bool Update(RolesEntity entity) { SQL sql = SQL.Build("UPDATE Roles SET RoleName=? WHERE RoleId=?", entity.RoleName, entity.RoleId); return SqlMap<RolesEntity>.ParseSql(sql).Execute() > 0; }
3.删除记录。使用SQL类构建一条DELETE语句。参数可以使用格式化参数方式,也可以使用重载方法自己构建DataParameter对象。使用SqlMap类执行该SQL对象。
/// <summary> /// 删除一条记录 /// </summary> /// <param name="roleId">角色编号</param> /// <returns>true:删除成功 false:删除失败</returns> public bool Delete(string roleId) { SQL sql = SQL.Build("DELETE FROM Roles WHERE RoleId=?", roleId); return SqlMap<RolesEntity>.ParseSql(sql).Execute() > 0; }
4.批量操作。SqlMap支持批量SQL的执行(内部事务)。也可以手动使用事务批量执行方法。
/// <summary> /// 批量添加记录 /// </summary> /// <param name="list">待添加的实体对象列表</param> /// <returns>true:添加成功 false:添加失败</returns> public bool Add(List<RolesEntity> list) { List<SQL> sqlList = new List<SQL>(); foreach (RolesEntity entity in list) { SQL sql = SQL.Build("INSERT INTO Roles(RoleId,RoleName) VALUES(?,?)", entity.RoleId, entity.RoleName); sqlList.Add(sql); } return SqlMap<RolesEntity>.ParseSql(sqlList).Execute() > 0; } /// <summary> /// 批量添加记录 /// </summary> /// <param name="list">待添加的实体对象列表</param> /// <returns>true:添加成功 false:添加失败</returns> public bool Add(List<RolesEntity> list) { try { DBHelper.BeginTransaction(); foreach (RolesEntity entity in list) { this.Add(entity); } DBHelper.Commit(); return true; } catch { DBHelper.Rollback(); return false; } }
5.获取对象。使用SQL类构建一条SELECT语句。使用SqlMap的ToObject方法即可返回该对象。
/// <summary> /// 根据主键获取实体对象 /// </summary> /// <param name="roleId">角色编号</param> /// <returns>实体对象</returns> public RolesEntity GetModel(string roleId) { SQL sql = SQL.Build("SELECT * FROM Roles WHERE RoleId=?", roleId); return SqlMap<RolesEntity>.ParseSql(sql).ToObject(); }
6.获取对象列表。使用SQL类构建一条SELECT语句。使用SqlMap的ToList方法即可返回该对象。
/// <summary> /// 获取对象列表 /// </summary> /// <returns>对象列表</returns> public List<RolesEntity> GetList() { SQL sql = SQL.Build("SELECT * FROM Roles"); return SqlMap<RolesEntity>.ParseSql(sql).ToList(); }
7.获取Json对象和列表。
/// <summary> /// 根据主键获取Json对象 /// </summary> /// <param name="roleId">角色编号</param> /// <returns>Json对象</returns> public string GetJsonModel(string roleId) { SQL sql = SQL.Build("SELECT * FROM Roles WHERE RoleId=?", roleId); return SqlMap<RolesEntity>.ParseSql(sql).ToJsonObject(); } /// <summary> /// 获取Json对象列表 /// </summary> /// <returns>Json对象列表</returns> public string GetJsonList() { SQL sql = SQL.Build("SELECT * FROM Roles"); return SqlMap<RolesEntity>.ParseSql(sql).ToJsonList(); }
1.增改删的级联。开启事务操作后,先调用外键表的删除方法,再调用主键表的删除方法即可。更新,添加操作类似注意表的顺序即可。
/// <summary> /// 级联删除 /// </summary> /// <param name="entity">待删除的实体对象</param> /// <returns>true:删除成功 false:删除失败</returns> public bool Delete_FK(PersonsEntity entity) { try { DBHelper.BeginTransaction(); this.Delete(entity); new RolesBiz().Delete(entity.RolesModel); DBHelper.Commit(); return true; } catch { DBHelper.Rollback(); return false; } }
2.多表连接查询,填充两张表的结果。查询时使用JOIN语句即可。数据绑定时只需使用:Eval("RolesModel.RoleName")。
/// <summary> /// 获取对象列表 /// </summary> /// <returns>对象列表</returns> public List<PersonsEntity> GetList_FK() { SQL sql = SQL.Build("SELECT * FROM Persons INNER JOIN Roles ON Persons.RoleId=Roles.RoleId"); return SqlMap<PersonsEntity>.ParseSql(sql).ToList(); } <asp:GridView ID="gvPersonList" runat="server" AutoGenerateColumns="False"> <Columns> <asp:BoundField DataField="Id" HeaderText="编号" /> <asp:BoundField DataField="Name" HeaderText="姓名" /> <asp:BoundField DataField="Sex" HeaderText="性别" /> <asp:BoundField DataField="Age" HeaderText="年龄" /> <asp:BoundField DataField="RoleId" HeaderText="角色编号" /> <asp:TemplateField HeaderText="角色名称"> <ItemTemplate> <%# Eval("RolesModel.RoleName")%> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView>
分页处理只需使用SQL对象的Limit方法即可实现。SQL对象的RecordCount属性返回总记录条数。
/// <summary> /// 获取分页后对象列表 /// </summary> /// <param name="pageSize">每页显示的记录条数</param> /// <param name="pageNumber">当前页索引</param> /// <param name="recordCount">总记录条数</param> /// <returns>分页后对象列表</returns> public List<RolesEntity> GetList(int pageSize, int pageNumber, out int recordCount) { SQL sql = SQL.Build("SELECT * FROM Roles").Limit(pageSize, pageNumber); recordCount = sql.RecordCount; return SqlMap<RolesEntity>.ParseSql(sql).ToList(); }
SqlMap对象的批量操作方法框架内部已经实现事务处理。如需手动事务处理需要使用DBHelper中的事务处理方法。
public bool TranDemo() { try { DBHelper.BeginTransaction(); //需要事务处理的逻辑 DBHelper.Commit(); return true; } catch { DBHelper.Rollback(); return false; } }