当前位置: 首页 > 文章教程  > 计算机与互联网 > 网络编程

7.3ADO.NET的对象

8/31/2020 9:52:39 PM 人评论

7.3ADO.NET的对象

7.3 ADO.NET的对象

ADO.NET提供了用于完成如数据库连接、查询数据、插入数据、更新数据和删除数据等操作的对象,主要包括下面5个对象。

7.3.1 Conection对象

Connection对象用于建立和特定数据库的连接,在对数据源的数据执行任何操作前必须建立连接,包括读取、删除、新增或者更新数据等。所有的Connection对象的基类都是DbConnection类。

1.连接字符串

在ADO.NET中,无论连接什么数据源,总得先创建一个对数据源的连接对象,即Connection对象。而创建Connection对象时,就必须需要提供一个连接字符串。连接字符串的语法结构很简单,无论由什么数据提供程序,都需要在连接字符串中提供以下基本信息,这些基本信息使用分号(;)隔开。

● 服务器地址(Data Source或者server)。服务器地址标识数据库服务器的地址,其值可以是IP地址、计算机名称与localhost。localhost通常用于数据库服务器和ASP.NET应用程序位于同一台计算机之上,也可以使用“Data Source=.”来代替Data Source= localhost。

● 数据库名称(Initial Catalog或者database)。数据库名称标识ASP.NET应用程序所使用的数据库名称,如Initial Catalog= db_news或者database= db_news。

● 如何通过数据库验证。在使用SQL Server或者Oracle数据提供程序时,可以选择提供验证身份或者以当前用户身份登录。一般情况下选择以当前用户身份登录,因为这样不需要在代码或者配置文件中输入密码。

一般情况下,建议使用Windows身份验证连接到支持的数据源。

连接字符串中使用的语法根据提供程序的不同而不同。表7-4列出用于.NET Framework数据提供程序的Windows身份验证的语法。

表7-4 各种数据提供程序的Windows身份验证语法

alt

(1)SqlClient连接字符串

SqlConnection连接字符串的语法记录在ConnectionString属性中。可以使用ConnectionString属性来获取或设置针对SQL Server 7.0或更高版本的数据库的连接字符串。如果需要连接到早期版本的SQL Server,则必须使用适用于OleDb的.NET Framework数据提供程序(System.Data.OleDb)。例如,下列两种语法形式都将使用Windows身份验证连接到本地服务器上的manege数据库。

alt

在上面的连接字符串中,Persist Security Info关键字的默认设置为False。如果将其设置为true或yes,则允许在打开连接后通过连接获取安全敏感信息(包括用户ID和密码)。始终将Persist Security Info设置为False,以确保不受信任的源无法访问敏感的连接字符串信息。因此,为了书写简单,一般省略Persist Security Info关键字,如下面的代码所示:

alt

一般情况下,很少使用Windows身份验证来连接到SQL Server,而大多数是采用SQL Server身份证,即指定用户名和密码。如下面的代码所示:

alt

除此之外,还可以连接并附加到SQL Server Express用户实例。用户实例是仅在SQL Server 2005以上速成版中提供的新功能。它们允许以最低权限的本地Windows帐户运行的用户附加并运行SQL Server数据库。而无须具有管理权限。使用用户Windows凭据执行用户实例,而不是作为服务执行用户实例。可以通过下面的连接字符串示例来连接并附加到SQL Server Express用户实例:

alt

上述连接字符串中的键字含义如下所示:

● Data Source关键字是指生成用户实例的SQL Server Express的父实例。默认实例为.\SQLExpress。

● Integrated security设置为true。如果要连接到用户实例,需要Windows身份验证;它不支持SQL Server登录名。

● User Instance设置为true,这样就可调用用户实例(默认值为false)。

● AttachDBFileName连接字符串关键字用于附加主数据库文件(mdf),该文件必须包含完整路径名。AttachDbFileName还与SqlConnection连接字符串中的extended properties和initial file name键相对应。

● 包含在管道符号中的|DataDirectory|替代字符串打开连接的应用程序的数据目录,并提供。

● 指示.mdf和.1df数据库和日志文件的位置的相对路径。如果要在其他位置查找这些文件,则必再提供这些文件的完整路径。

(2)OleDb连接字符串

OleDbConnection的ConnectionString属性允许获取或设置OLE DB数据源(如Microsoft Access、SQL Server 6.5或更早版本)的连接字符串。与SqIConneetion不同,必须为OleDbConnection连接字符串指定提供程序名称。

如下列连接字符串使用Jet程序连接到Microsoft Access数据库。注意,如果数据库未受到保护(默认值),可选择UserlD和Password关键字。如下面的代码所示:

alt

如果使用用户级安全保护Jet数据库,则必须提供工作组信息文件(mdw)的位置。工作组信息文件用于验证连接字符串中显示的凭据,如下面的代码所示:

alt

对于SQL Server6.5版或更低版本,请将sqloledb用做Provider关键字,如下面的代码所示:

alt

(3)Oracle连接字符串

相对于Sq1Client,Oracle连接字符串很简单,可以使用OracleConnection的ConnectionString属性来获取或设置数据源的连接字符串。连接字符串示例如下面的代码所示:

alt

或者

alt

2.连接字符串和配置文件

在ASP.NET中,可以使用web.config文件的<connectionString>节点来保存这些连接字符串,以便程序可以方便调用。如下面的代码示例所示:

alt

在Web.config文件里定义好连接字符串之后,就可以通过ConfigurationManager或者WebConfigurationManager读取这些连接字符串。

其中,ConfigurationManager类属于System.Configuration命名空间所有。调用方法如下:

alt

WebConfigurationManager类属于System.Web.Configuration命名空间所有。调用方法如下:

alt

3.打开与关闭连接

获取到连接字符串之后,就需要使用Connection对象来建立与特定数据源的连接,并使用Open()方法来打开这个连接。

在这里需要特别说明的是,连接是有限的服务器资源,在使用连接时要遵循“晚打开,早释放”的原则。因此,必须通过调用Close()或Dispose()方法来显示关闭该连接。Close()和Dispose()在功能上等效。

7.3.2 Command对象

Command对象主要可以来对数据库发出一些命令,比如对数据库下达查询、更新和删除数据等命令,以及调用存在于数据库中的预存的程序等。Command对象是架构于Connection对象之上的,所以Command对象是通过连接到数据源的Connection对象来下达命令的。常用的SELECT、INSERT、UPDATE、DELETE等SQL命令都可以在Command对象中创建。根据不同的数据源,Command对象可以分为4类。

● SqlCommand:用于对SQL Server数据库执行命令。

● OleDBCommand:用于对支持OleDB的数据库执行命令。

● OdbcCommand:用于支持Odbc的数据库执行命令。

● OracleComand:用于对Oracle数据库执行命令。

本节主要讲解SqlConnection对象,其他的与此类似。SqlCommand的常用属性如表7-5所示。

表7-5 SqlCommand属性表

alt

SqlCommand的常用方法如表7-6所示。

表7-6 SqlCommand方法表

alt

可以使用构造函数生成SqlCommand对象,也可以使用SqlConnection对象的CreateCommand()函数生成。

SqlCommand的构造函数如表7-7所示。

表7-7 SqlCommand构造函数表

alt

创建SqlCommand对象有两个方式:

(1)创建一个Command对象,指定SQL命令,并设置可以利用的数据库连接,示例代码如下:

alt

代码说明:第1行使用不带参数的构造函数创建SqlCommand对象myCommand。第2行使用myCommand对象的Connection属性设置可以利用的数据库连接。第3行通过myCommand对象的CommandText属性设置命令类型为Sql的查询语句。

(2)第二种方法是在创建Command对象的时候,直接指定SQL命令和数据库连接,示例代码如下:

alt

代码说明:第1行通过使用一个带两个参数SqlCommand构造函数直接创建一个SqlCommand对象myCommand。其中,第一个参数是Sql查询语句,第二个参数是数据库连接对象connection。

7.3.3 DataReader对象

DataReader对象的作用是从数据库中检索只读、只进的数据流。所谓“只读”,是指在数据阅读器DataReader上不可更新、删除、增加记录,所谓“只进”是指记录的接收是顺序进行且不可后退的,数据阅读器DataReader接收到的数据是以数据库的记录为单位的。查询结果在查询执行时返回,并存储在客户端的网络缓冲区中,直到用户使用DataReader的Read方法对它们发出请求。使用DataReader可以提高应用程序的性能,原因是它只要数据可用就立即检索数据,并且(默认情况下)一次只在内存中存储一行,减少了系统开销。根据不同的数据源,可以分为4类。

● SqlDataReader:用于对SQL Server数据库读取行的只进流的方式。

● OleDBDataReader:用于对支持OleDB的数据库读取数据行的只进流的方法。

● OdbcDataReader:用于支持Odbc的数据库读取数据行的只进流的方法。

● OracleDataReader:用于支持Oracle数据库读取数据行的只进流的方法。

本节主要讲解SqlDataReader对象,其他的与此类似。SqlDataReader的常用属性如表7-8所示。

表7-8 SqlDataReader的常用属性

alt

SqlDataReader的常用方法如表7-9所示。

表7-9 SqlDataReader常用方法

alt

在创建Command对象的一个实例之后,用户可以通过对命令调用ExecuteReader方法来创建DataReader,该方法从在Command对象中指定的数据源检索一些行,这时,DataReader就会被来自数据库的记录所填充。

以SqlDataReader对象为例,数据阅读器DataReader的定义和创建格式为:

alt

以上代码中的ExecuteReader是命令对象Command的一个方法。通过这一方法可以创建一个SqlDataReader对象的实例。

使用DataReader对象的Read方法可从查询结果中获取行。通过向DataReader传递列的名称或序号引用,可以访问返回行的每一列。不过,为了实现最佳性能,DataReader提供了一系列方法,使用户能够访问其本机数据类型(GetDateTime、GetDouble、GetGuid、GetInt32等)的列值。DataReader提供未缓冲的数据流,该数据流使过程逻辑可以有效地按顺序处理从数据源中返回的结果。由于数据不在内存中缓存,所以在检索大量数据时,DataReader是一种适合的选择。

如果返回的是多个结果集,DataReader会提供NextResult方法来按顺序循环访问这些结果集。当DataReader打开时,可以使用GetSchemaTable方法检索有关当前结果集的架构信息。架构表行的每一列都映射到在结果集中返回的列的属性,其中ColumnName是属性的名称,而列的值为属性的值。

由于DataReader允许对数据库进行直接、高性能的访问,它只提供对数据的只读和只向前的访问,它返回的结果不会驻留在内存中,并且它一次只能访问一条记录,对服务器的内存要求较小,而且,只使用DataReader就可以显示数据。所以,只需要显示数据的应用程序中,可以尽量使用DataReader,因为它将提供最佳的性能。

可以用DataReader对象的ExecuteReader()方法来进行数据的读取,并且用ExecuteReader()方法来读取数据也是最快的一种方法。因为使用ExecuteReader()方法中的DataReader对象来进行数据读取时,它只可以只读、只进的方式一条一条向前读,不能返回。

DataReader对象的取值步骤:

01 创建一个SqlDataReader对象和SqlCommand对象,并打开连接。

02 通过执行ExecuteReader方法来返回一个SqlDataReader对象。

03 使用循环的方式(如while语句),通过调用SqlDataReader对象的Read方法来遍历记录。该方法将行游标移到下一个记录,如果是第一次调用,将移动到第一条记录。每循环一次,Read方法将返回一个布尔值,当还有其他行时,Read方法返回true,如果是最后一行,则返回false,并结束循环。

04 使用SqlDataReader对象的GetString(index)方法或者[index].ToString()的方式获取SqlDataReader对象的值。也可以使用SqlDataReader对象的["字段名"].ToString()的方式获取SqlDataReader对象的值。上面的index指的是数据库表字段的索引值,从0开始计算。

05 最后,要关闭使用Close()方法关闭SqlDataReader对象。

【实例7-2】DataReader对象的使用

本实例使用DataReader对象获取db_news数据库tb_News表的内容,并把得到的结果显示在网页上。

01 启动Visual Studio 2012,创建一个ASP.NET Web空应用程序,命名为“实例7-2”。

02 在“实例7-2”中创建一个名为Default.aspx的窗体。

03 单击网站根目录下的Default.aspx.cs文件,编写代码如下:

alt

代码说明:第1行设置连接字符串,服务器为本地机器,数据库为db_news。第2行创建一个SqlConnection对象myConnection并传递参数为连接字符串。第3行通过SqlConnection对象的open方法打开数据库连接。第4行创建一个SqlCommand的实例myCommand,并在参数中指定Sql查询语句,获得db_news表的所有数据信息。

第5行声明一个SqlDataReader对象myReader。第6行通过对命令调用ExecuteReader方法来给myReader填充db_news表的内容。第10行~第12行通过for循环遍历myReader对象中所有的行,通过GetName方法获得db_news表各列的名称。第14行调用了SqlDataReader对象的Read方法,获取数据没有结束前,必须不断F调用Read方法,它负责前进到下一条记录。第16行~第18行同样通过for循环遍历myReader对象中所有的行,使用SqlDataReader对象的下标db_news表各行的数据值并显示出来。第22行关闭SqlDataReader对象,第23行关闭与数据库的连接,释放使用的资源。

第25行~第31行自定义一个截取字符串的方法StuStr,返回类型为String类型,该方法有两个参数sString和nLeng,前者表示要截取的字符串,后者表示截取的长度。

04 按快捷键Ctrl+F5运行程序,如图7-4所示。在浏览器中显示数据表db_news的数据。

alt

图7-4 运行结果

7.3.4 DataSet对象

DataSet对象是支持ADO.NET的断开式、分布式数据方案的核心对象。DataSet对象在ADO.NET实现从数据库抽取数据中起到关键作用,在从数据库完成数据抽取后,DataSet对象就是数据的存放地,它是各种数据源中的数据在计算机内存中映射成的缓存,所以有时说DataSet对象可以看成是一个数据容器。也有人把DataSet对象称为内存中的数据库,因为在DataSet对象可以包含很多数据表以及这些数据表之间的关系。此外,DataSet对象在客户端实现读取、更新数据库等过程中起到了中间部件的作用。

DataSet对象从数据源中获取数据以后就断开了与数据源之间的连接。允许在DataSet对象中定义数据约束和表关系,增加、删除和编辑记录,还可以对DataSet中的数据进行查询、统计等。当完成了各项操作以后还可以把DataSet对象中的数据送回数据源。

DataSet对象的产生满足了多层分布式程序的需要,它能够在断开数据源的情况下对存放在内存中的数据进行操作,这样可以提高系统整体性能,而且有利于扩展。

创建DataSet对象的方式有两种,第一种方式如下代码所示:

alt

以上这种方式是使用DataSet不带参的构造函数DataSet先建立一个空的数据集dataSet,然后再把建立的数据表放到该数据集里。

另外一种方式则采用以下的声明形式,如代码所示:

alt

这种方式是使用DataSet不带参数的构造函数DataSet("表名")先建立数据表,然后再建立包含数据表的数据集。

DataSet对象里包含了几种类用于数据操作,一个DataSet的对象可用如图7-5所示的模型来描述。

alt

图7-5 DataSet对象的数据模型

为了方便对DataSet对象的操作,DataSet还提供了一系列的属性和方法,表7-10列举了DataSet的常用属性。

表7-10 DataSet对象常用的属性

alt

DataSet对象的常用方法如表7-11所示。

表7-11 DataSet对象常用的方法

alt

DataSet对象中经常使用的对象包括DataTable、DataRow、DataColumn、DataRelation。下面分别进行介绍。

1.DataTable对象

DataTable对象用于表示内存中的数据库表,可以独立地创建和使用,也可以由其他对象创建和使用。通常情况下,DataTable对象都作为DataSet对象的成员存在,一个DataSet对象可以包含多个DataTable。每个DataTable包含多个行(DataRow)和列(DataColumn)。可以通过DataSet对象的Tables属性来访问DataSet对象中的DataTable对象。

DataTable对象也提供了很多属性和方法,表7-12列举了DataTable的常用属性。

表7-12 DataTable常用的属性

alt

DataTable的常用方法如表7-13所示。

表7-13 DataTable常用的方法

alt

将DataTable对象添加到DataSet中的方法如下:

(1)通过DataTable类的构造函数来创建,如以下代码:

alt

以上代码使用DataTable类带参的构造函数DataTabel(“数据表名”)来创建一个DataTable类的对象managerTable,参数就是该数据表名称News。

(2)将DataTable对象managerTable添加到DataSet对象的Tables集合中去。示例代码如下:

alt

在以上代码中,第1行使用DataSet类的构造函数声明一个DataSet对象myds。第2行将创建好的managerTable通过DataSet对象myds属性的Tables的Add方法添加到DataSet对象中。

(3)创建DataTable后,就可以从DataSet中提取DataTable了。示例代码如下:

alt

2.DataRow对象

DataRow对象表示数据表里的行,是给定DataTable中的一行数据,或者说是一条记录。DataRow对象提供了很多属性和方法,表7-14列举了DataRow的常用属性和方法。

表7-14 DataRow常用的属性和方法

alt

为表添加新行,即创建DataRow对象,可以调用DataTable对象的NewRow方法来实现。创建的DataRow对象与表具有相同的结构。之后,使用Add方法可以将新的DataRow对象添加到表的DataRow对象集合中,代码如下:

alt

以上代码:第1行通过DataTable类的构造函数实例化一个DataTable的对象。表名为News。第2行使用table对象的NewRow方法给表添加了一个新的行。第3行给列名为ID的行添加一条数据。第4行给列名为Title的行添加一条数据。第5行使用table对象行集合Rows的Add方法将数据行row对象添加的到数据表中。

3.DataColumn对象

DataColumn对象表示是数据表里的行,是给定DataTable中的一列数据,每个DataColumn对象都有一个DataType属性,定义了数据表中该行的数据类型。

DataColumn类也提供了很多属性和方法,表7-15列举了DataColumn的常用属性和方法。

表7-15 DataColumn常用的属性和方法

alt

要添加一个列,就需要创建一个DataColumn对象。可以使用DataColumn类的构造函数来创建一个DataColumn对象;也可以通过调用DataTable的Columns属性的Add方法实现在DataTable内创建DataColumn对象。通常,Add方法带有两个参数,分别是列名(ColumnName)和列的数据类型(DataType)。示例代码如下:

alt

以上代码,第1行通过DataTable类的构造函数实例化一个DataTable的对象。表名为News。第2行使用table对象数据列集合Columns的Add方法添加一个新的列,名为ID,该列的数据类型设置为字符串类型。第3行使用table对象数据列集合Columns的Add方法添加一个新的列,名为Title,该列的数据类型设置为字符串类型。

4.DataRelation对象

DataRelation对象通过DataColumn对象将两个DataTable对象相互关联,表示它们之间具有约束关系。例如在数据库中消费者和订单的约束关系是:一个订单属于一个消费者。这种约束关系是在两个表的匹配列之间创建的,前提两个列的数据类型必须相同。

DataRelation类也提供了很多属性,表7-16列举了DataRelation的常用属性。

表7-16 DataRelation常用的属性

alt

在创建DataRelation时,它首先验证是否可以建立关系。在将它添加到DataRelationCollection之后,通过禁止会使关系无效的任何更改来维持此关系。在创建DataRelation和将其添加到DataRelationCollection之间的这段时间,可以对父行或子行进行其他更改。如果这样会使关系不再有效,则会生成异常。建立表之间关系的示例代码如下:

alt

以上代码:第1行通过数据集DataSet1中的Customers客户表的列CustID(表示客户编号)定义父数据行对象parent。第2行通过数据集DataSet1中的Orders客户表的列CustID(表示客户编号)定义子数据行对象child。第3行根据DataRelation类的带参构造函数实例化一个DataRelation对象roc,其中第一个参数CustomersOrders是给这一表关系起的名称。第二个和第三个参数分别表示父数据行和子数据行。第4行将关系通过数据集DataSet1属性Relations的Add方法添加到数据集中。

【实例7-3】DataTable对象的使用

本例使用DataColumn对象和DataRow对象生成一个DataTable对象数据表News并将该表的数据内容显示在页面上。

01 启动Visual Studio 2012,创建一个ASP.NET Web空应用程序,命名为“实例7-3”。

02 在“实例7-3”中创建一个名为Default.aspx的窗体。

03 单击网站根目录下的Default.aspx.cs文件,编写代码如下:

alt

上面的代码中第1行实例化一个DataTable对象dt并给次数据表命名为“td_News”。第2行创建一个数据列DataColumn对象dc,列名为ID,列的数据类型为字符串类型。第3行创建一个数据列DataColumn对象dc1,列名为Title,列的数据类型为字符串类型。第4行创建一个数据列DataColumn对象dc2,列名为Content,列的数据类型为字符串类型。第5行创建一个数据列DataColumn对象dc3,列名为Categories,列的数据类型为字符串类型。第6行创建一个数据列DataColumn对象dc4,列名为IssueDate,列的数据类型为字符串类型。

第7行~第11行通过DataTable对象dt属性DataColumns的Add方法将上面的5个列添加到数据列集合中。第12行创一个数据行对象dr,第13行~第17行给数据行添加5条数据。第18行通过DataTable对象dt属性DataRows的Add方法将上面的数据行对象dr添加到数据行集合中。第19行~第39行重复第12行~第18行的操作,再向数据表中的数据行集合添加了三个新的数据行对象。

第40行为了向页面输出表格,添加一个table的HTML的开始标记并设置表格的边框颜色和大小。第41行使用foreach循环遍历数据表dt中数据列集合的每一个数据列。第42行使用DataColumn对象col的属性ColumnName向页面输出数据列的名称并显示在表格的单元格中。第44行~第50行使用了两个foreach循环遍历每一个行和列中的数据内容。其中,第一个foreach循环首先遍历每一行;第二个foreach循环遍历的是每一行中的每一个单元格中的数据,通过myrow[col]的方法输出。第51行添加一个表格的结束标记。

04 按快捷键Ctrl+F5运行程序,如图7-6所示。在浏览器中显示数据表“td_News”的全部内容。

alt

图7-6 运行结果

7.3.5 DataAdapter对象

DataAdapter对象充当数据库和ADO.NET对象模型中非连接对象之间的桥梁,能够用来保存和检索数据。DataAdapter对象类的Fill方法用于将查询结果引入DataSet或DataTable中,以便能够脱机处理数据。

根据不同的数据源DataAdapter对象,可以分为4类。

● SqlDataAdapter:用于对SQL Server数据库执行命令;

● OleDBDataAdapter:用于对支持OleDB的数据库执行命令;

● OdbcDataAdapter:用于支持Odbc的数据库执行命令;

● OracleDataAdapter:用于对Oracle数据库执行命令。

本节主要讲解SqlDataAdapter对象,其他的与此类似。SqlDataAdapter对象的常用属性如表7-17所示。

表7-17 SqlDataAdapter常用属性

alt

SqlDataAdapter对象的常用方法如表7-18所示。

表7-18 SqlDataAdapter常用方法

alt

可以使用构造函数生成SqlDataAdapter对象,SqlDataAdapter的构造函数如表7-19所示:

表7-19 SqlDataAdapter构造函数

alt

使用SqlDataAdapter的具体步骤如下所示:

01 创建一个SqlDataAdapter对象,示例代码如下:

alt

以上代码,使用表7-19中SqlDataAdapter类的第一种不带参数构造函数创建了一个SqlDataAdapter对象dataAdapter。

02 把Command对象定义的操作赋给以上定义的对象dataAdapter,代码如下:

alt

以上代码,通过dataAdapter对象的属性SelectCommand设置Sql查询语句“Select * from tb_News”。

03 DataAdapter对象将数据填入数据集时调用方法Fill(),代码如下:

alt

或者

alt

以上代码中,dataAdapter是SqlDataAdapter的实例,dataset是数据集DataSet的实例,tb_News则是数据库中的数据表名。当dataAdapter调用Fill()方法时将使用与之相关的命令组创建所指定的Select语句从数据源中检索数据行。然后将行中的数据添加到DataSet对象中数据表中,如果数据表不存在,则自动创建该对象。

当执行Select语句时,与数据库的连接必须有效,但连接对象没有必要是打开的,在调用Fill()方法时会自动打开关闭的数据连接,使用完毕后再自动关闭。如果调用前该连接就处在打开状态,则操作完毕后连接仍然保持原状。

一个数据集中可以放置多张数据表,但是每个DataAdapter对象只能够对应于一张数据表。

【实例7-4】DataAdapter对象的使用

本实例使用DataSet和DataAdapter对象填充数据的方法来访问db_news数据库中tb_News表的内容,并把得到的结果显示在网页上。

01 启动Visual Studio 2012,创建一个ASP.NET Web空应用程序,命名为“实例7-4”。

02 在“实例7-4”中创建一个名为Default.aspx的窗体。

03 单击网站根目录下的Default.aspx.cs文件,编写关键代码如下:

alt

上面的代码中第1行设置连接字符串str。设置连接数据库的服务器为本地机器,数据库名为db_news,使用当前的Windows账户进行身份验证。第2行创建一个SqlConnection对象myConnection并传递参数为连接字符串str。第3行通过SqlConnection对象的open方法打开数据库连接。第4行创建一个SqlCommand的实例myCommand,并在参数中指定Sql查询语句,获得tb_News表的所有数据信息。第5行实例化了一个SqlDataAdapter类型的对象Adapter。第6行调用Adapter的属性SelectCommand获取Sql命令对象myCommand。第7行实例化一个DataSet类型的对象myDs。第8行调用Adapter的填充数据集的方法Fill,将查询结果保存到数据集中。第9行通过数据集对象实例化一个DataTable对象dt来获取数据集对象Adapter表集合中第一个数据表。

第11行为了向页面输出表格,添加一个table的HTML开始标记并设置表格的边框颜色和大小。第13行使用foreach循环遍历数据表dt中数据列集合中的每一个数据列。第14行使用DataColumn对象col的属性ColumnName向页面输出数据列的名称并显示在表格的单元格中。第17行~第23行使用了两个foreach循环遍历每一个行和列中的数据内容。其中,第一个foreach循环首先遍历每一行;第二个foreach循环遍历的是每一行中的每一个单元格中的数据,通过myRow[myColumn]的方法输出。第24行添加一个表格的结束标记。第25行关闭数据库连接。

04 按快捷键Ctrl+F5运行程序,效果如图7-7所示。在浏览器中显示数据表tb_News的全部内容。

alt

图7-7 运行结果

上一篇:7.2ADO.NET概述

下一篇:7.4操作数据库

相关教程

共有条评论 网友评论

验证码: 看不清楚?