数据操作类:增删改查(三大类)
一、数据连接类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
namespace ConsoleApplication1
{
//提供数据连接对象
public class dbconnect
{
//先定义一个静态的方法或属性
private static string connstring = "server=.;database=mydb;user=sa;pwd=100867";//如果换了数据库或电脑就只改这个地方就好
public static SqlConnection conn//属性名称
{
get//只读的一个属性
{
return new SqlConnection(connstring);//连接字符串
}
}
二、实体类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
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; }
}
}
}
三、数据访问类(增删改查封装方法)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
namespace ConsoleApplication1
{
//主要实现对nation表的各种操作(增删改查)
public class nationDA
{
private SqlConnection _conn;//连接对象
private SqlCommand _cmd;//命令对象
private SqlDataReader _dr;//读取器对象
//构造方法来初始化连接对象 命令对象
public nationDA()//构造方法 直接写类名
{
_conn = dbconnect.conn;//对连接对象进行初始化 里面的成员是静态的,直接用类名来调用
_cmd = _conn.CreateCommand();//对命令对象进行初始化 上面已经连接了对象_conn,它里面有个createcommand方法,
//初始化后就不用额外的赋值了
}
//封装添加数据的方法,必须是public,让外界来调用
public bool add(string code,string name)//如果外界要调用需要参数
{
//添加数据 写SQL语句
_cmd.CommandText = "insert into nation values(@code,@name)";
_cmd.Parameters.Clear();
_cmd.Parameters.AddWithValue("@code",code);
_cmd.Parameters.AddWithValue("@name",name);
_conn.Open();
int n= _cmd.ExecuteNonQuery();
if (n > 0)//判断一下n的值
{
return true;
}
else
{
return false;
}
_conn.Close();
}
//查询所有数据的方法
public List<nation> select()//<>里面写存的集合类型,对象的类型,存一种对象.<nation>之前做的nation实体类
{
_cmd.CommandText = "select * from nation";
_conn.Open();
_dr= _cmd.ExecuteReader();
//把查到的数据读出
List<nation> list=new List<nation>();//list<>的定义方式
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)//<>里面写存的集合类型,对象的类型,存一种对象.<nation>之前做的nation实体类
{
_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>();//list<>的定义方式
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 updata(string code, string name)//参数是code 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.Clear();
_cmd.Parameters.AddWithValue("@code",code);
_conn.Open();
_dr = _cmd.ExecuteReader();
if (_dr.HasRows)
{
_dr.Read();
return _dr[0].ToString();
}
else
{
return "汉族";
}
_conn.Close();
}
}
}
四、具体操作表,Program
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Program1
{
static void Main1(string[] args)
{
//具体怎么操作 让用户往nation表中添加数据
//Console.WriteLine("请输入代号:");
//string code = Console.ReadLine();
//Console.WriteLine("请输入名称:");
//string name = Console.ReadLine();
////调用nationDA里面的方法就先造一个对象
//nationDA da = new nationDA();
//if (da.add(code, name))
//{
// Console.WriteLine("添加成功!");
//}
//else
//{
// Console.WriteLine("添加失败!");
//}
//查询 先造一个对象
nationDA da = new nationDA();
//List<nation> list = da.select();
////使用foreach遍历集合中的元素 foreach里不能加减元素(不能加减一条数据)
//foreach (nation data in list)
//{
// Console.WriteLine(data.Code + "__" + data.Name);
//}
//条件查询
// Console.WriteLine("请输入代号:");
// string code = Console.ReadLine();
//List<nation> list= da.select(code);
//foreach (nation data in list)
//{
// Console.WriteLine(data.Code+"__"+data.Name);
//}
//删除 删除都得提示 是否删除,得先查询到并显示出来,判断是否删除
Console.WriteLine("请输入要删除的代号:");
string code = Console.ReadLine();
//是否删除 先显示(查询)
List<nation> List = da.select(code);
Console.WriteLine("这是您要删除的数据:");
foreach (nation data in List)
{
Console.WriteLine(data.Code+"--"+data.Name);
}
Console.WriteLine("确认要删除这条数据吗?如果要删除请输入:1;如果不删除请输入:2");
string s= Console.ReadLine();
if (s == "1")
{
if (da.Delete(code))
{
Console.WriteLine("删除成功!");
}
else
{
Console.WriteLine("删除失败!");
}
}
else
{
Console.WriteLine("数据已保留!");
}
Console.ReadLine();
}
}
}
五、查俩表(就再做另一表的实体类,数据访问类)
1、实体类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
public class Info
{
private string code;
public string Code
{
get { return code; }
set { code = value; }
}
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
private bool sex;
public bool Sex
{
get { return sex; }
set { sex = value; }
}
private string nation;
public string Nation
{
get { return nation; }
set { nation = value; }
}
private DateTime birthday;
public DateTime Birthday
{
get { return birthday; }
set { birthday = value; }
}
}
}
2、数据访问类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
namespace ConsoleApplication1
{
public class InfoDA
{
private SqlConnection _conn;
private SqlCommand _cmd;
private SqlDataReader _dr;
public InfoDA()
{
_conn = dbconnect.conn;
_cmd = _conn.CreateCommand();
}
public List<Info> select()
{
_cmd.CommandText = "select * from Info";
_conn.Open();
_dr= _cmd.ExecuteReader();
List<Info> list = new List<Info>();
if (_dr.HasRows)
{
while (_dr.Read())
{
Info data = new Info();
data.Code=_dr[0].ToString();
data.Name=_dr[1].ToString();
data.Sex=Convert.ToBoolean( _dr[2]);
data.Nation=_dr[3].ToString();
data.Birthday=Convert.ToDateTime( _dr[4]);
list.Add(data);
}
}
_conn.Close();
return list;
}
}
}
3、操作表
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
InfoDA da = new InfoDA();
List<Info> list = da.select();
foreach (Info data in list)
{
string sexname = data.Sex ? "男" : "女";
//先在InfoDA里做封装方法,再过来调用,
nationDA nda = new nationDA();
string nname= nda.nationname(data.Nation);
Console.WriteLine(data.Code + "--" + data.Name + "--" + sexname + "--" + nname + "--" + data.Birthday);
}
Console.ReadLine();
}
}
}