EmployeeUI窗体:
 EmployeeInfo[] empInfo;
private void Form1_Load(object sender, EventArgs e)
        {
            ShowAllRecords();
        }private void ShowAllRecords()
        {
            this.Cursor = Cursors.WaitCursor;
            EmployeeDB emp = new EmployeeDB();
            empInfo = emp.GetAllEmployee();
            int recPos = this.BindingContext[empInfo].Position;
            if (empInfo != null)
            {
                txtEmployeeId.Text = empInfo[recPos].EmployeeId.ToString();
                txtFirstName.Text = empInfo[recPos].FirstName;
                txtLastName.Text = empInfo[recPos].LastName;
            }EmployeeDAL类库下的EmployeeDB类:
public EmployeeInfo[] GetAllEmployee()
        {
            SqlConnection conn = new SqlConnection(connStr);
            SqlCommand cmd = conn.CreateCommand();
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.CommandText = "GetAllEmployee";            ArrayList arrEmp = new ArrayList();
            try
            {
                conn.Open();
                SqlDataReader dr = cmd.ExecuteReader();
                EmployeeInfo emp;
                if (dr.HasRows)
                {
                    while (dr.Read())
                    {
                        emp = new EmployeeInfo((int)dr["EmployeeId"], (string)dr["FirstName"], (string)dr["LastName"]);
                        arrEmp.Add(emp);
                    }
                }
                else
                    arrEmp = null;
                dr.Close();
                conn.Close();
                return (EmployeeInfo[])arrEmp.ToArray(typeof(EmployeeInfo));
            }EmployeeModel类库下的EmployeeInfo类:
public class EmployeeInfo
    {
        public EmployeeInfo()
        {
            //构造函数
         }        private int employeeId;
        private string firstName;
        private string lastName;        public int EmployeeId
        {
            get{return employeeId;}
            set{employeeId = value;}
        }        public string FirstName
        {
            get{return firstName;}
            set{firstName = value;}
        }        public string LastName
        {
            get{return lastName;}
            set{lastName = value;}
        }        public EmployeeInfo(int employeeId, string firstName, string lastName)
        {
            this.employeeId = employeeId;
            this.firstName = firstName;
            this.lastName = lastName;
        }
    }
原本只想部分代码上来的,怕有人叫我发完整的上来或者怕部分不理解,所以发多了少少,其实这代码不算,懂得的人一看就明白。
我在群里问过几个人,意见不一致的,所以上来看看大家是怎么说的,希望大家帮帮我。问题1:Model层,即是实体层,多定义一个带参数的构造函数,像这样的构造函数有什么作用或目的?(我见有不少案例都是这样的)
问题2:public EmployeeInfo[] GetAllEmployee()中的EmployeeInfo[]是一个类返回类型吧,有什么作用?
问题3:emp = new EmployeeInfo((int)dr["EmployeeId"], (string)dr["FirstName"], (string)dr["LastName"]);解释一下这一条代码,最好说一下那三个字段是怎么传递和保存的?
问题4:ShowAllRecords()方法里的empInfo=emp.GetAllEmployee(),当函执行到这里时,empInfo保存了什么值?你的回答不仅帮到我,可能也帮到很多路过这里的新手们,如果分不够再加分。

解决方案 »

  1.   

    问题1:Model层,即是实体层,多定义一个带参数的构造函数,像这样的构造函数有什么作用或目的?(我见有不少案例都是这样的) 
    EmployeeInfo employeeInfo=new EmployeeInfo(1,"Smith","David");这样就直接给EmployeeInfo 的EmployeeId FirstName LastName三个属性赋值了,就不用
    employeeInfo.EmployeeId=1 这样赋值了问题2:public EmployeeInfo[] GetAllEmployee()中的EmployeeInfo[]是一个类返回类型吧,有什么作用? 返回EmployeeInfo一个集合,是EmployeeInfo类型的数组,可以直接绑定到GridView的DataSource
    Gridview.DataSource=GetAllEmployee();
    Gridview.DataBind();
    问题3:emp = new EmployeeInfo((int)dr["EmployeeId"], (string)dr["FirstName"], (string)dr["LastName"]);解释一下这一条代码,最好说一下那三个字段是怎么传递和保存的?这个问题1差不多,调用了EmployeeInfo带参数的构造函数,将dr的值赋值给一个EmployeeInfo类型的对象
    问题4:ShowAllRecords()方法里的empInfo=emp.GetAllEmployee(),当函执行到这里时,empInfo保存了什么值? empInfo是EmployeeInfo对象的一个集合,也就是刚才从数据库提取到Employee表的数据补充:这里实体相当于数据库表的一个映射
      

  2.   

    理解:三个层UI、BLL、DAL都要引用Model层,都通过Model层来访问数据。
         一般 UI引用BLL、Model层;Bll引用DAL、Model层;DAL层引用Model层。
      1、首先UI层,引用了Model,就可以访问EmployeeInfo类中的方法、属性;还引用BLl层。一般不引用DAL层,
       所以楼主的 引用欠妥。
      2、其次UI层通过引用BLL层,通过逻辑BLL层来访问DAL层,其实BLl层和DAL层方法返回的
      都是Model层的EmployeeInfo类型
      3、通过DAL层,给Model层EmployeeInfo类的属性赋值,其他层就可访问到属性值。
      

  3.   

    通过参数不同构造函数实现高效集成。
    返回对象方便实现数据绑定。
    问题3:通过传值给给类属性赋值,保存在内存里。
    问题4 对empInfo进行实例化,得到相关属性。
      

  4.   

    补充下
    2问题  EmployeeInfo[] 其实相当于一个数组,主要是用在数据查询的一般不会对里面的数据进行变动。
           这里你也可以返回一个列表,即List<EmployeeInfo>,它与上面EmployeeInfo[]的分别主要是用列表的话对列表中的数据进行修改或删除等数据操作
           程序上效率会比EmployeeInfo[]好。