【LIYBFramework】使用教程二:数据访问类库使用方法
命名空间:LIYB.Framework.DataBaseAccess
文件:LIYB.Framework.DataBaseAccess.dll。
功能:封装对数据库的访问的各种操作。
使用本类库必要条件:类库操作的表必须有且只有一个主键字段,类型必须为GUIDEx,建立GUIDEx类型的脚本如下:EXEC sp_addtype N'GUIDEx', N'varchar (32)', N'null'
数据库配置:在LIYBFramework.Config中找到public配置节,添加以下信息(需要根据实际情况进行改动)
<Database Type="SqlServer" ConnStr="server=.;uid=sa;pwd=123;database=ETCMS;" AccessClass="LIYB.Framework.DataBaseAccess.SqlServerAccess,LIYB.Framework.DataBaseAccess" />
如果需要使用多个数据库,则在相应的配置节下配置各自的数据库连接字符串。
下面对各个功能进行详细说明。
1.实体自定义属性类:DBTableAttribute(ORMapping表映射类)、DBFieldAttribute(ORMapping字段映射类)
用来描述实体的DBTableAttribute第一个参数为实体对应的表名,第二个参数为表的主键字段;DBFieldAttribute有两个构造函数,只有一个参数的构造函数的参数表示字段名,有两个参数的构造函数第一个参数表示字段名,第二个参数表示是否主键字段。示例如下:
/// <summary>
/// 用户实体
/// </summary>
[Serializable]
[DBTable("Sys_tUser", "UserID")]
public class UserEntity
{
#region 成员变量
private string m_UserID;
private string m_LoginAccount;
#endregion
#region 构造函数
public UserEntity()
{
}
#endregion
/// <summary>
/// 用户ID,主键字段
/// </summary>
[DBField("UserID", true)]
public string UserID
{
get
{
return m_UserID;
}
set
{
m_UserID = value;
}
}
/// <summary>
/// 登录帐号
/// </summary>
[DBField("LoginAccount")]
public string LoginAccount
{
get
{
return m_LoginAccount;
}
set
{
m_LoginAccount = value;
}
}
} // Class End
2.Entities<EntityType>:实体集合类,装载同一类型的N个实体,比如N个UserEntity(N个用户实体),具有绑定功能。范例:
Entities<xclass> entities = new Entities<xclass>();
xclass x;
x = new xclass();
x.nID = "05078dfa050e42b38ae302c73a2682d1";
DbAccess.LoadEntity(x);
x.x1 = "修改1";
entities.Add(x);
x = new xclass();
x.nID = "18de03c30dba4d22a8993567a4ff555d";
DbAccess.LoadEntity(x);
x.x1 = "修改2";
entities.Add(x);
x = new xclass();
x.nID = "360eecf370754cdc94ef0889184d450a";
DbAccess.LoadEntity(x);
x.x1 = "修改3";
entities.Add(x);
x = new xclass();
x.nID = "360eecf370754cdc94ef0889184d450a";
DbAccess.LoadEntity(x);
x.x1 = "修改4";
entities.Add(x);
for (int i = 0; i < entities.Count; i++)
{
x = entities[i];
// Test.WriteMsg(x.t.ToString());
}
3.Parameter、Parameters SQL变量以及变量实体,描述sql变量用。功能比较简单,不做详细说明。
4.QueryCondition、QueryConditions 查询条件和查询条件集合(结合后面的使用进行讲解,功能主要为将sql查询条件转换成实体和实
体集合,达到安全查询的目的)
5.DBAccess类:数据访问类的基类,目前版本实现的子类只有SqlServerAccess(SqlServer)类。封装了数据库的各种操作。创建数据访
问对象的语法如下:
private DBAccess m_dal;
public DBAccess dal
{
get
{
if (m_dal == null)
{
m_dal = DBFactory.GetDBAccess();
}
return m_dal;
}
}
DBFactory.GetDBAccess()会根据数据库配置信息,自动创建相关的数据访问对象。如果需要使用多个数据库,则使用DBFactory.GetDBAccess
(ContextID),读取相应的配置节信息(如果找不到相关信息,则自动使用public配置节的信息)。系统默认的配置节为public。
增加数据:InsertEntity<EntityType>(EntityType):将一个实体对象持久化(添加)到数据库中,为泛型方法。使用示例:
UserEntity userEntity = new UserEntity(); //定义一个用户实
userEntity.UserName = "张三";
dal.InsertEntity(userEntity);
修改数据:UpdateEntity<EntityType>(EntityType):将对实体对象的更新保存到数据库中(修改操作)。使用示例:
UserEntity userEntity = new UserEntity();
dal.LoadEntity(userEntity);
userEntity.UserName = "张三";
dal.UpdateEntity(userEntity);
删除数据:DeleteEntity<EntityType>(EntityType):将实体对象从数据库中删除.使用示例:
dal.DeleteEntity(userEntity);
加载数据:LoadEntity<EntityType>(EntityType):加载数据到实体对象上。使用示例:
UserEntity uEntity = new UserEntity();
uEntity.UserID="9981"; //设置主键值
if (dal.LoadEntity(uEntity))
{
//成功
}
else
{
//失败
}
批量增加数据:InsertEntities<EntityType>(Entities <EntityType>) 使用示例:
xclass x;
x = new xclass();
x.nID = "05078dfa050e42b38ae302c73a2682d1";
x.x1 = "增加1";
entities.Add(x);
x = new xclass();
x.nID = "18de03c30dba4d22a8993567a4ff555d";
x.x1 = "增加2";
entities.Add(x);
x = new xclass();
x.nID = "360eecf370754cdc94ef0889184d450a";
x.x1 = "增加3";
entities.Add(x);
x = new xclass();
x.nID = "360eecf370754cdc94ef0889184d450a";
x.x1 = "增加4";
entities.Add(x);
dal.InsertEntities(entities);
批量修改数据:UpdateEntities<EntityType>(Entities <EntityType>) 使用示例:
xclass x;
x = new xclass();
x.nID = "05078dfa050e42b38ae302c73a2682d1";
DbAccess.LoadEntity(x);
x.x1 = "修改1";
entities.Add(x);
x = new xclass();
x.nID = "18de03c30dba4d22a8993567a4ff555d";
DbAccess.LoadEntity(x);
x.x1 = "修改2";
entities.Add(x);
x = new xclass();
x.nID = "360eecf370754cdc94ef0889184d450a";
DbAccess.LoadEntity(x);
x.x1 = "修改3";
entities.Add(x);
x = new xclass();
x.nID = "360eecf370754cdc94ef0889184d450a";
DbAccess.LoadEntity(x);
x.x1 = "修改4";
entities.Add(x);
dal.InsertEntities(entities);
批量删除数据:DeleteEntities<EntityType>(Entities <EntityType>) 使用示例:
dal.DeleteEntities(entities);
将表转换成实体集合:ConvertToEntities<EntityType>(DataTable) 使用示例:
DataTable tb = dal.ExecuteListData("x", "nID", "nID,X1,X2,X3,T,testint,IdentityID", "IdentityID", 3, 1, true,
Querys, OrderTypeEnum.Asc);
Entities<xclass> entities = dal.ConvertToEntities<xclass>(tb);
this.GridView1.DataSource = entities;
this.GridView1.DataBind();
获取列表数据:ExecuteListData 使用示例:
DataTable tb = dal.ExecuteListData("x", "nID", "nID,X1,X2,X3,T,testint,IdentityID", "IdentityID", 3, 1, true,
Querys, OrderTypeEnum.Asc);
批量删除记录:BatchDelete(String, QueryConditions) 和 BatchDelete(String, String) 使用示例:
#region 批量删除
QueryConditions Querys = new QueryConditions();
QueryCondition Query = null;
Query = new QueryCondition();
Query.FieldName = "testint";
Query.FieldValue = "1";
Query.DataType = DataTypeEnum.Number;
Query.CompareType = CompareTypeEnum.Equal;
Query.LogicType = LogicTypeEnum.And;
Querys.Add(Query);
DbAccess.BatchDelete("x", Querys);
#endregion
事务操作相关方法:BeginTransaction()、Commit()、Rollback(),建议在对数据库更新时使用,简单读取不使用。 使用示例:
try
{
dal.BeginTransaction();
dal.InsertEntity(userEntity);
if (UserRolesChanged)
{
SetUserRoles(userEntity.UserID, UserRoleIDs);
}
dal.Commit();
LogManager.AddLog("增加UserID为" + userEntity.UserID + "的用户!");
}
catch (Exception ex)
{
dal.Rollback();
ErrorHandler.HandleError(ex);
}
如果是分布式事务,则不用这些方法,而用:
using (TransactionScope ts = new TransactionScope())
{
DBAccess DbAccess = new SqlServerAccess();
DbAccess.InsertEntity(x);
x = new xclass();
x.x1 = "zhongguo";
DbAccess.InsertEntity(x);
DBAccess d = new SqlServerAccess();
x = new xclass();
x.x1 = "另外的数据库对象";
d.InsertEntity(x);
ts.Complete();
}
6.DBFactory类:数据访问对象工厂类
GetDBAccess():获取默认数据访问接口
public static DBAccess GetDBAccess(string ContextID):根据配置节ID获取数据访问接口
7. BllBase类:业务逻辑的基类,定义了一个virtual 的数据访问对象,根据public创建的。继承此基类的业务逻辑层可以直接使用此数据访问对象dal,也可以根据需要对其进行重载,以读取不同的数据库。
浙公网安备 33010602011771号