(11)C#之ADO.NET 初始三层架构的DAL层

◇三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。

  区分层次的目的即为了“高内聚低耦合”的思想。在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。                        (以上来自百度百科“三层架构”)

◇我个人的理解是,每一层都实现自己的功能,然后相互调用,最后使得代码更加方便的管理。

◇例如:我们可以把对数据库的操作代码(例如一些select 或者insert语句写在DAL层的一个方法中,然后在调用它们)。接下来我就来详细分析这个例子:

 

①前提说明:数据库中有一张表,有三个字段。然后我们新建一个名为DALWindow的窗口,放上来个Button控件,一个叫做insert,一个叫做selcect,如下图:

                               

 

②为了方便进行获取以及赋值,我们需要申请一个定义Person类:

    class Person
    {
        public string Name { get; set; }
        public int? Age { get; set; }
        public int Height { get; set; }
    }

◇注意这个的int?类型,应该与数据库中的可控字段对应。

 

③然后新建一个名为DAL.cs的类作为数据访问层:

     一、这里先写下插入数据的数据访问层的代码:

        public static object ToDBValue(object value)
        {
            if (value == null)
            {
                return DBNull.Value;
            }
            else
            {
                return value;
            }
        }



        public static int DALInsert(Person person)
        {         
           int i = SqlHelper.ExecuteNonQuery("Insert into T_Person values (@name,@age,@height)",
                new SqlParameter("@name",ToDBValue(person.Name)),
                new SqlParameter("@age",ToDBValue(person.Age)),
                new SqlParameter("@height",person.Height));
          return i;
        }

◇其中,ToDBValue()方法是用来处理把我们要插入的null类型转换成数据库中可识别的NULL类型的

            然后在insert的Click事件中调用这个静态方法:

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            Person p1 = new Person();
            p1.Height = 1800;
            int i=  DAL.DALInsert(p1);
            MessageBox.Show("成功插入"+i.ToString()+"条数据");
        }

◇大家可以看出,这时候在这个Click事件中,代码就显得格外简单,而且没有任何关于数据库的插入语句以及一些ADO.NET对象。直观明了。

 

    二、然后再来写查询数据的数据访问层的代码:

     public static object FromDBValue(object value)
        {
            if (value == DBNull.Value)
            {
                return value = null;
            }
            else
            {
                return value;
            }
        }



        public static Person DALSelectByHeight(int height)
        {
            Person person = new Person();
            DataTable dt = SqlHelper.ExecuteDataTable("select * from T_Person where Height = @height",
                new SqlParameter("@height",height));

            if (dt.Rows.Count == 1)
            {
                foreach (DataRow dr in dt.Rows)
                {
                    person.Age = (int?)FromDBValue(dr["Age"]);
                    person.Name = (string)FromDBValue(dr["Name"]);
                    person.Height = (int)FromDBValue(dr["Height"]);
                }
                return person;
            }
            else
            {
               
                person.Name = "000";
                person.Height = 000;
                person.Age = 000;
                return person;
            }

        }

◇FromDBValue方法是用来判断和获取数据库中的NULL类型以转化成代码可识别的null类型

    然后就是select按钮的Click事件:

private void button2_Click(object sender, RoutedEventArgs e)
        {
            
              Person p1 =  DAL.DALSelectByHeight(123);
              MessageBox.Show(p1.Age.ToString());
        }

◇这样就完成了,查询和插入数据的DAL分层编写。

◇在很小的项目中,看似步骤很麻烦,效率很低。但是在大的项目中,这是必须这样做的,才能准确的修改查看代码。 

 

posted @ 2015-10-23 13:11  考拉爱喵喵  阅读(5102)  评论(0编辑  收藏  举报