在我们编程的这么长时间以来,几乎每个程序都需要我们与数据库打交道,对数据的访问和处理都是少不了的操作。在ASP.NET中,它给我们提供了ADO.NET技术,ADO.NET提供了对关系数据、XML和应用程序数据的访问,支持多种开发需求。 其实,在我们学习数据库的时候,就与ADO.NET接触过,但之前也没有总结,这一次的学习,比以前理解起来要容易些,所以也总结一下。 ADO.NET组件将数据访问与数据处理分离,它是通过两个主要的组件:.NET数据提供程序(data provider)和DataSet来完成这一操作的。下面是ADO.NET的整体结构图:
ADO.NET数据访问一般有两种方式:一是通过DataReader对象直接访问;另一种是通过DataSet对象和DataAdapter对象来访问。它包含一下四种对象:
- Connection,提供与数据源的连接;
- Command,用于返回、修改数据,运行存储过程以及发送或检索参数信息的数据库命令;
- DataReader,从数据源中提供高性能的数据流;
- DataAdapter,提供连接DataSet对象和数据的桥梁,使用Command对象在数据源中执行SQL命令,以便将数据加载到DataSet对象中,并使DataSet对象中数据的更改与数据源保持一致。
下面就对这四个对象一一总结一下:
(一)Connection对象
对于数据库的操作,首先需要连接数据库,在ADO.NET中,利用Connection对象连接数据库,其常用的一些参数主要有:
- Data Source:SQL Server数据库服务器的名称;
- Initial Catalog:数据库名称;
- Integrated Security:决定连接是否安全;
- User ID:SQL Server登录账户;
- Password:SQL Server账户的登录密码。
(二)Command对象
数据库连接成功后,就可以读取和操作数据库中的数据,主要通过使用Command对象执行SQL命令实现。
SQLCommand类,我是在机房重构的时候,有了进一步深刻的认识,不论是执行SQL语句,还是存储过程,这都是通过command对象的属性和方法改变的。下面就简单列举一些我们在机房重构中用到过的各种属性和方法,有的在当时用的时候也许还不理解它的含义。
sqlCommand类的属性:
- commandtext:类型为string,其值可以是SQL语句,存储过程或表;
- commandType:类型为枚举类型,Text为SQL语句,StoredProcedure为存储过程,TableDirect为要读取的表;
- connection:获取sqlconnection对象,使用该对象与数据库进行通信。
sqlCommand类的重要方法:
- ExecuteNonQuery:类型为int,执行无返回结果的SQL语句;
- ExecuteReader:类型为SqlDataReader,执行Select、tableDirect命令或有返回结果的存储过程;
- CreateParameter:创建SQLParameter对象。
sqlCommand类的构造函数:
- sqlCommand():不带参数,直接创建对象;
- sqlCommand(string CommandText):根据SQL语句创建对象;
- SqlCommand(string CommandText,SqlConnection conn):根据SQL语句和数据源连接创建对象;
- SqlCommand(string CommandText,SqlConnection conn,sqlTransaction tran):根据SQL语句、数据源连接和事务对象创建对象;
(三)DataReader对象
如果利用Command对象所执行的命令是有返回数据的Select命令,此时Command对象会自动产生一个DataReader对象,它可以将数据源的数据取出后显示给使用者,它一次只能读取一条数据,而且只能只读。
(四)DataAdapter对象
DataAdapter对象能够用来保存和检索数据,其Fill方法用于将查询结果填充到DataSet或DataTable中。
除了上面的四个对象,DataSet我们也算比较熟悉了,在机房重构的时候,我们也有用到过,我们将数据库与数据控件绑定,便可得到一个DataSet,这样对于我们访问和处理数据也方便了许多。
DataSet可以看成是一个数据容器,它是各种数据源中的数据在计算机内存中映射成的缓存。具有以下特性:
- 独立性,其独立于各种数据源;
- 离线和连接,其既可以以离线方式也可以以实时连接方式操纵数据库中的数据;
- 其是一种数据关系视图。
学习的过程中就是需要我们不断反复,有的时候是先学习理论,再后面慢慢都会用到,用过了之后,觉得自己又理解得深刻了些;有的时候是自己已经用到了,但对于其理论上的含义不清楚,等到后来碰到了相关的理论知识的学习,突然有种恍然大悟的感觉。不管哪一种,理论与实践相结合,是必不可少的。