一直都看些petshop的例子,看的晕呼呼的
希望大家 给个简单的说明,我下面有三段代码,请各位大哥帮我分下层吧
        string ConnectionString = System.Configuration.ConfigurationManager.AppSettings["SqlServerStr"];
        SqlConnection conn = new SqlConnection(ConnectionString);
        conn.Open();
        string sql = "insert into ipRe (ipContent) values ('" + userIP + "')";
        SqlCommand cmd = new SqlCommand(sql, conn);
        cmd.ExecuteNonQuery();
        conn.Close();        string sql_city = "select * from tb_uAdvise ";
        SqlCommand cmd_city = new SqlCommand(sql_city, conCity);
        DataSet dsCity = new DataSet();
        SqlDataAdapter sdrCity = new SqlDataAdapter(cmd_city);
        sdrCity.Fill(dsCity, "tb_uAdvise");
        this.GridView1.DataSource = dsCity;
        this.GridView1.DataBind();  
        conCity.Close();
 string ConnectionString = System.Configuration.ConfigurationManager.AppSettings["SqlServerStr"];
        SqlConnection conn_show = new SqlConnection(ConnectionString);
        string sql_show ="SELECT * FROM tb_produce where uAdviseID='"+ uAdviseID +"'";
        conn_show.Open();        SqlCommand cmd_show = new SqlCommand(sql_show, conn_show);
        SqlDataReader dr_show = cmd_show.ExecuteReader();
      
        if (dr_show.Read())
        {
           
                      this.lblproName.Text = dr_show["pName"].ToString();
        }
      
        conn_show.Close();很明显,一个是 操作数据库,一个是控件绑定数据,一个是读取数据, 希望哪个大哥费神帮我分下层,而且尽可能的 说明下,小弟谢谢了

解决方案 »

  1.   

    1楼的 我好笨的, 很多人都让我去看 petshop 我都看的晕  所以才希望分析下代码
      

  2.   

    petshop不适合初学,去我上传的资源,里面有几个简单的三层例子先看看
      

  3.   

    我也想要,1楼达人发个给我吧:)
    email:
    [email protected]
      

  4.   

     string ConnectionString = System.Configuration.ConfigurationManager.AppSettings["SqlServerStr"]; 
            SqlConnection conn = new SqlConnection(ConnectionString); 
            conn.Open(); 
            string sql = "insert into ipRe (ipContent) values ('" + userIP + "')"; 
            SqlCommand cmd = new SqlCommand(sql, conn); 
            cmd.ExecuteNonQuery(); 
            conn.Close(); 

    ---数据访问层,很明显的,和数据库打交道
            string sql_city = "select * from tb_uAdvise "; 
            SqlCommand cmd_city = new SqlCommand(sql_city, conCity); 
            DataSet dsCity = new DataSet(); 
            SqlDataAdapter sdrCity = new SqlDataAdapter(cmd_city); 
            sdrCity.Fill(dsCity, "tb_uAdvise"); 

    --这也是数据访问的
            this.GridView1.DataSource = dsCity; 
            this.GridView1.DataBind();  

    --这是画面绑定值的,是表示层
            conCity.Close(); 
    string ConnectionString = System.Configuration.ConfigurationManager.AppSettings["SqlServerStr"]; 
            SqlConnection conn_show = new SqlConnection(ConnectionString); 
            string sql_show ="SELECT * FROM tb_produce where uAdviseID='"+ uAdviseID +"'"; 
            conn_show.Open();         SqlCommand cmd_show = new SqlCommand(sql_show, conn_show); 
            SqlDataReader dr_show = cmd_show.ExecuteReader(); 

    --数据访问
          
            if (dr_show.Read()) 
            { 
              
                          this.lblproName.Text = dr_show["pName"].ToString(); 
    --表示层        } 
          
            conn_show.Close(); 
    你贴的代码不是三层的
    三层的是
    数据访问 类dao 方法select insert update delete
    业务逻辑 类business 处理逻辑,调用dao的方法取数据,然后处理
    表示层   web画面,调用business类的方法,得到按逻辑处理过的数据,显示在画面上
      

  5.   

    新手不要看petshop,不太适合.
    最好先把分层的一些意义和目的搞明白.
    然后可以去下一些别人写的源码看看
    51aspx上应该可以找到很多
      

  6.   

    简单来说
    数据层:里面的所有方法一类的东西都是操作数据库的
    业务层:全是你做的项目的业务思路一类的东西,它跟数据层里的方法连接
    UI层:就是你从业务层里调出方法,然后绑定到页面的控件上,然后显示出来就完了。
    UI层就是你的页面,后台代码里用到的方法全是业务层的,它不跟数据层打交到,而业务层只跟数据层打交道,明白点没?
    多使用,就行了,最多做两个项目就明了了,共同进步哈。共勉!
      

  7.   

    http://topic.csdn.net/u/20081215/14/1dd6aded-2b8d-40ce-b723-9cda1b3fa4c0.html
    先打好基础。
      

  8.   

    这应该都是数据层和逻辑层解决的。看看SQLHELPER
    参考
    http://www.cnblogs.com/benbenkoala/archive/2008/05/29/1209658.html
    http://www.cnblogs.com/cjw213052/archive/2008/10/03/1303623.html
      

  9.   

    [email protected] 12楼的 我的邮箱
      

  10.   

    在 www.51aspx.com 有好多关于三层的例子
      

  11.   

    http://topic.csdn.net/u/20081222/10/47412c4e-6a69-42ce-9421-5848691499a3.html
      

  12.   

    一、数据操作层--------------------------------------一个完整的数据库操作类database.aspx---------------------------------------------
    using System;
    using System.Data;
    using System.Configuration;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using System.Data.SqlClient;/// <summary>
    /// DataBase 的摘要说明
    /// </summary>
    public class DataBase
    {
        public DataBase()
        {
    //
    // TODO: 在此处添加构造函数逻辑
    //
        }    /// <summary>
        /// 返回一个数据库连接
        /// </summary>
        /// <returns></returns>
        private static SqlConnection ReturnConn()
        {
            string connstr = ConfigurationManager.ConnectionStrings["CustomerConnectionString"].ToString();
            if (connstr.Length < 1)
            {
                return null;
            }
            SqlConnection Conn = new SqlConnection(connstr);
            if (Conn.State.Equals(ConnectionState.Closed))
            {
                Conn.Open();
            }
            return Conn;
        }    /// <summary>
        /// 构造一个SqlCommand对象,并返回此对象
        /// </summary>
        /// <param name="procName"></param>
        /// <returns></returns>
        private static SqlCommand ReturnCmd(string procName)
        {
            SqlCommand Cmd = new SqlCommand();
            Cmd.CommandType = CommandType.StoredProcedure;
            Cmd.CommandText = procName;
            return Cmd;
        }    /// <summary>
        /// 方法重载,带参数的传递,返回一个SqlCommand对象
        /// </summary>
        /// <param name="procName"></param>
        /// <param name="prams"></param>
        /// <returns></returns>
        private static SqlCommand ReturnCmd(string procName, SqlParameter[] prams)
        {
            SqlCommand Cmd = new SqlCommand();
            Cmd.CommandText = procName;
            Cmd.CommandType = CommandType.StoredProcedure;
            if (prams != null)
            {
                foreach (SqlParameter parameter in prams)
                {
                    Cmd.Parameters.Add(parameter);
                }
            }
            return Cmd;
        }    /// <summary>
        /// 执行存储过程,不带参数,返回受影响的条数
        /// </summary>
        /// <param name="proName"></param>
        /// <returns></returns>
        public static int RunExecute(string proName)
        {
            SqlConnection Conn = ReturnConn();
            SqlCommand Cmd = ReturnCmd(proName);
            Cmd.Connection = Conn;
            int intResult = Cmd.ExecuteNonQuery();
            Conn.Close();
            return intResult;
        }    /// <summary>
        /// 重载函数,带参数,传入参数和存储过程,返回执行后的影响条数
        /// </summary>
        /// <param name="procName"></param>
        /// <param name="prams"></param>
        /// <returns></returns>
        public static int RunExecute(string procName, SqlParameter[] prams)
        {
            SqlConnection Conn = ReturnConn();
            SqlCommand Cmd = ReturnCmd(procName, prams);
            Cmd.Connection = Conn;
            int intResult = Cmd.ExecuteNonQuery();
            Conn.Close();
            return intResult;
        }    /// <summary>
        /// 执行存储过程,并返回第一行第一列的值,返回object类型值
        /// </summary>
        /// <param name="procName"></param>
        /// <returns></returns>
        public static object RunExecuteScalar(string procName)
        {
            SqlConnection Conn = ReturnConn();
            SqlCommand Cmd = ReturnCmd(procName);
            Cmd.Connection = Conn;
            object Result = Cmd.ExecuteScalar();
            Conn.Close();
            return Result;
        }    /// <summary>
        /// 方法重载,返回一行一列的值,返回object类型值
        /// </summary>
        /// <param name="procName"></param>
        /// <param name="prams"></param>
        /// <returns></returns>
        public static object RunExecuteScalar(string procName, SqlParameter[] prams)
        {
            SqlConnection Conn = ReturnConn();
            SqlCommand Cmd = ReturnCmd(procName, prams);
            Cmd.Connection = Conn;
            object Result = Cmd.ExecuteScalar();
            Conn.Close();
            return Result;
        }    /// <summary>
        /// 执行存储过程,返回一个DataSet数据集
        /// </summary>
        /// <param name="procName"></param>
        /// <param name="mytable"></param>
        /// <returns></returns>
        public static DataSet RunProcGetDataSet(string procName,string mytable)
        {
            SqlConnection Conn = ReturnConn();
            SqlDataAdapter Dtr = new SqlDataAdapter(procName, Conn);
            Dtr.SelectCommand.CommandType = CommandType.StoredProcedure;
            DataSet Ds = new DataSet();
            Dtr.Fill(Ds,mytable);
            Conn.Close();
            return Ds;
        }    /// <summary>
        /// 方法重载,执行带参数的存储过程,返回一个DataSet数据集
        /// </summary>
        /// <param name="procName"></param>
        /// <param name="prams"></param>
        /// <param name="mytable"></param>
        /// <returns></returns>
        public static DataSet RunProcGetDataSet(string procName, SqlParameter[] prams, string mytable)
        {
            SqlConnection Conn = ReturnConn();
            SqlDataAdapter Dtr = new SqlDataAdapter(procName, Conn);
            Dtr.SelectCommand.CommandType = CommandType.StoredProcedure;
            if (prams != null)
            {
                foreach (SqlParameter parameter in prams)
                {
                    Dtr.SelectCommand.Parameters.Add(parameter);
                }
            }
            DataSet Ds = new DataSet();
            Dtr.Fill(Ds, mytable);
            Conn.Close();
            return Ds;
        }
    }
      

  13.   

    二、业务逻辑层class Church
        {
            private int id;      //教会ID        public int Id
            {
                get { return id; }
                set { id = value; }
            }
            private string name; //教会名称        public string Name
            {
                get { return name; }
                set { name = value; }
            }
            private string addr; //教会地址        public string Addr
            {
                get { return addr; }
                set { addr = value; }
            }
            private string presbyterid; //教会牧师        public string Presbyterid
            {
                get { return presbyterid; }
                set { presbyterid = value; }
            }
            private string churchmanid; //教会长老        public string Churchmanid
            {
                get { return churchmanid; }
                set { churchmanid = value; }
            }
            private string re;  //备注        public string Re
            {
                get { return re; }
                set { re = value; }
            }        /// <summary>
            /// 获取传入的参数数据,添加教会信息
            /// </summary>
            /// <returns></returns>
            public int saveChurch()
            {
                string procname = "pro_saveChurch";
                SqlParameter[] prams = new SqlParameter[5];
                prams[0] = new SqlParameter("@name", this.name);
                prams[1] = new SqlParameter("@addr", this.addr);
                prams[2] = new SqlParameter("@presbyterid", this.presbyterid);
                prams[3] = new SqlParameter("@churchmanid", this.churchmanid);
                prams[4] = new SqlParameter("@re", this.re);            int intResult = CDataBaseU.RunExecute(procname, prams);
                return intResult;
            }        /// <summary>
            /// 修改一个教会信息
            /// </summary>
            /// <returns>返回一个int类型值</returns>
            public int updateChurch()
            {
                string procname = "pro_upChurch";
                SqlParameter[] prams = new SqlParameter[6];
                prams[0] = new SqlParameter("@id", this.id);
                prams[1] = new SqlParameter("@name", this.name);
                prams[2] = new SqlParameter("@addr", this.addr);
                prams[3] = new SqlParameter("@presbyterid", this.presbyterid);
                prams[4] = new SqlParameter("@churchmanid", this.churchmanid);
                prams[5] = new SqlParameter("@re", this.re);
                int intResult = CDataBaseU.RunExecute(procname, prams);
                return intResult;
            }        /// <summary>
            /// 删除一个教会
            /// </summary>
            /// <returns>返回一个int类型值</returns>
            public int delChurch()
            {
                string procname = "pro_delChurch";
                SqlParameter[] prams = new SqlParameter[1];
                prams[0] = new SqlParameter("@id", this.id);
                int intResult = CDataBaseU.RunExecute(procname, prams);
                return intResult;
            }        /// <summary>
            /// 查找教会
            /// </summary>
            /// <returns></returns>
            public DataTable SearchChurch()
            {
                string procname = "pro_SearchChurch";                         //确定所要使用的存储过程
                SqlParameter[] prams = new SqlParameter[1];
                prams[0] = new SqlParameter("@name", this.name);
                return CDataBaseU.RunProcGetTable(procname, prams);
            }
            /// <summary>
            /// 根据传入的id查找教会信息
            /// </summary>
            /// <param name="_id"></param>
            /// <returns></returns>
            public DataTable GetChurchName(int _id)
            {
                string procname = "pro_GetChurchUser";
                SqlParameter[] prams = new SqlParameter[1];
                prams[0] = new SqlParameter("@Id",_id);
                return CDataBaseU.RunProcGetTable(procname,prams);
            }
        }
      

  14.   

    三、显示层private void btnUpdate_Click(object sender, EventArgs e)
            {
                Church chi = new Church();
                chi.Id = Convert.ToInt32(this.txtID.Text.ToString().Trim());
                chi.Name = this.txtCName.Text.Trim();
                chi.Addr = this.txtCAddr.Text.Trim();
                chi.Presbyterid = this.txtCP.Text.Trim();
                chi.Churchmanid = this.txtCM.Text.Trim();
                chi.Re = this.txtRe.Text.Trim();
                try
                {
                    int key=chi.updateChurch();
                    if (key != 0)
                    {
                        sys.Msg("修改成功!");
                        this.dgvJHXX.DataSource = DR();
                    }
                    else
                    {
                        sys.Msg("修改失败!");
                    }
                }
                catch (Exception ex)
                {
                    sys.Msg(ex.ToString());
                }
            }注意:业务层中CDataBaseU应该是Database自己慢慢看吧,就是这样的架构。三层互不影响,一层层调用。
      

  15.   

    数据层:Database.cs(专门处理数据库连接和资料获取,与数据库打交道)
    业务层:church.cs (向数据库类传递参数获取数据,然后返回给显示层,或者执行相关的操作)
    显示层:updata.aspx(将获取到的资料显示出来)
      

  16.   


    还有http://www.maticsoft.com/
      

  17.   

    我也说一下我对petshop的心得首先是最底层的对象层,然后是数据操作接口(这里只是接口,返回Ilist<>对象层的集合),定义对各种数据要做什么事,如查询、修改、删除等
    然后是派生自数据操作接口的数据访问层,在这里可以用多种数据库来实现
    然后是工厂对象,根据配置文件指定的数据访问层(如操作access或操作T-sql的)通过反射创建数据访问对象
    之后可到业务层对数据访问对象返回的数据进行业务处理
    如果不需要处理,则可直接用Ilist<>集合绑定输出到表示层当然实现数据访问层的时候可以加入针对不同数据库的工具包方便操作,减少代码量用以上做法可以实现多种数据库语言的快速转换