对ADO.NET的应该写了三篇博客了,之前的三篇博客
三层登录(D层)注重代码解析 机房重构——注重对SQLHelper类解析 对ADO.NET有个全面的了解(概况)
感觉一次比一次深入,昨天在看ASP.NET视频的时候,又遇到了ADO.NET,再总结一下。
这次总结主要对ADO.NET的五大对象及两种连接方式进行总结。
五大对象
ADO.NET是.NET平台操作数据库的接口,更多的介绍详见对ADO.NET有个全面的了解(概况),而ADO.NET不用多想,就包含了下面的五个对象
不太懂为什么SqlDataAdapter封装了SqlCommand看下图
SqlDataAdapter的四个属性包含了增删改查(SqlCommand)四个属性,如果对上面图片的不太理解的话,下面结合代码进行分析
两种连接方式
面向连接式的:机房重构及牛腩用了此方法——实现了查的功能
//读取配置文件键值,获取数据库信息
string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;
//实例化Sqlconnection对象连接数据库
using (SqlConnection conn = new SqlConnection(connStr))
{
//实例化SqlCoommand对象实现数据库操作
using (SqlCommand cmd = new SqlCommand())
{
//获取此command对象使用的conncetion对象的名称
cmd.Connection = conn;
//获取要对数据源执行的SQL语句或存储过程或表名
cmd.CommandText = " select * from UserInfo where ID=@ID";
//为参数赋值
SqlParameter par = new SqlParameter("@ID", SqlDbType.Int);
par.Value = id;
cmd.Parameters.Add(par);
//打开数据库
conn.Open();
//实例化datatable对象及SqlDataReader对象
DataTable dt = null;
SqlDataReader sdr = null;
//SqlDataReader对象接收command对象ExecuteReader方法返回的对象
using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
{
//通过所提供的 IDataReader,用某个数据源的值填充 DataTable。
dt.Load(sdr);
}
return dt;
}
先不解释,接着看
面向无连接式的:ASP.NET视频上用的方法——实现了查的功能
string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;
//根据接收到的ID查询数据表中相应的记录
using (SqlConnection conn = new SqlConnection(connStr))
{
//实例化SqlDataAdapter对象对数据库进行操作
using (SqlDataAdapter apter = new SqlDataAdapter("select * from UserInfo where ID=@ID", conn))
{
SqlParameter par = new SqlParameter("@ID", id);
//使用SqlDataAdapter对象SelectCommand向参数集合中添加参数
apter.SelectCommand.Parameters.Add(par);
DataTable da = new DataTable();
//用fill方法填充DataTable
apter.Fill(da);
}
}
两种方式在代码上的比较
面向连接式 | 面向无连接式 | |
操作数据对象 | SqlCommand对象 |
SqlDataAdapter对象 |
添加参数集合 | cmd.Parameters.AddRange(paras) |
apter.SelectCommand.Parameters.Add(par); |
填充Datable对象 | SqlDataReader对象填充 using(sdr=cmd.ExecuteReader(CommandBehavior.CloseConnection)) |
SqlDataAdapter对象fill方法填充 apter.Fill(dt); |
从这个图中可以看出判断两个连接方式,就看是使用了SqlCommand对象还是SqlDataAdapter对象
进一步来看
两种方式在定义上比较
两种方法的区别便落在了SqlDataAdapter对象的fill方法及SqlCommand类的ExecuteReader方法
面向无连接:SqlDataAdapter对象的fill方法
fill方法填充的DataSet(DataTable)相当于在内存中开辟了一个小型数据库,与关系数据库无关,等使用增删改语句操作完后,使用update方法一并更新到关系数据库中,适用于数据量大
面向连接:SqlCommand类的ExecuteReader方法
而ExecuteReader方法返回的是SqlDataReader对象,使用此对象填充DataSet(DataTable),相当于缓存,一直保持数据库连接,执行一句增删改语句便更新到关系数据库中,适用于数据量小