操作数据类
避免代码重用、造对象太多、不能分工开发
利用面向对象的方法,把数据访问的方式优化一下,利用封装类
一般封装成三个类:
1.数据连接类 提供数据连接对象
需要引用命名空间: 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); } } }
2.实体类 根据数据库中的表来做
比如Nation表 就建一个Nation类
表名=类名; 封装的字段=表里面的属性
例:
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; } } }
3.数据访问类 实现对表的各种操作 增删改查
需要引用命名空间: 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(); } }
查看元素使用foreach遍历集合
※foreach里面不能加减任何一个元素,但可以修改数据
例:
Console.WriteLine("请输入代号:"); string code = Console.ReadLine(); List<Nation> list = da.Select(code); foreach (Nation data in list) { Console.WriteLine(data.Code + "--" + data.Name); }