1.       三层结构模式开发:
基类介绍:
(1)       数据层(DAL): Framework.DAL.DbObject必须继承,里面包括对存储过程 RunProcedure 和sql语句RunSQL的数据处理函数,根据参数不同,提供了四种重载,可返回四中数据类型:
![]()
![]() 执行sql语句----------------------------------------------------#region 执行sql语句----------------------------------------------------
执行sql语句----------------------------------------------------#region 执行sql语句----------------------------------------------------
![]()
![]() /**////<summary>
        /**////<summary>
![]() ///1. 执行sql语句,
        ///1. 执行sql语句, 
![]() /// rowsAffected=-1, 执行查询,并返回结果集中第一行第一列;
        /// rowsAffected=-1, 执行查询,并返回结果集中第一行第一列; 
![]() /// rowsAffected=0 或其他, 返回受影响的行数
        /// rowsAffected=0 或其他, 返回受影响的行数
![]() ///</summary>
        ///</summary>
![]() /// <example>
        /// <example>
![]() /// 参数:
        /// 参数:
![]() /// IDataParameter[] parameters = new IDataParameter[3];
        /// IDataParameter[] parameters = new IDataParameter[3];
![]() /// parameters[0] = GetParameter("@UserID", System.Data.DbType.Int32, currentUser.UserID);
        /// parameters[0] = GetParameter("@UserID", System.Data.DbType.Int32, currentUser.UserID);
![]() /// parameters[1] = GetParameter("@Photo", System.Data.DbType.Binary, currentUser.Photo);
        /// parameters[1] = GetParameter("@Photo", System.Data.DbType.Binary, currentUser.Photo);
![]() /// parameters[2] = GetParameter("@ImageType", System.Data.DbType.String, currentUser.ImageType);
        /// parameters[2] = GetParameter("@ImageType", System.Data.DbType.String, currentUser.ImageType);
![]() /// 或
        /// 或
![]() /// SqlParameter[] parameters ={
        /// SqlParameter[] parameters ={ 
![]() /// new SqlParameter("@NodeId", SqlDbType.Int, 4),
        /// new SqlParameter("@NodeId", SqlDbType.Int, 4),
![]() /// new SqlParameter("@Depth", SqlDbType.Int, 4)};
        /// new SqlParameter("@Depth", SqlDbType.Int, 4)};
![]() /// parameters[0].Value = 36;
        /// parameters[0].Value = 36;
![]() /// parameters[1].Value = 4;
        /// parameters[1].Value = 4;
![]() /// </example>
        /// </example>
![]() ///<remarks>
        ///<remarks>
![]() /// int rowsAffected = 0;
        /// int rowsAffected = 0;
![]() /// return RunSQL("sql", rowsAffected [, parameters]);
        /// return RunSQL("sql", rowsAffected [, parameters]);
![]() ///</remarks>
        ///</remarks>
![]() protected int RunSQL(string sql, ref int rowsAffected, params IDataParameter[] parameters)
        protected int RunSQL(string sql, ref int rowsAffected, params IDataParameter[] parameters)
![]()
![]() 
        ![]() { }
{ }
![]()
![]()
![]() /**////<summary>
        /**////<summary>
![]() ///2. 执行sql语句,并返回 DataReader
        ///2. 执行sql语句,并返回 DataReader
![]() ///</summary>
        ///</summary>
![]() ///<remarks>
        ///<remarks>
![]() /// return RunSQL("sql" [, parameters]);
        /// return RunSQL("sql" [, parameters]);
![]() ///</remarks>
        ///</remarks>
![]() protected IDataReader RunSQL(string sql, params IDataParameter[] parameters)
        protected IDataReader RunSQL(string sql, params IDataParameter[] parameters)
![]()
![]() 
        ![]() {}
{}
![]()
![]()
![]() /**////<summary>
        /**////<summary>
![]() ///3. 执行sql语句,并返回 DataSet
        ///3. 执行sql语句,并返回 DataSet
![]() ///</summary>
        ///</summary>
![]() ///<remarks>
        ///<remarks>
![]() /// return RunSQL("sql", tableName [, parameters]);
        /// return RunSQL("sql", tableName [, parameters]);
![]() ///</remarks>
        ///</remarks>
![]() protected DataSet RunSQL(string sql, string tableName, params IDataParameter[] parameters)
        protected DataSet RunSQL(string sql, string tableName, params IDataParameter[] parameters)
![]()
![]() 
        ![]() {}
{}
![]()
![]()
![]() /**////<summary>
        /**////<summary>
![]() ///4. 执行 FillDataSet
        ///4. 执行 FillDataSet
![]() ///</summary>
        ///</summary>
![]() ///<remarks>
        ///<remarks>
![]() /// return RunSQL("sql", tableName, dataSet [, parameters]);
        /// return RunSQL("sql", tableName, dataSet [, parameters]);
![]() ///</remarks>
        ///</remarks>
![]() protected void RunSQL(string sql, string tableName, DataSet dataSet, params IDataParameter[] parameters)
        protected void RunSQL(string sql, string tableName, DataSet dataSet, params IDataParameter[] parameters)
![]()
![]() 
        ![]() {}
{}
![]() #endregion
#endregion
![]()
(2)       业务层(BLL):必须继承 Framework.BLL.BizObject,暂无函数。
(3)       用户层(UI):在 *.aspx.cs 中继承Framework.UI.PageBase,里面提供了在UI可直接使用的公共函数。 
(4)       App_Code中模块结构参考:
![]()
BLL:逻辑层,DAL:数据层,Entity:实体定义。  
(5)       Entity示例:
注意第二个构造函数,在BLL需要返回Entity时,根据DAL返回的DataSet.Tables[0].Rows[0]作为参数,可直接构造Entity返回。
![]() namespace RM.Entity
namespace RM.Entity
![]()
![]()
![]() {
{
![]()
![]() /**//// <summary>
    /**//// <summary>
![]() /// 歌曲实体
    /// 歌曲实体
![]() /// </summary>
    /// </summary>
![]() public class MusicInfo : BaseInfo
    public class MusicInfo : BaseInfo
![]()
![]() 
    ![]() {
{
![]()
![]() 属性#region 属性
        属性#region 属性
![]() private int _CategoryID;
        private int _CategoryID;
![]()
![]() /**//// <summary>类别ID</summary>
        /**//// <summary>类别ID</summary>
![]() public int CategoryID
        public int CategoryID
![]()
![]() 
        ![]() {
{
![]()
![]() get
            get ![]() { return _CategoryID; }
{ return _CategoryID; }
![]()
![]() set
            set ![]() { _CategoryID = value; }
{ _CategoryID = value; }
![]() }
        }
![]()
![]() private string _Category;
        private string _Category;
![]()
![]() /**//// <summary>类别</summary>
        /**//// <summary>类别</summary>
![]() public string Category
        public string Category
![]()
![]() 
        ![]() {
{
![]()
![]() get
            get ![]() { return _Category; }
{ return _Category; }
![]()
![]() set
            set ![]() { _Category = value; }
{ _Category = value; }
![]() }
        }
![]() private string _Artist;
        private string _Artist;
![]()
![]() /**//// <summary>歌手名,30个字节</summary>
        /**//// <summary>歌手名,30个字节</summary>
![]() public string Artist
        public string Artist
![]()
![]() 
        ![]() {
{
![]()
![]() get
            get ![]() { return _Artist; }
{ return _Artist; }
![]()
![]() set
            set ![]() { _Artist = value; }
{ _Artist = value; }
![]() }
        }
![]()
![]() private string _Album;
        private string _Album;
![]()
![]() /**//// <summary>专辑名称,30个字节</summary>
        /**//// <summary>专辑名称,30个字节</summary>
![]() public string Album
        public string Album
![]()
![]() 
        ![]() {
{
![]()
![]() get
            get ![]() { return _Album; }
{ return _Album; }
![]()
![]() set
            set ![]() { _Album = value; }
{ _Album = value; }
![]() }
        }
![]()
![]() private string _Year;
        private string _Year;
![]()
![]() /**//// <summary>年代,4个字符</summary>
        /**//// <summary>年代,4个字符</summary>
![]() public string Year
        public string Year
![]()
![]() 
        ![]() {
{
![]()
![]() get
            get ![]() { return _Year; }
{ return _Year; }
![]()
![]() set
            set ![]() { _Year = value; }
{ _Year = value; }
![]() }
        }
![]()
![]() private string _Comment;
        private string _Comment;
![]()
![]() /**//// <summary>注释,28个字节</summary>
        /**//// <summary>注释,28个字节</summary>
![]() public string Comment
        public string Comment
![]()
![]() 
        ![]() {
{
![]()
![]() get
            get ![]() { return _Comment; }
{ return _Comment; }
![]()
![]() set
            set ![]() { _Comment = value; }
{ _Comment = value; }
![]() }
        }
![]() #endregion
        #endregion
![]()
![]()
![]() 构造函数#region 构造函数
        构造函数#region 构造函数
![]() public MusicInfo()
        public MusicInfo()
![]()
![]() 
        ![]() {      }
{      }
![]()
![]() public MusicInfo(DataRow dataRow)
        public MusicInfo(DataRow dataRow)
![]()
![]() 
        ![]() {
{
![]() this.Title = (string)dataRow["Title"];
            this.Title = (string)dataRow["Title"];
![]() this.CategoryID = (int)dataRow["CategoryID"];
            this.CategoryID = (int)dataRow["CategoryID"];
![]() this.Category = (string)dataRow["CategoryName"];
            this.Category = (string)dataRow["CategoryName"];
![]() this.Album = dataRow["Album"] == System.DBNull.Value ? string.Empty : dataRow["Album"].ToString();
            this.Album = dataRow["Album"] == System.DBNull.Value ? string.Empty : dataRow["Album"].ToString();
![]() this.Artist = dataRow["Artist"] == System.DBNull.Value ? string.Empty : dataRow["Artist"].ToString();
            this.Artist = dataRow["Artist"] == System.DBNull.Value ? string.Empty : dataRow["Artist"].ToString();
![]() this.Comment = dataRow["Comment"] == System.DBNull.Value ? string.Empty : dataRow["Comment"].ToString();
            this.Comment = dataRow["Comment"] == System.DBNull.Value ? string.Empty : dataRow["Comment"].ToString();
![]() this.Length = Convert.ToDateTime(dataRow["Length"]);
            this.Length = Convert.ToDateTime(dataRow["Length"]);
![]() this.Url = dataRow["Url"] == System.DBNull.Value ? string.Empty : dataRow["Url"].ToString();
            this.Url = dataRow["Url"] == System.DBNull.Value ? string.Empty : dataRow["Url"].ToString();
![]() this.Year = dataRow["Year"] == System.DBNull.Value ? string.Empty : dataRow["Year"].ToString();
            this.Year = dataRow["Year"] == System.DBNull.Value ? string.Empty : dataRow["Year"].ToString();
![]() }
        }
![]() #endregion
        #endregion
![]() }
    }
![]() }
}2.     全局信息:Framework.Globals  全局静态变量,静态属性,静态方法
3.     错误信息处理:Framework.AppException 
自定义错误信息处理,为合理显示程序错误信息,避免在客户端暴露太多有关程序信息。根据参数不同实例化此类即可。内有两个静态方法:
(1)LogEvent:将错误日志写入windows系统事件日志;
(2)LogFile:将错误日志写入日志文件。
4.     命名问题:简短明了,见其名知其义。
5.     要使用 ///<summary>***///</summary> 对类、方法属性等进行说明!在其上一行输入“///”即可自动产生后面内容。