• (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分层编写。

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

  • 相关阅读:
    MMORPG 游戏服务器端设计转载
    OpenFileMapping失败 原因ERROR_FILE_NOT_FOUND
    让程序在崩溃时体面的退出转
    [c\C++]线程函数的比较
    VS2005 2008 2010字体颜色配置方案
    用文件映射(File Mapping)实现进程间内存共享
    [Debug]通过LeakDiag查看内存泄漏
    线程函数的设计以及MsgWaitForMultipleObjects函数的使用要点 转
    VC++ 中使用内存映射文件处理大文件
    透视投影
  • 原文地址:https://www.cnblogs.com/kaolalovemiaomiao/p/4710653.html
Copyright © 2020-2023  润新知