1、第六章 Visual Basic.NET数据库技术 东北大学软件学院6.1 ADO.NET概述概述 6.2 连接数据源连接数据源6.3 使用使用DataReader检索数据检索数据6.4 使用存储过程使用存储过程 6.5 使用使用DataSet和和DataAdapter检检索数据索数据 6.6 使用使用DataGrid控件控件 主要内容主要内容 数据库概念数据库概念 尽管文件系统可以解决不少问题,但是数据的冗余和尽管文件系统可以解决不少问题,但是数据的冗余和不一致、完整性、并发访问等问题文件系统是无法解不一致、完整性、并发访问等问题文件系统是无法解决的。决的。数据库定义:数据库是存储在一起的相
2、关数据的集数据库定义:数据库是存储在一起的相关数据的集合,这些数据是结构化的,无有害的或不必要的冗合,这些数据是结构化的,无有害的或不必要的冗余,并为多种应用服务;数据的存储独立于使用它余,并为多种应用服务;数据的存储独立于使用它的程序;对数据库插的程序;对数据库插 入新数据,修改和检索原有数入新数据,修改和检索原有数据均能按一种公用的和可控制的方式进行。当某个据均能按一种公用的和可控制的方式进行。当某个系统中存在结构上完全分开的若干个数据库时,则系统中存在结构上完全分开的若干个数据库时,则该系统包含一个该系统包含一个数据库集合数据库集合。6.1 ADO.NET概述概述 ADO.NET来源来源
3、 ADO.NET由由Microsoft ActiveX Data Objects(ADO)改进而来,它提供平台互用和可收缩的数据改进而来,它提供平台互用和可收缩的数据访问功能,是访问功能,是Visual Basic.NET进行数据库编程所进行数据库编程所使用的重要工具。使用的重要工具。ADO.NET 使用了某些使用了某些 ADO 的对象,如的对象,如 Connection 和和 Command 对象,并且还引入了新对象,并且还引入了新的对象。的对象。主要的新主要的新 ADO.NET 对象包括对象包括 DataSet、DataReader 和和 DataAdapter。6.1 ADO.NET概述
4、概述 ADO.NET也称做也称做.NET的的ActiveX数据对象,数据对象,负责通过负责通过ODBC或者其它专业的信道连接到或者其它专业的信道连接到外部数据源。外部数据源。访问数据库中的数据分为访问数据库中的数据分为3层处理模型:层处理模型:建立到数据源的连接。建立到数据源的连接。通过连接执行通过连接执行SQL命令命令 在数据可用的时候处理在数据可用的时候处理SQL命令返回的数据。命令返回的数据。6.1 ADO.NET概述概述 .NET数据提供者:数据提供者:.NET知道其工作方式的数据源。这知道其工作方式的数据源。这些数据通过些数据通过OLE和和.NET相互协作。相互协作。.NET数据提供
5、者的名字就是所使用数据提供者的名字就是所使用的数据库的名字:的数据库的名字:SQL Server,Oracle,Access等。等。6.1 ADO.NET概述概述 6.1 ADO.NET概述概述 ADO.NET数据提供者数据提供者提供者提供者提供者在提供者在.NET中的中的名称名称命名空间命名空间SQL ServerSQLOLEDESystem.Data.SqlClientOracleMSDAORASystem.Data.OleDbAccess2000和和Access2002Microsoft.Jet.OLEDE.4.0System.Data.OleDbAccess97Microsoft.Je
6、t.OLEDE.3.5System.Data.OleDb6.1 ADO.NET概述概述 ADO.NET数据对象数据对象类类System.Data.OleDb中的类名中的类名SytemData.SqlClient中的名称中的名称ConnectionOleDbConnectionSqlConnectionDataAdapterOleDbDataReaderSqlDataReaderCommandOleDbCommandSqlCommandDataReaderOleDbDataReaderSqlDataReaderSystemData中的中的DataSetDataSetDataSet6.1 ADO.
7、NET概述概述 连接数据源的步骤:连接数据源的步骤:通过创建一个新文本文件来创建一个空的通过创建一个新文本文件来创建一个空的Mircosoft Data Link文件,然后把这个文件的文件,然后把这个文件的扩展名改成扩展名改成udl。双击这个新文件,在弹出的对话框中可以创建双击这个新文件,在弹出的对话框中可以创建和编辑数据库的连接信息。和编辑数据库的连接信息。选取数据提供者:选取数据提供者:如果是如果是Access数据库,选择数据库,选择Microsoft Jet4.0 provider。如果是如果是SQL Sever或者或者MSDE数据库,选择数据库,选择Microsoft OLEDB Pr
8、ovider for SQL Server。6.2 连接数据源连接数据源 4.设置连接属性。设置连接属性。5.进行连接测试。进行连接测试。6.建立一个连接的时候,需要建立一个建立一个连接的时候,需要建立一个SystemData.OleDB.OLEDBConnection实例实例 或者或者System.Data.SqlClient.SQLConnection对象。对象。7.调用调用OLEDBConnection的的Open方法建立和方法建立和数据库的连接。数据库的连接。6.2 连接数据源连接数据源 使用使用SQL Server.NET Data ProviderDim sqlConnection
9、1 As SqlClient.SqlConnection Dim strConnect As String=”data source=服务器名服务器名;_ initialcatalog=数据库名数据库名;user id=sa;password=;”sqlConnection1=New System.Data._ SqlClient.SqlConnection(strConnect)sqlConnection1.open()SQL Server.NET Data Provider是利用是利用SqlConnection类来连接类来连接SQL Server7.0或更高版本的数据库,或更高版本的数据库
10、,SqlConne_ction类位于名称空间类位于名称空间System.Data.SqlClient下。下。6.2 连接数据源连接数据源 The OLE DB.NET Data Provider是通过位于名称空间是通过位于名称空间System.Data.OleDb类库下的类库下的OleDbConnection类来连接类来连接Access、Oracle和和SQL Server等种类数据库。等种类数据库。使用使用The OLE DB.NET Data ProviderDim oleDbConnection1 As OleDb.OleDbConnection Dim strConnect As St
11、ing=“Provider=Microsoft.Jet.OLEDB.4.0;_ Data Source=d:Data Example.mdb”oleDbConnection1=New System.Data.OleDb._ OleDbConnection(strConnect)6.2 连接数据源连接数据源 :假设要连接的假设要连接的Access数据库名为数据库名为“Example.mdb”,存放在,存放在d:Data目录下。目录下。连接连接SQL Server数据库数据库使使用用OLE DB.NET Data Provider6.2 连接数据源连接数据源 Dim strConnect As S
12、ting=”Provider=SQLOLEDB;_ Persist Security Info=False;Data Source=服务器名服务器名;_ Initial Catalog=数据库名数据库名;User ID=用户名用户名;Password=密码密码;”连接连接ORACLE数据库数据库Dim strConnect As Sting=”Provider=MSDAORA;_ Data Source=服务器名服务器名;User ID=用户名用户名;Password=密码密码;”DataReader是一个用来存储表的对象,它是一个用来存储表的对象,它允许使用其允许使用其Read方法来顺序读取
13、数据。方法来顺序读取数据。在该对象中,数据是只读的,并只可以向前在该对象中,数据是只读的,并只可以向前读取。读取。Read方法可以使光标视图中的指针向下一方法可以使光标视图中的指针向下一行移动,确保行中各列的数据可以被一组行移动,确保行中各列的数据可以被一组Get方法获取。方法获取。6.3 使用使用DataReader检索数据检索数据 用用DataReader对象管理对象管理Select查询查询OleDbConnection数据库数据库OleDbConnection包包含单个含单个Select语句语句Data Reader打开连接打开连接运行运行SQL Select命令命令SQL语句得结果,模
14、式和语句得结果,模式和数据被放在数据被放在DataReader中中处理处理SQL命令返回的数据命令返回的数据6.3 使用使用DataReader检索数据检索数据 Dim oleDbConnection1 As OleDb.OleDbConnection Dim strConnect As Sting=”Provider=Microsoft.Jet.OLEDB.4.0;_ Data Source=d:Data Example.mdb”oleDbConnection1=New System.Data.OleDb._ OleDbConnection(strConnect)Dim SQLstr As
15、String=“SELECT*FROM Books”Dim command As OleDbCommandDim reader As OleDbDataReadercommand=New OleDbCommand(SQLstr,oleDbConnection1)command.open()reader=command.ExecuteReader()reader.Read()TextBox1.Text=reader.GetXXX(n)reader.Close()oleDbConnection1.Close()6.3 使用使用DataReader检索数据检索数据 思考题:如何提高对数据库的访问思考
16、题:如何提高对数据库的访问效率?效率?使用存储过程使用存储过程使用使用DataAdapter机制机制6.3 使用使用DataReader检索数据检索数据 创建一个过程,把它存储在数据库中,创建一个过程,把它存储在数据库中,因为事先知道有这个过程,所以可以提因为事先知道有这个过程,所以可以提前编译它,以便在应用程序中使用。前编译它,以便在应用程序中使用。使用存储过程的原因:使用存储过程的原因:提高性能提高性能 减少网络流量减少网络流量安全性安全性6.4 使用存储过程使用存储过程 创建存储过程创建存储过程 可以使用可以使用Visual Studio.NET中的工具或中的工具或SQLSever的的E
17、nterprise Manager中的工具。中的工具。从技术上看可以使用第三方工具或编程实现。从技术上看可以使用第三方工具或编程实现。存储过程可以是一个存储过程可以是一个SQL语句,也可以是一组语句,也可以是一组复杂的语句。复杂的语句。T-SQL支持分支、循环和其它变量声明,这将支持分支、循环和其它变量声明,这将有助于编写出某些非常复杂的存储过程代码。有助于编写出某些非常复杂的存储过程代码。6.4 使用存储过程使用存储过程 调用存储过程调用存储过程创建一个创建一个SqlCommand对象。对象。设置设置CommandType属性。属性。添加与存储过程本身匹配的参数。添加与存储过程本身匹配的参数
18、。创建一个创建一个SqlDataAdapter,填充某种结,填充某种结果对象。果对象。6.4 使用存储过程使用存储过程建立脱机的数据库访问模式建立脱机的数据库访问模式 用用SqlConnection对象建立连接,并打开数据库。对象建立连接,并打开数据库。向数据库索取所要的数据,并放到向数据库索取所要的数据,并放到SqlDataAdapter对对象中。象中。把把SqlDataAdapter对象中的数据填入对象中的数据填入DataSet对象。对象。关闭关闭SqlConnection对象。对象。在在DataSet对象中操作数据。对象中操作数据。操作结束,再次打开操作结束,再次打开SqlConnect
19、ion对象和数据库的对象和数据库的连接。连接。利用利用SqlDataAdapter对象对数据库进行更新。对象对数据库进行更新。关闭关闭SqlConnection对象。对象。6.5 使用使用DataSet和和DataAdapter检索数据检索数据 DataSet类的层次结构类的层次结构6.5 使用使用DataSet和和DataAdapter检索数据检索数据System.ObjectSystem.Data.DataSetSytem.ComponentModel.MarshalValueComponent DataSet对象重要的公有属性对象重要的公有属性属性属性说明说明DataSetName获取或
20、设置数据集的名称获取或设置数据集的名称EnforceConstraints获取或设置是否遵循约束规则获取或设置是否遵循约束规则HasErrors指出在所有表的所有行内是否有错误指出在所有表的所有行内是否有错误Relations获取链接表的关系对象获取链接表的关系对象Tables获取数据集中的表获取数据集中的表6.5 使用使用DataSet和和DataAdapter检索数据检索数据方法方法说明说明AcceptChanges接受(提交)对数据集所做的修改接受(提交)对数据集所做的修改Clear通过删除所有表内的所有行来清空数据集通过删除所有表内的所有行来清空数据集Copy复制数据集复制数据集Get
21、Changes返回保护对象当前数据集所做所有修改的数据集返回保护对象当前数据集所做所有修改的数据集GetXml获取用获取用XML表示的数据集中的数据表示的数据集中的数据GetXmlSchema获取数据集的获取数据集的XSD架构架构HasChanges指出数据集是否据偶仍然未被提交的修改指出数据集是否据偶仍然未被提交的修改Merge把该数据集与另一个数据集合并把该数据集与另一个数据集合并ReadXml把数据从把数据从XML读入数据集读入数据集ReadXmlScema把把XML架构读入数据集架构读入数据集RejectChanges回滚自数据集创建以来或自最后一次调用回滚自数据集创建以来或自最后一次
22、调用AcceptChanges以来对数据集所做的修改以来对数据集所做的修改Reset把数据集重新设置到其原来状态把数据集重新设置到其原来状态WriteXml把数据集架构和数据写入把数据集架构和数据写入XMLWriteXmlShcema把数据架构写入把数据架构写入XMLDataAdapter对象重要的公有方法对象重要的公有方法 每个每个DataSet对象都由对象都由DataTable对象对象集合组成集合组成 DataSet对象可以访问多个数据表,隐对象可以访问多个数据表,隐藏、显示表藏、显示表 可以用可以用DataRelation对象把他们相互连对象把他们相互连接起来。接起来。6.5 使用使用D
23、ataSet和和DataAdapter检索数据检索数据 DataAdapter类是数据适配器的基础类,类是数据适配器的基础类,在数据提供程序中它是数据集和数据库在数据提供程序中它是数据集和数据库之间的桥梁。之间的桥梁。DataAdapter类的层次结构是:类的层次结构是:6.5 使用使用DataSet和和DataAdapter检索数据检索数据System.Data.Common.DataAdapterSystem.ObjectSytem.ComponentModel.Component System.MarshalByRefObject DataAdapter对象重要的公有属性对象重要的公有属
24、性属性属性说明说明AcceptChangesDuringFill获取或设置数据行添加到获取或设置数据行添加到表之后是否调用其表之后是否调用其AccepChanges方法方法TableMappings获取源表和数据表之间的获取源表和数据表之间的映射映射6.5 使用使用DataSet和和DataAdapter检索数据检索数据Dim SQLstr As String=_ “SELECT ISBN,Name FROM Books”Dim adapter As SqlDataAdapter=New _ SqlDataAdapter(SQLstr,sqlConnection1)Dim books As D
25、ataSet=New DataSetDataSetAdapter.Fill(books,”Books”)Dim row As DataRow=books.Tables(“Books”).Rows(n)Dim sqlConnection1 As SqlClient.SqlConnectionDim strConnect As String=”data source=服务器名服务器名;_ initial catalog=数据库名数据库名;user id=sa;password=;”sqlConnection1=New _ System.Data.SqlClient.SqlConnection(strConnect)sqlConnection1.open()DataGrid空间的目的是显示在可滚动网格中空间的目的是显示在可滚动网格中通过通过ADO.NET获得的数据。获得的数据。DataGrid空间直接从空间直接从Control类继承。类继承。例如:例如:DataGrid1.DataSource=books.Tables(“Books”)6.6 使用使用DataGrid控件控件 6.6 使用使用DataGrid控件控件 End of Chapter