ADO.NET基础知识

ADO.NET定义

ADO是ActiveX Data Objects的缩写,ADO.NET是数据库应用程序和数据源之间沟通的桥梁,主要提供一个面向对象的数据访问架构,用来开发数据库应用程序,就是一组类库,可以让我们通过程序的方式访问数据库(方便用户)。

由两个主要元件是 .NET Framework 资料提供者(1:SqConnection 2:SqlCommand 3:SqlDataReader 4:SqlDataAdapter)和数据集(DataSet)。

ADO.NET基础知识_第1张图片

 

ADO.NET使用一些ADO对象,如ConnectionCommand对象,也引入了一些新对象。关键的新对象包括DataSetDataReader,和DataAdapter

 

这种改进的ADO.NET和之前的数据架构的重要区别在于存在一个对象--DataSet对象--这是独立的不同于任何的数据存储。正因为如此,DataSet功能能够作为独立的实体。你可以将DataSet理解为总是断开连接对他包含的数据源和目标一无所知的记录集,在DataSet内部,就像一个数据库一样,有表,列,关系,约束,视图等等。

 

 

ADO.NET五大对象

◆数据库好比水源,存储了大量的数据。

◆Connection好比伸入水中的进水笼头,保持与水的接触,只有它与水进行了“连接”,其他对象才可以抽到水。

◆Command则像抽水机,为抽水提供动力和执行方法,通过“水龙头”,然后把水返给上面的“水管”。

◆DataAdapter、DataReader就像输水管,担任水的传输任务,并起着桥梁的作用。DataAdapter(抽取完就可断开数据库连接) 像一根输水管,通过发动机,把水从水源输送到水库里(内存)进行保存。DataReader(保持数据库连接) 也是一种水管,和DataAdapter不同的是,DataReader不把水输送到水库里面,而是单向地直接把水送到需要水的用户那里或田地里,所以要比在水库中转一下(速度)更快。

◆DataSet则是一个大水库,把抽上来的水按一定关系的池子进行存放。即使撤掉“抽水装置”(断开连接,离线状态),也可以保持“水”的存在。这也正是ADO.NET的核心。

◆DataTable则像水库中的每个独立的水池子,分别存放不同种类的水。一个大水库由一个或多个这样的水池子组成。

 

SqlCommand---主要有以下三个方法:(Commands扫描连接然后结果集以流的形式被返回,这种流可以被DataReader对象读取,或者推入DataSet对象。)

1:ExecuterNonQuery()执行对数据库的增删改,返回受影响的行数

2:ExecuteScalar()执行查询,返回首行首列

3:ExecuteReader()执行查询,返回DataReader对象

 

 

CommandBuilder 自动生成单表命令,用于将对 DataSet 所做的更改与关联的 SQL Server 数据库的更改相协调。无法继承此类。

如果在运行时动态指定 SelectCommand 属性(例如,通过接受用户提供的文本命令的查询工具),那么您可能无法在设计时指定适当的InsertCommandUpdateCommand 或 DeleteCommand如果您的 DataTable 映射到单个数据库表或者是从单个数据库表中生成的,那么您可以利用 DbCommandBuilder 对象来自动成 DbDataAdapter 的 DeleteCommandInsertCommand 和 UpdateCommand

CommandBuilder对象使用方法:

要使用CommandBuilder对象,需要首先定义起一个实例,将该实例绑定到数据适配器对象,然后调用数据适配器对象的Update方法更新DataSet对象即可。比如下面的语句。

SqlCommandBuilder MyCb = new SqlCommandBuilder(MyAdapter);

MyAdapter.Update(MyDataSet, "T_STUDENT");

何时使用:

a. 有时候需要缓存的时候,比如说在一个商品选择界面,选择好商品,并且进行编辑/删除/更新后,
最后一并交给数据库,而不是每一步操作都访问数据库,因为客户选择商品可能进行n次编辑/删除
更新操作,如果每次都提交,不但容易引起数据库冲突,引发错误,而且当数据量很大时在用户执行
效率上也变得有些慢
b.有的界面是这样的有的界面是这样的,需求要求一定用缓存实现,确认之前的操作不提交到库,点击
页面专门提交的按钮时才提交商品选择信息和商品的其它信息. 我经常遇到这样的情况
c.有些情况下只往数据库里更新,不读取. 也就是说没有从数据库里读,SqlDataAdapter也就不知道是
更新哪张表了,调用Update就很可能出错了。这样的情况下可以用SqlCommandBuilder 了
(此段参考了他人所作)
d.在使用adapter的时候如果不是用设计器的时候,并且要用到adapter.Update()函数的时候,这时候要注意
SqlCommandBuilder必须要有

 

你可能感兴趣的:(ADO.NET基础知识)