【Asp.net】——ADO.NET介绍

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Sophia_0331/article/details/84671321

前言

       ADO.NET是对Microsoft ActiveX Data Object(ADO)一个跨时代的改进,它提供了平台互用性和可伸缩性的数据访问。由于传送的数据都是XML格式的,因此任何能够读取XML格式的应用程序都可以进行数据处理。事实上,接受数据的组件不一定是ADO.NET组件,它可以是基于一个Microsoft Visual Studio的解决方案,也可以是任何运行在其他平台上的任何应用程序。

正文

       以前接触的数据库访问,需要一直与数据库保持连接,直到获取所有满足需要的数据之后才会断开数据库连接,这种数据库访问方式称之为连接式数据访问技术。相比于以前的连接式数据访问技术,ADO.NET除了提供连接式数据访问技术之外,还提供了另一种断开式解决方案,那就是在内存中模拟一个数据库,也就是内存中的数据库。

物理数据库与内存数据库的对比:

通常我们在引用数据库时要用名词database来表示(因为创建数据库的SQL语句是create database),在一个数据库中可以包含多个表(table)和视图(view),除此之外还可以包含一些外键关系等。在一个表或者视图里可以包含多个列和行。

在ADO.NET中对上面提到的对象都在内存中进行了模拟,在内存中 的数据库对象称为Dataset,一个内存中的数据库可以包含多个在内存中的表(DataTable)和内存中的视图(DataView),并且也允许在表存在一些关系(DataRelation)。同时在一个内存中的表(Datatable)或者内存中的视图(dataview)中也允许存在行(dataRow)和列(dataColumn)。

物理数据库与内存数据库之间的各对象的对应关系如下:

本篇博客将总结6个ADO.NET中的常用对象:Connection对象,Command对象,DataReader对象,DataAdapter对象,DataSet对象,Datatable对象,DataRow对象,DataColumn对象,参数化SQL语句,分页查询SQL语句。

在ADO.NET也定义了一套用于访问数据库的标准,这个标准是以接口(interface)形式提供的,这一套接口是IDbConnection,IDbCommand,IDbDataAdapter和IDataReader,并且还有一套实现这些接口的抽象类,分别是DbConnection,DbCommand,DbDataAdapter和DataReader。

1、Connection对象

Connection对象也称为数据库连接对象,Connection对象的功能是负责对数据源的连接。所有connection对象的基类都是DbConnection类。

扫描二维码关注公众号,回复: 4330084 查看本文章

connection对象有两个重要属性:

  • ConnectionString:表示用于打开SQL server数据库的字符串;
  • state:表示connection的状态,有closed和open两种状态。

connection对象有俩个重要方法:

  • Open()方法:指示打开数据库
  • Close()方法:指示关闭数据库

连接到数据库的方式:

  • 如果要连接的数据库服务器与开发者的机器在同一个局域网里,可以使用局域网IP地址或者局域网中的电脑主机名
  • 如果要连接的数据库服务器与开发者的机器不在同一个局域网内,那么就要求数据库服务器必须有一个公网IP,我们可以使用公网IP来连接,如果数据库服务器还有互联网域名,那么用互联网域名也是可以的。
  • 如果要连接的数据库服务器与开发者所使用的机器是同一台机器,那么可以使用以下几种方式之一:“(local)”或者“.”或者“127.0.0.1”

注意:实例化一个connection对象的时候,被实例化的connection对象是关闭的,我们需要Open这个connection对象,执行完毕相关操作之后再关闭这个connection对象。

2、Command对象

Command对象也称为数据库命令对象,command对象主要执行包括添加,删除,修改及查询数据的操作的命令。也可以用来执行存储过程。用于执行存储过程时需要将command对象的commandType属性设置为commandType.StoredProcedure,默认情况下commandType属性为commandType.Text,表示执行的是普通的SQL语句。

Command对象主要有三个方法:

  • ExecuteNonQuery():执行一个SQL语句,返回受影响的行数,这个方法主要用于执行对数据库增加,更新,删除操作,注意查询的时候不是调用这个方法。
  • ExecuteReader():执行一个查询的SQL语句,返回一个dataReader对象
  • ExecuteScalar():从数据库检索单个值,这个方法主要用于统计操作。

注意:在操作数据库的时候,为了提高性能,都遵循一个原则:数据库连接对象应该尽可能晚打开,尽可能早关闭。在command对象需要执行数据库操作之前才打开数据库连接对象,执行数据库操作之后马上就关闭了数据库连接对象。

3、DataReader对象

DataReader对象是一个读取行的只读流的方式,绑定数据时比使用数据集方式性能要高,因为他是只读的,所以如果要对数据库中的数据进行修改就需要借助其他方法将所做的更改保存到数据库。

DataReader对象不能直接实例化,必须借助于相关的command对象来创建实例,例如用SQLcommand的实例的executeReader()方法可以创建SQLdataReader实例。

4、DataAdaper对象

DataAdapter对象也称为数据适配器对象,DataAdapter对象利用数据库连接对象(connection)连接的数据源,使用数据库命令对象(command)规定的操作从数据源中检索出数据送往数据集对象(dataset),或者将数据集中经过编辑后的数据送回数据源。

注意:一个数据集中可以放置多张数据表。但是每个数据适配器只能够对应于一张数据表。

5、DataSet对象

dataset对象也称为数据集对象,dataset对象用于表示那些存储在内存中的数据,它相当于一个内存中的数据库,它可以包括多个Datatable对象以及dataview对象。dataset主要用于管理存储在内存中的数据以及对数据的断开操作。

由于dataset对象提供了一个离线的数据源,这样就减轻了数据库以及网络的负担,在设计程序的时候可以将dataset对象作为程序的数据源。

6、Datatable对象

Datatable是ADO.NET库中的核心对象,就像普通的数据库中的表一样,它也有行和列,它主要包括datarow和dataColumn,分别代表行和列。

(1)数据行(datarow)

(2)数据列(datacolumn)

7、参数化SQL语句

避免SQL注入的方法有两种:

  • 一是所有的SQL语句都存放在存储过程中,这样不但可以避免SQL注入,还能提高性能,并且存储过程可以由专门的数据库管理员编写和集中管理,不过这种做法有时候针对相同的几个表有不同条件的查询,SQL语句可能不同,这样就会编写大量的存储过程。
  • 二是参数化SQL语句。

在参数化SQL语句中将数值以参数化的形式提供:

select * from UserInfo where sex=@sex

8、分页查询SQL语句

分页查询就是根据需要每次只返回所需要的数据,而不用每次都从数据库中全部把数据提取出来,这样可以降低程序与数据库之间的数据传送量,并且还可以提高程序的性能。

一般情况下我们在数据量大的时候总是会分页显示(谁也不会一下子将几万条数据全部一次性显示给用户),这样决定我们返回的查询结果集的参数有两个:当前显示的页数pageIndex和每页显示的记录条数size。

例如,如果每页显示5条记录,那么第n页显示的数据记录的公式为:

select top 5 * from UserInfo where UserId not in (select top(n-1)*5 UserId from UserInfo order by UserId asc) order by UserId asc

猜你喜欢

转载自blog.csdn.net/Sophia_0331/article/details/84671321