首页 > 代码库 > ADO.NET 【实体类】【数据访问类】

ADO.NET 【实体类】【数据访问类】

 

认识分层结构,分层式结构是最常见,也是最重要的一种结构。

三层架构(3-tier architecture)          

     界面层(User Interface layer) 主要对用户的请求接受,以及数据的返回,为客户端提供应用程序的访问。

     业务逻辑层(Business Logic Layer)主要是针对具体的问题的操作,也可以理解成对数据层的操作

     数据访问层(Data access layer)主要是对非原始数据(数据库或者文本文件等存放数据的形式)的操作层

 

     数据访问层包括   实体类

                            数据访问类

优点

1、开发人员可以只关注整个结构中的其中某一层;

2、可以很容易的用新的实现来替换原有层次的实现;

3、可以降低层与层之间的依赖;

4、有利于标准化;

5、利于各层逻辑的复用。

6、结构更加的明确

7、在后期维护的时候,极大地降低了维护成本和维护时间

缺点

1、降低了系统的性能。这是不言而喻的。如果不采用分层式结构,很多业务可以直接造访数据库,以此获取相应的数据,如今却必须通过中间层来完成。

2、有时会导致级联的修改。这种修改尤其体现在自上而下的方向。如果在表示层中需要增加一个功能,为保证其设计符合分层式结构,可能需要在相应的业务逻辑层和数据访问层中都增加相应的代码。

3、增加了开发成本。

 

*** 约定  在项目下建文件夹 App_Code  要创建的实体类文件,操作类文件都放在改文件夹下。

                  实体类文件名=表明,操作类文件名=表名+Data

 

  实体类   
        -- 数据库映射出来的结构对象,最简单的封装。
 

把数据库的表名变成类的类名

把数据库的每一个列,变为实体类中的成员变量和属性

列名与属性名一致

 

例:对表 users 实体类封装

技术分享
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication2.App_Code
{
    public class Users
    {
        private int _Ids;

        public int Ids
        {
            get { return _Ids; }
            set { _Ids = value; }
        }
        private string _UserName;

        public string UserName
        {
            get { return _UserName; }
            set { _UserName = value; }
        }
        private string _PassWord;

        public string PassWord
        {
            get { return _PassWord; }
            set { _PassWord = value; }
        }
        private string _NickName;

        public string NickName
        {
            get { return _NickName; }
            set { _NickName = value; }
        }
        private bool _Sex;

        public bool Sex
        {
            get { return _Sex; }
            set { _Sex = value; }
        }
        private DateTime _Birthday;

        public DateTime Birthday
        {
            get { return _Birthday; }
            set { _Birthday = value; }
        }
        private string _Nation;

        public string Nation
        {
            get { return _Nation; }
            set { _Nation = value; }
        }

    }
}
View Code

 

 
  数据访问类(操作类)  
 
                -- 将某个表的数据库操作写成一个一个方法,放入到此类中供外部调用

 

例:对表 users 建立查询,添加操作类

技术分享
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;

namespace ConsoleApplication2.App_Code
{
    public class UsersData
    {
        SqlConnection conn = null; //“公海” 提升 conn cmd 的作用域
        SqlCommand cmd = null;

        public UsersData()    //构造函数,放置每个方法都要使用,每次实例化都要运行
        {
            string sql = "server=.;database=Data0216;user=sa;pwd=123";

            conn = new SqlConnection(sql);
            cmd = conn.CreateCommand();
        }
        
        //查询所有方法

        public List<Users> SelectAll()    //有返回值 List<Users> 返回一个集合,
        {
            List<Users> list = new List<Users>();  //实例化一个 集合

            cmd.CommandText = "select *from Users";  //查询语句

            conn.Open();

            SqlDataReader dr = cmd.ExecuteReader();

            while (dr.Read())  //在这里没有进行有无 行 的判断,直接读取记录  
            {                                         
                                                   
                Users u = new Users();  //实例化一个 users 对象,前提是已经建立 users 实体类

                u.Ids = Convert.ToInt32(dr["ids"]);
                u.UserName = dr["UserName"].ToString();
                u.PassWord = dr["PassWord"].ToString();
                u.NickName = dr["NickName"].ToString();
                u.Sex = Convert.ToBoolean(dr["Sex"]);
                u.Birthday = Convert.ToDateTime(dr["Birthday"]);
                u.Nation = dr["Nation"].ToString();

                list.Add(u);        
            }
            conn.Close();

            return list;   //返回 list 
        }


        //添加记录方法
        public void Insert(Users u)  //需要输入,输入一个 users 类型的变量
        {
            cmd.CommandText = "insert into Users values(@username,@password,@nickname,@sex,@birthday,@nation)";
            
            cmd.Parameters.Clear();
            cmd.Parameters.AddWithValue("@username", u.UserName);
            cmd.Parameters.AddWithValue("@password", u.PassWord);
            cmd.Parameters.AddWithValue("@nickname", u.NickName);
            cmd.Parameters.AddWithValue("@sex", u.Sex);
            cmd.Parameters.AddWithValue("@birthday", u.Birthday);
            cmd.Parameters.AddWithValue("@nation", u.Nation);

            conn.Open();
            cmd.ExecuteNonQuery();
            conn.Close();
        }

    }
}
View Code

 

练习题

对 Student表,重新排序 。如当 S002 删除后剩下的重新排序
S001     S001
S003     S002
S004     S003

 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

ADO.NET 【实体类】【数据访问类】