【LIYBFramework】使用教程二:数据访问类库使用方法

Posted on 2007-09-15 14:56  李天昊  阅读(565)  评论(2)    收藏  举报

【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,也可以根据需要对其进行重载,以读取不同的数据库。 

博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3