界面层:
业务逻辑层:
数据访问层:
实体类 最简单的封装
把数据库的表名变成类的类名
把数据库的每一个列,变为实体类中的成员变量和属性
列名与属性名一致
数据访问类
将某个表的数据库操作写成一个一个方法,放入到此类中
供外部调用
1、实体类 根据数据库中的表来做
比如Nation表 就建一个Nation类
表名=类名; 封装的字段=表里面的属性
封装快捷键:Ctrl + R + E + Enter + Enter
例:
public class Nation { private string code; public string Code { get { return code; } set { code = value; } } private string name; public string Name { get { return name; } set { name = value; } } }
2、数据访问类 实现对表的各种操作 增删改查
需要引用命名空间: using System.Data.SqlClient;
查询所有数据返回的是一个集合,利用List<写存放数据的类型> 泛型集合(广泛利用于集合里面存对象)
例:
//主要实现对Nation表的各种操作(增删改查) public class NationDA { private SqlConnection _conn; //连接对象 private SqlCommand _cmd; //命令对象 private SqlDataReader _dr; //读取器对象 //构造方法来初始化连接对象 命令对象 public NationDA() { _conn = DBConnect.Conn; //对连接对象进行初始化 _cmd = _conn.CreateCommand(); //对命令对象进行初始化 } //添加数据的方法 public bool Add(string code,string name) { _cmd.CommandText = "insert into Nation values(@code,@name)"; _cmd.Parameters.AddWithValue("@code",code); _cmd.Parameters.AddWithValue("@name",name); _conn.Open(); int n = _cmd.ExecuteNonQuery(); _conn.Close(); if (n > 0) { return true; } else { return false; } } //查询所有数据的方法 public List<Nation> Select() { _cmd.CommandText = "select * from Nation"; _conn.Open(); _dr = _cmd.ExecuteReader(); //定义一个空的集合 List<Nation> list = new List<Nation>(); if (_dr.HasRows) { while (_dr.Read()) { //造一个Nation对象 Nation data = new Nation(); data.Code = _dr[0].ToString(); data.Name = _dr[1].ToString(); //扔到集合里面 list.Add(data); } } _conn.Close(); return list; } //根据条件查询的方法 public List<Nation> Select(string code) { _cmd.CommandText = "select * from Nation where Code=@code"; _cmd.Parameters.Clear(); _cmd.Parameters.AddWithValue("@code",code); _conn.Open(); _dr = _cmd.ExecuteReader(); //定义一个空的集合 List<Nation> list = new List<Nation>(); if (_dr.HasRows) { while (_dr.Read()) { //造一个Nation对象 Nation data = new Nation(); data.Code = _dr[0].ToString(); data.Name = _dr[1].ToString(); //扔到集合里面 list.Add(data); } } _conn.Close(); return list; } //删除方法 public bool Delete(string code) { _cmd.CommandText = "delete from Nation where Code=@code"; _cmd.Parameters.Clear(); _cmd.Parameters.AddWithValue("@code",code); _conn.Open(); int n = _cmd.ExecuteNonQuery(); _conn.Close(); if (n > 0) { return true; } else { return false; } } //修改方法 public bool Update(string code,string name) { _cmd.CommandText = "update Nation set Name=@name where Code=@code"; _cmd.Parameters.Clear(); _cmd.Parameters.AddWithValue("@code",code); _cmd.Parameters.AddWithValue("@name",name); _conn.Open(); int n = _cmd.ExecuteNonQuery(); _conn.Close(); if (n > 0) { return true; } else { return false; } } public string NationName(string code) { _cmd.CommandText = "select Name from Nation where Code=@code"; _cmd.Parameters.AddWithValue("@code",code); _conn.Open(); _dr = _cmd.ExecuteReader(); if (_dr.HasRows) { _dr.Read(); return _dr[0].ToString(); } else { return "汉族"; } _conn.Close(); } }
3、数据连接类 提供数据连接对象
需要引用命名空间: using System.Data.SqlClient;
例:
public class DBConnect { private static string connstring = "server=.;database=mydb;user=sa;pwd=123"; public static SqlConnection Conn //利用静态的方法 通过某个对象或方法可以获取到连接对象 { get { //只读属性 return new SqlConnection(connstring); } } }