首页 理论教育 SQLServer数据库基础教程-VB.NET实现

SQLServer数据库基础教程-VB.NET实现

时间:2023-10-21 理论教育 版权反馈
【摘要】:VB.NET是基于“.NET”框架的完全对向对象的编程语言,使用VB.NET可以编制出功能非常强大的Windows程序。其中,ADO.NET又是.NET Framework SDK中重要的组成部分。连接并使用ADO.NET对象的一般步骤1)创建Connection对象,连接数据库。ADO.NET对象定义了连接ODBC、OLE DB、SQLServer和Oracle的各种对象。连接SQLServer数据库的连接字符串如下面的代码段所示。其中,Data Source参数指定运行SQLServer的计算机的服务器名。如果SQL Server安装为已命名的实例,就指定服务器名后跟一个短横线-加该实例名。

SQLServer数据库基础教程-VB.NET实现

Visual Basic是Windows环境下的一种简单、易学的编程语言,由于其开发程序的快速、高效,深受程序员的喜爱。严格地说,VisualBasic只是半面向对象的语言,其面向对象的能力及程序的执行效率往往不能满足一些程序员的需要,因此,大型项目很少使用Visual Basic来开发。现在Visual Basic的最新版本是VisualStudio2008,对应的VB.NET的最新版本是VB.NET 2008。VB.NET是基于“.NET”框架的完全对向对象的编程语言,使用VB.NET可以编制出功能非常强大的Windows程序。

虽然VB.NET具有强大的系统开发能力,但其自身并不具备对数据库进行操作的功能,它对数据库的处理是通过.NET Framework SDK中面向数据库编程的类库和微软公司的MDAC来实现的。其中,ADO.NET又是.NET Framework SDK中重要的组成部分。要了解VB.NET的数据库编程,首先要明白ADO.NET的工作原理以及相关的对象、方法、属性。

1.ADO.NET简介

ADO.NET是由微软公司Microsoft ActiveX Data Object(ADO)升级发展而来的。是在“.NET”中创建分布式数据共享程序的开发接口。前面已经介绍其框架结构及功能,其实质是通过两个类库来访问数据库:System.Data.sqlclient类库可以直接连接到SQL Server的数据,System.Data.Oledb类库可以用于其他通过OLEDB进行访问的数据源,如Oracle、Access数据。因此要连接数据库首先要导入命名空间,连接SQL Server数据库要导入System.Data.sqlclient命名空间或System.Data.Oledb,其导入语句如下。

978-7-111-33494-1-Chapter10-4.jpg

若连接其他如Access等数据库,则必须导入:

978-7-111-33494-1-Chapter10-5.jpg

2.ADO.NET的对象模型

ADO.NET包含的对象较少,主要有以下几个。

●用于连接和管理数据库事务的Connection对象。

●用于向数据库发送命令的Command对象。

●用于对驻留内存中的数据进行存储和操作的DataSet对象。

●提供内存中数据集与数据库交换数据通道的DataAdapter对象(也称为“数据适配器”)。

●用于直接读取流数据的DataReader对象。

需要说明的是,Connection对象、Command对象和DataAdapter对象在实际使用中,每个对象都有两种类型,即Sqlxxxx对象和OleDbxxxx对象。其中以Sql开头的对象用来连接SQL Server数据库,它们存在于System.Data.SqlClient命名空间中;以OleDb开头的对象用来连接其他OLEDB数据库,如Access数据库、Oracle数据库等,它们存在于System.Data.Oledb命名空间中。对象间的关系如图10-4所示。

978-7-111-33494-1-Chapter10-6.jpg

图10-4 ADO.NET对象间的关系

3.使用ADO.NET访问数据库

使用ADO.NET开发数据库访问应用程序非常便利,而且由于ADO.NET具有语言无关的特性,可以在不同的环境中运行,无论是VB、VC++还是Java都可以选择ADO.NET对象来进行数据库应用程序设计,如果使用ADO.NET访问不同的数据库系统,只需更改少量的参数即可,其他代码可以不经任何修改直接移植。

(1)连接并使用ADO.NET对象的一般步骤

1)创建Connection对象,连接数据库。

2)创建Command对象,设置SQL命令或存储过程。

3)创建装载数据的容器。可以使用DataReader对象,也可以使用DataSet对象。

使用DataReader对象,可直接读取数据流;使用DataSet对象,必须先创建DataAdapter对象,因为它提供数据源与记录集之间的数据变换,数据库与内存中的数据交换。然后创建DataSet对象,将从数据源中得到的数据保存在内存中,并对数据进行各种SQL操作等过程。

4)执行相应的SQL命令或执行存储过程。

5)创建Windows窗口,并向其中添加必要的控件。

6)设置各控件的属性,编写主要控件的事件代码。

ADO.NET对象定义了连接ODBC、OLE DB、SQLServer和Oracle的各种对象。以Con⁃nection对象为例,分别命名了OdbcConnection、OleDbConnection、SqlConnection和Ora⁃cleConnection。这些前缀不同的对象实现了相同的属性和方法。

(2)ADO.NET数据库访问对象详解

1)创建Connection对象,连接数据库。

这里详细介绍OleDbConnection对象,论述的属性和方法也适用于上文提及的其他Con⁃nection对象。

①定义连接字符串并创建连接。

连接SQLServer数据库的连接字符串如下面的代码段所示。

978-7-111-33494-1-Chapter10-7.jpg

其中,Data Source参数指定运行SQLServer的计算机的服务器名。如果SQL Server安装为已命名的实例,就指定服务器名后跟一个短横线-加该实例名。SQL Server允许在同一台计算机上安装多个实例,除默认实例(第一个安装的实例)外的其他所有实例都必须用实例名唯一地标识。

Database参数指定要在SQL Server中连接的数据库,User ID和Password参数指定数据库登录凭证。

②打开数据库。

用上面的方法初始化一个连接对象,就可以调用OleDbConnection类的任何方法来操作数据。其中打开数据库的方法是任何操作的基本环节。

打开数据库的方法是:objConnection.Open()。

2)创建Command对象,设置SQL命令或存储过程。

Command对象提供了在数据库上执行SQL语句和存储过程的方式。SQL语句和存储过程可以选择、插入、更新和删除数据库中的数据。还可以使用Command类中的Parameters集合把参数传送到SQL语句和存储过程。

OleDbCommand对象有几个重载的构造函数,在开始编写数据库代码时,最常用的一个是下面例子中的构造函数。

978-7-111-33494-1-Chapter10-8.jpg(www.xing528.com)

这个构造函数带一个String参数值和一个OleDbConnection对象,String参数包含要执行的SQL语句,OleDbConnection对象表示数据库连接。数据库连接不一定在此时打开,所以只需一个已通过构造函数初始化的Connection对象。

另一个可能使用的构造函数是执行存储过程的构造函数,它带若干参数。在执行存储过程时,不能使用前面代码中的构造函数,而应使用带参数的构造函数,如下面的代码所示。

978-7-111-33494-1-Chapter10-9.jpg

以上代码设置了Command对象的属性,指定Connection对象、存储过程名、命令类型和存储过程需要的参数。CommandType属性指定CommandText属性的解释方式。在默认情况下,CommandType属性设置为Text,即把CommandText属性解释为要执行的SQL语句。使用CommandType枚举设置为StoredProcedure,表示要执行存储过程。

最后,对于存储过程需要的每个参数,把一个Parameter对象添加到Command对象的Parameters集合中。在上面的例子中,存储过程只需要一个参数,它指定了雇员的ID。

Parameters集合的Add方法是一个重载方法,也就是说,有多个Add方法可供选择。最常用的一个如上面的代码所示。它指定了参数名、参数的数据类型和参数的大小。除了把Parameter对象添加到Parameters集合中之外,还要使用Value属性设置它的值。

设置好Command对象的所有属性,并给Parameters集合添加了合适的参数后,Command对象就可以供DataReader或DataAdapter对象使用了。

3)DataAdapter对象。

DataAdapter对象是数据库和程序之间的桥梁,它可以执行Command对象,从数据库中检索数据,再填充到DataSet对象中,或使用DataSet对象插入、更新和删除数据库中的数据。

978-7-111-33494-1-Chapter10-10.jpg

第一行代码创建一个DataAdapter对象,第二行声明一个表示DataSet类的新对象,注意DataSet是独立于提供程序的,因为它无ODBC、OLE DB、SQL或Oracle前缀。DataSet的构造函数提供了一个重载列表,在一般初始化时不带参数。

初始化DataAdapter和DataSet对象后,就要从数据库中检索数据,并填充DataSet对象。使用DataAdapter的Fill方法来完成填充工作。

Fill方法也提供了一个重载列表,但最常用的是上面代码中的Fill方法。该方法指定了表示DataSet的对象和一个表名,当要把多个表添加到DataSet对象中时,要使用该表名进行表映射。这个表名还可以用于引用DataSet对象中的表。注意不必在SQL语句的FROM子句中使用指定的这个表名,SQL语句使用的表名还是在数据库中的表名。

给DataSet对象填充数据后,DataAdapter的工作就完成了,应调用Dispose方法释放DataAdapter占用的资源,并把它设置为Nothing。Command的工作也完成了,最后也删除它,并把它设置为Nothing,以释放资源。另外,如果不进行更多的数据库操作,应关闭数据库连接,对该连接调用Dispose方法。

DataAdapter另一个常用的构造函数把SQL语句直接传送给DataAdapter,而不使用Com⁃mand对象,代码如下所示。

978-7-111-33494-1-Chapter10-11.jpg

978-7-111-33494-1-Chapter10-12.jpg

在这个构造函数中,传送了字符串变量和表示数据库连接的对象。在前面的例子中,是把Command对象传送给DataAdapter,使DataAdapter能提取其中的连接信息。而在这个构造函数中,为SQL语句使用了一个字符串,所以DataAdapter需要通过Connection对象了解如何与数据库通信,以执行SQL字符串。

给DataSet对象填充数据后,就可以处理这些数据。DataSet对象包含一系列表,每个表都包含一系列行,每一行都包含一系列项,这些项表示行中的列。代码如下所示。

978-7-111-33494-1-Chapter10-13.jpg

代码为DataRow声明一个对象,它用于访问Rows集合中的每一行,Rows集合放在Ta⁃bles集合的表中。接着使用ForEach循环迭代表中的行。

使用DataRow对象的Item属性,可以访问行中的每一列,这行代码把DataSet对象中每个雇员的姓名都输出到IDE的输出窗口中。

最后,使用完DataSet对象后,调用Dispose方法释放DataSet对象占用的资源,并把它设置为Nothing。这非常重要,因为DataSet对象表示一个内存数据高速缓存,即DataSet对象包含的所有数据都加载到内存中,因此应尽快释放该内存。

在修改完DataSet对象中的数据后,可以使用DataAdapter的Update方法,把DataSet对象中的数据更新到数据库中。

在关系数据库中更新或插入数据时,通常使用存储过程执行插入或更新操作,再使用Command对象执行这些存储过程。

4)DataReader对象。

DataReader对象为数据库提供了只向前的数据流,而不是像前面的DataSet对象那样,把数据高速缓存在内存中。顾名思义,DataReader对象只能从数据库中读取数据。应注意由于该对象是从数据库中读取数据,所以数据库连接要保持打开状态。因此,DataReader对象使用的Connection对象将一直忙于把数据传送给DataReader对象,不能用于其他数据库操作。

这个对象提供了读取数据库中数据的最高效方式。当从头至尾只需要从数据库中读取数据,填充到窗体上的一个列表中,或填充数组或集合时,就应使用DataReader对象。

DataReader类不使用构造函数进行初始化,而使用Command对象的ExecuteReader方法来设置。下面的代码段假定已经用SQL语句初始化了一个Command对象,而且数据库连接已打开。

978-7-111-33494-1-Chapter10-14.jpg

第一行代码为DataReader声明了一个对象,并使用Command对象的ExecuteReader方法设置它。在设置好DataReader对象后,就可以开始使用Read方法读取数据了。

第二行代码建立了一个While循环,从数据库中读取记录。每次执行DataReader的Read方法时,都从数据库中检索另一个数据行。使用DataReader对象的Item属性,可以访问在SQL SELECT语句中指定的列值。

下面的代码把从Employees表中选择出来的每个雇员的姓名写入IDE的输出窗口。

读取完所有的记录后,就应使用Close方法关闭DataReader,这会释放DataReader占用的资源,允许打开的数据库连接用于另一个操作或关闭。应把DataReader设置为Nothing,以释放被这个对象占用的内存。

4.VB.NET访问SQLServer数据库完整实例

学会使用ADO.NET对象,就可以使用各种T⁃SQL语言访问数据库,完成指定的任务。

【例10-1】 用VB.NET访问pubs数据库。本例采用VB.NET 2005为开发工具,连接SQL Server 2005中的样例pubs数据库,SQL Server 2005采用Windows登录,显示控件为DataGridView,任务是显示pubs数据库下employee表中的fname及lname,显示结果如图10-5所示。

978-7-111-33494-1-Chapter10-15.jpg

图10-5 使用ADO.NET对象连接数据库结果

在窗口中创建DataGridView对象,用于显示数据库的查询结果,其代码如下。

978-7-111-33494-1-Chapter10-16.jpg

978-7-111-33494-1-Chapter10-17.jpg

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈