新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论.NET,C#,ASP,VB技术
    [返回] 中文XML论坛 - 专业的XML技术讨论区计算机技术与应用『 Dot NET,C#,ASP,VB 』 → 个人开发框架总结 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 7059 个阅读者  浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: 个人开发框架总结 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     卷积内核 帅哥哟,离线,有人找我吗?
      
      
      威望:8
      头衔:总统
      等级:博士二年级(版主)
      文章:3942
      积分:27590
      门派:XML.ORG.CN
      注册:2004/7/21

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给卷积内核发送一个短消息 把卷积内核加入好友 查看卷积内核的个人资料 搜索卷积内核在『 Dot NET,C#,ASP,VB 』的所有贴子 访问卷积内核的主页 引用回复这个贴子 回复这个贴子 查看卷积内核的博客楼主
    发贴心情 个人开发框架总结

    在开发过程中,大家可能都发现,形成一套个人开发风格是相当重要,这也可以延伸为整个团队的开发模式,甚至形成一个有形的开发框架。

       我经过这一两年的摸索,不断的完善,现在大体形成了几个东东,自己感觉还不错,所以想贴出来与大家一起分享,如有需要的朋友,可以直接与我联系。

       大体有以下几个类库:

       FaibClass.Data 数据访问库

       FaibClass.Common.Windows WinForm框架库

       FaibClass.Windows.Forms WinForm控件库(目前只有TreeList及一些TextBox控件)

       FaibClass.Update 在线更新库

       在以后的几天里将分别做一些介绍

      一、FaibClass.Data

       主要是提供数据访问操作的类库,可支持SqlServer、Oracle、及各种OleDb数据库。

       DataHelper 核心类 提供各种数据访问方法。先说一下它的几个方法和属性:

       ExecuteDataTable 填充数据到DataTable,共12种重载

       ExecuteNonQuery 执行Sql语句

       ExecuteReader 执行查询语句返回IDataReader

       ExecuteScalar 执行查询,返回当个结果

       FillDataset 填充DataSet,共12种重载

       FillModelList 填充DataList,共12种重载

       Update 更新DataTable或DataSet,共6种重载

       BeginTransaction 开始事务,支付分布式事务

       CommitTransaction 提交事务

       RollbackTransaction 回滚事务

       CreateParameters 创建参数集,因为使用存储过程时SqlServer和Oracle的参数名称不一样,故用这个方法生成

       OpenUpdateBag 打开更新开关,在使用Update前,要使用这个方法把相应的sql语句保存到内存中,以在Update时能够更新到数据库

       CloseUpdateBag 关闭更新开关


       收藏   分享  
    顶(0)
      





    关闭广告显示

    ----------------------------------------------
    事业是国家的,荣誉是单位的,成绩是领导的,工资是老婆的,财产是孩子的,错误是自己的。

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2009/11/9 17:12:00
     
     卷积内核 帅哥哟,离线,有人找我吗?
      
      
      威望:8
      头衔:总统
      等级:博士二年级(版主)
      文章:3942
      积分:27590
      门派:XML.ORG.CN
      注册:2004/7/21

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给卷积内核发送一个短消息 把卷积内核加入好友 查看卷积内核的个人资料 搜索卷积内核在『 Dot NET,C#,ASP,VB 』的所有贴子 访问卷积内核的主页 引用回复这个贴子 回复这个贴子 查看卷积内核的博客2
    发贴心情 
    ParameterPrefix 当前数据操作的存储过程参数名称的前缀,如SqlServer的@和Oracle的:

       下面是具体的操作类型,SqlServer、Oracle、OleDb都是继承自DataHelper的,但并未为每一个操作类都写出各种数据操作的方法,这也主要是为了好维护,这几个类同时实现IDataProvider接口,这个接口就是为每种类型提供DbConnection、DbParameter、DataAdapter、DbCommand等。如SqlServer里是这样写到的:

        public class SqlServer : DataHelper, IDataProvider
    {
            #region IDataConverter
            IDbConnection IDataProvider.GetDbConnection()
            {
                SqlConnection conn = new SqlConnection(ConnectionString);
                conn.StateChange += new StateChangeEventHandler(base.OnStateChange);
                return conn;
            }

            IDbDataAdapter IDataProvider.GetDataAdapter()
            {
                return new SqlDataAdapter();
            }

            IDataParameter IDataProvider.GetParameter()
            {
                return new SqlParameter();
            }

            IDataParameter[] IDataProvider.GetParameters(int Count)
            {
                return new SqlParameter[Count];
            }

            IDbCommand IDataProvider.GetCommand(IDbCommand command)
            {
                return command as SqlCommand;
            }

            void IDataProvider.GetCommandBuilder(IDbDataAdapter DataAdapter, DataTable DataTable, DataViewRowState dataViewRowState)
            {
                SqlDataAdapter adapter = (SqlDataAdapter)DataAdapter;
                SqlCommandBuilder cmdb = new SqlCommandBuilder(adapter);
            }
            #endregion
    }

    ----------------------------------------------
    事业是国家的,荣誉是单位的,成绩是领导的,工资是老婆的,财产是孩子的,错误是自己的。

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2009/11/9 17:12:00
     
     卷积内核 帅哥哟,离线,有人找我吗?
      
      
      威望:8
      头衔:总统
      等级:博士二年级(版主)
      文章:3942
      积分:27590
      门派:XML.ORG.CN
      注册:2004/7/21

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给卷积内核发送一个短消息 把卷积内核加入好友 查看卷积内核的个人资料 搜索卷积内核在『 Dot NET,C#,ASP,VB 』的所有贴子 访问卷积内核的主页 引用回复这个贴子 回复这个贴子 查看卷积内核的博客3
    发贴心情 
    这样,每一个类就好维护了,Oracle就使用OracleConnection,OleDb就使用OleDbConnection。

       Parameter 存储过程参数类,这跟System.Data里的差不多,都是实现同样的一个功能,只是说使用这个的时候,ParameterName不用具体的加入@或:这样的前缀。

       ParameterCollection 存储过程参数集合类,这里面特别的有几个方法

       FromDataModel 从模型转换为存储参数。可以根据具体的模型,将所有属性转换为存储过程参数,以为添加或修改作准备。

       Format 可以格式化Sql查询语句,比如在使用添加或修改的时候,可以这样使用

    dataHelper.ExecuteNonQuery(params.Format("insert into table({0}) values({1})"), params);

    dataHelper.ExecuteNonQuery(params.Format("update table set {0}"), params);

       BaseModel 数据模型基类,所有的数据模型都是继承这个类,如TB_BUY_BILL.cs

    using System;
    using FaibClass.Data;

    namespace WindowsApplication1
    {
        /// <summary>
        /// 模型类
        /// </summary>
        [Serializable]
        public class TB_BUY_BILL : BaseModel
        {
            #region 表映射
            /// <summary>
            /// 表名称
            /// </summary>
            public override string TableName
            {
                get { return "TB_BUY_BILL"; }
            }
            /// <summary>
            /// 表名称
            /// </summary>
            public static string _TableName = "TB_BUY_BILL";
            /// <summary>
            /// 主键
            /// </summary>
            public override string PrimaryKey
            {
                get { return "BUY_BILL_ID"; }
            }
            /// <summary>
            /// 主键
            /// </summary>
            public static string _PrimaryKey = "BUY_BILL_ID";

            public override DataColumn GetDataColumn(string ColumnName)
            {
                DataColumn column = new DataColumn();
                switch (ColumnName)
                {

                    case "BUY_BILL_ID":
                        column.ColumnName = "BUY_BILL_ID";
                        column.ColumnSize = 200;
                        column.DbType = 16;
                        column.IsPrimaryKey = true;
                        column.Precision = 0;
                        column.Scale = 0;
                        return column;

                    case "BILL_TYPE":
                        column.ColumnName = "BILL_TYPE";
                        column.ColumnSize = 0;
                        column.DbType = 10;
                        column.IsPrimaryKey = false;
                        column.Precision = 0;
                        column.Scale = 0;
                        return column;

                    case "BILL_NO":
                        column.ColumnName = "BILL_NO";
                        column.ColumnSize = 200;
                        column.DbType = 16;
                        column.IsPrimaryKey = false;
                        column.Precision = 0;
                        column.Scale = 0;
                        return column;

                    case "DEPARTMENT_NAME":
                        column.ColumnName = "DEPARTMENT_NAME";
                        column.ColumnSize = 200;
                        column.DbType = 16;
                        column.IsPrimaryKey = false;
                        column.Precision = 0;
                        column.Scale = 0;
                        return column;

                    case "SALED_AMOUNT":
                        column.ColumnName = "DEPARTMENT_NAME";
                        column.ColumnSize = 0;
                        column.DbType = 11;
                        column.IsPrimaryKey = false;
                        column.Precision = 0;
                        column.Scale = 0;
                        return column;

                    case "CONTRACT_AMOUNT":
                        column.ColumnName = "CONTRACT_AMOUNT";
                        column.ColumnSize = 0;
                        column.DbType = 11;
                        column.IsPrimaryKey = false;
                        column.Precision = 0;
                        column.Scale = 0;
                        return column;

                }
                return null;
            }
            #endregion

            #region 字段常量

            public static string _BUY_BILL_ID = "BUY_BILL_ID";
            public static string _BILL_NO = "BILL_NO";
            public static string _BILL_TYPE = "BILL_TYPE";
            public static string _DEPARTMENT_NAME = "DEPARTMENT_NAME";
            public static string _SALED_AMOUNT = "SALED_AMOUNT";
            public static string _CONTRACT_AMOUNT = "CONTRACT_AMOUNT";
            #endregion

            #region 成员

            private string m_BUY_BILL_ID;
            private BILL_TYPE m_BILL_TYPE;
            private string m_BILL_NO;
            private string m_DEPARTMENT_NAME;
            private decimal m_SALED_AMOUNT;
            private decimal m_CONTRACT_AMOUNT;
            #endregion

            #region 属性

            public string BUY_BILL_ID
            {
                get { return m_BUY_BILL_ID; }
                set { m_BUY_BILL_ID = value; }
            }

            public BILL_TYPE BILL_TYPE
            {
                get { return m_BILL_TYPE; }
                set { m_BILL_TYPE = value; }
            }

            public string BILL_NO
            {
                get { return m_BILL_NO; }
                set { m_BILL_NO = value; }
            }

            public string DEPARTMENT_NAME
            {
                get { return m_DEPARTMENT_NAME; }
                set { m_DEPARTMENT_NAME = value; }
            }

            public decimal SALED_AMOUNT
            {
                get { return m_SALED_AMOUNT; }
                set { m_SALED_AMOUNT = value; }
            }

            public decimal CONTRACT_AMOUNT
            {
                get { return m_CONTRACT_AMOUNT; }
                set { m_CONTRACT_AMOUNT = value; }
            }

            #endregion
        }

        public enum BILL_TYPE
        {
            [EnumText("电子")]
            ELE = 0,
            [EnumText("手工")]
            MAN = 1,
        }

        public enum BILL_STATE
        {
            [EnumText("暂存")]
            NoSave = 0,
            [EnumText("已保存")]
            Saved = 1,
        }

        /// <summary>
        /// 集合类
        /// </summary>
        [Serializable]
        public class TB_BUY_BILLs : DataModelList<TB_BUY_BILL>
        {
        }
    }

    ----------------------------------------------
    事业是国家的,荣誉是单位的,成绩是领导的,工资是老婆的,财产是孩子的,错误是自己的。

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2009/11/9 17:12:00
     
     卷积内核 帅哥哟,离线,有人找我吗?
      
      
      威望:8
      头衔:总统
      等级:博士二年级(版主)
      文章:3942
      积分:27590
      门派:XML.ORG.CN
      注册:2004/7/21

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给卷积内核发送一个短消息 把卷积内核加入好友 查看卷积内核的个人资料 搜索卷积内核在『 Dot NET,C#,ASP,VB 』的所有贴子 访问卷积内核的主页 引用回复这个贴子 回复这个贴子 查看卷积内核的博客4
    发贴心情 
    上面已经提到DataModelList这个类了,实际就是一个List<T>泛型,没有什么特殊的属性和方法。

       BaseDataAccess 数据操作类,这里面就整合了一些发新建实体、修改实体等方法。

       Create 新建实体

       Update 更新实体,共4种重载

       Delete 删除实体

       DeleteBy 删除多个实体

       Get 获得实体,共7种重载

       IsExitst 判别实体是否存在,共4种重载

       Select 查询实体集,共9种重载

       NewEntity 新实体

       PageArgs 分页参数

       相关的例子TB_BUY_BILL_DA.cs

    using System;
    using FaibClass.Data;

    namespace WindowsApplication1
    {
        /// <summary>
        /// 数据库类
        /// </summary>
        public class Database : OleDb
        {
            public Database()
            {
                base.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + AppDomain.CurrentDomain.BaseDirectory + "\test.mdb";
            }
        }

        /// <summary>
        /// DA操作类
        /// </summary>
        public class TB_BUY_BILL_DA : BaseDataAccess<TB_BUY_BILL, TB_BUY_BILLs>
        {
            public TB_BUY_BILL_DA() : base (new Database())
            {
            }
        }
    }

       DataColumn 数据列映射类,主要标明数据字段的各种属性,比如数据类型等,在以上代码中,已经看到GetDataColumn方法了。

    ----------------------------------------------
    事业是国家的,荣誉是单位的,成绩是领导的,工资是老婆的,财产是孩子的,错误是自己的。

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2009/11/9 17:13:00
     
     卷积内核 帅哥哟,离线,有人找我吗?
      
      
      威望:8
      头衔:总统
      等级:博士二年级(版主)
      文章:3942
      积分:27590
      门派:XML.ORG.CN
      注册:2004/7/21

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给卷积内核发送一个短消息 把卷积内核加入好友 查看卷积内核的个人资料 搜索卷积内核在『 Dot NET,C#,ASP,VB 』的所有贴子 访问卷积内核的主页 引用回复这个贴子 回复这个贴子 查看卷积内核的博客5
    发贴心情 
    EnumTextAttribute 枚举说明特性类,主要是添加在枚举上的,方便数据查询显示时直接转为中文说明。

       GetText 获得枚举值下的中文说明

       GetValue 根据中文说明获得对应的枚举值 

       QueryBuilder 查询构造器类,主要是构造查询条件,where后面的,使用方法类似StringBuilder。

       Append 追加查询条件

       BeginBracket 添加一个左括号

       EndBracket 添加一个右括号

       下面是Configuration下的几个类,主要提供连接串的存储方式

       AppConnectionConfig 连接串是存储在App.setting文件中的

       BinaryConnectionConfig 连接串是存储在bin文件里的,读或写的时候key取"a"...."h"。

       RegConnectionConfig 连接串是存储在注册表里的

       SysXmlConnectionConfig 连接串是存储在系统目录里的xml文件里的

       XmlConnectionConfig 连接串是存储在任意位置的xml文件里的

       好了,Data这个类就介绍到这里了,相关的例子在以后的文章中会给出的,下一篇介绍一下Common.Windows类库了。

    ----------------------------------------------
    事业是国家的,荣誉是单位的,成绩是领导的,工资是老婆的,财产是孩子的,错误是自己的。

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2009/11/9 17:13:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 Dot NET,C#,ASP,VB 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2025/6/23 23:22:43

    本主题贴数5,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    93.750ms