第13章ADO.NET数据库访问技术13.1数据库概述13.2ADO.NET模型13.3ADO.NET的数据访问对象13.4DataSet对象13.5数据绑定13.6DataView对象13.7DataGridView控件13.1数据库概述13.1.1关系数据库的基本结构1.表2.记录3.字段4.关系5.索引6.视图7.存储过程学号姓名性别民族班号1王华女汉族070013李兵男汉族070018马棋男回族070022孙丽女满族070026张军男汉族07001样本数据库:School.mdbstudent表score表学号课程名分数1C语言803C语言768C语言882C语言706C语言901数据结构833数据结构708数据结构792数据结构526数据结构9213.1.2结构化查询语言(SQL)数据定义语句:CREATE数据操纵语句:INSERT、UPDATE、DELETE数据查询语句:SELECT13.2ADO.NET模型13.2.1ADO.NET简介ADO.NET是在.NETFramework上访问数据库的一组类库,它利用.NETDataProvider(数据提供程序)以进行数据库的连接与访问。通过ADO.NET,数据库程序设计人员能够很轻易地使用各种对象来访问符合自己需求的数据库内容。13.2.2ADO.NET体系结构1..NETDataProvider.NETDataProvider是指访问数据源的一组类库,主要是为了统一对于各类型数据源的访问方式而设计的一套高效能的类数据库。下表给出了.NETDataProvider中包含的4个对象。对象名称功能说明Connection提供和数据源的连接功能。Command提供运行访问数据库命令,传送数据或修改数据的功能,例如运行SQL命令和存储过程等。DataAdapter是DataSet对象和数据源间的桥梁。DataAdapter使用4个Command对象来运行查询、新建、修改、删除的SQL命令,把数据加载到DataSet,或者把DataSet内的数据送回数据源。DataReader通过Command对象运行SQL查询命令取得数据流,以便进行高速、只读的数据浏览。在.NETFramework中常用的有如下4组数据提供程序:(1)SQL.NETDataProvider(2)OLEDB.NETDataProvider(3)ODBC.NETDataProvider(4)ORACLE.NETDataProvider2.DataSetDataSet(数据集)是ADO.NET离线数据访问模型中的核心对象,主要使用时机是在内存中暂存并处理各种从数据源中所取回的数据。DataSet其实就是一个存放在内存中的数据暂存区,这些数据必须通过DataAdapter对象与数据库进行数据交换。在DataSet内部允许同时存放一个或多个不同的数据表(DataTable)对象。这些数据表是由数据列和数据域所组成的,并包含有主索引键、外部索引键、数据表间的关系(Relation)信息以及数据格式的条件限制(Constraint)。13.2.3ADO.NET数据库的访问流程ADO.NET数据库访问的一般流程如下:(1)建立Connection对象,创建一个数据库连接。(2)在建立连接的基础上可以使用Command对象对数据库发送查询、新增、修改和删除等命令。(3)创建DataAdapter对象,从数据库中取得数据。(4)创建DataSet对象,将DataAdapter对象填充到DataSet对象(数据集)中。(5)如果需要,可以重复操作,一个DataSet对象可以容纳多个数据集合。(6)关闭数据库。(7)在DataSet上进行所需要的操作。数据集的数据要输出到窗体中或者网页上面,需要设定数据显示控件的数据源为数据集。13.3ADO.NET的数据访问对象13.3.1OleDbConnection对象在数据访问中首先必须是建立数据库的物理连接。.NETDataProvider使用OleDbConnection类的对象标识与一个数据库的物理连接。1.OleDbConnection类OleDbConnection类的属性说明ConnectionString获取或设置用于打开数据库的字符串。ConnectionTimeout获取在尝试建立连接时终止尝试并生成错误之前所等待的时间。Database获取当前数据库或连接打开后要使用的数据库的名称。DataSource获取数据源的服务器名或文件名。Provider获取在连接字符串的“Provider=”子句中指定的OLEDB提供程序的名称。State获取连接的当前状态。其取值及其说明如表13.7所示。OleDbConnection类的方法说明Open使用ConnectionString所指定的属性设置打开数据库连接。Close关闭与数据库的连接。这是关闭任何打开连接的首选方法。CreateCommand创建并返回一个与OleDbConnection关联的OleDbCommand对象。ChangeDatabase为打开的OleDbConnection更改当前数据库。2.建立连接字符串ConnectionString建立连接的核心是建立连接字符串ConnectionString。建立连接主要有两种方法。(1)直接建立连接字符串直接建立连接字符串的方式是:先创建一个OleDbConnection对象,将其ConnectionString属性设置为如下值:Provider=Microsoft.Jet.OLEDB.4.0;DataSource=Access数据库;UserId=用户名;Password=密码;其中Provider和DataSource是必选项,如果Access数据库没有密码,后两者都可以省略。由Access数据库是基于文件的数据库,因此在实际项目中应该将DataSource属性值转化为服务器的绝对路径。最后用Open方法打开连接。【例13.10】设计一个窗体,说明直接建立连接字符串的连接过程。Form1,事件过程:privatevoidbutton1_Click(objectsender,EventArgse){stringmystr;OleDbConnectionmyconn=newOleDbConnection();mystr=Provider=Microsoft.Jet.OLEDB.4.0;+DataSource=H:\\C#2005\\school.mdb;myconn.ConnectionString=mystr;myconn.Open();if(myconn.State==ConnectionState.Open)label1.Text=成功连接到Access数据库;elselabel1.Text=不能连接到Access数据库;myconn.Close();}(2)通过属性窗口建立连接字符串1)先要在窗体上放置一个OleDbConnection控件。注意:若在工具箱中找不到OleDbConnection控件,将鼠标指针移到“数据”选项卡,单击鼠标右键,在弹出的快捷菜单中选择“选择项”命令,打开如图13.10所示的“选择工具箱项”对话框,在其中勾选以OleDb开头的各项,单击“确定”按钮,此时“数据”选项卡中包含所有新选项,再将OleDbConnection控件拖放到窗体上。2)在“属性”窗口中单击OleDbConnection控件的ConnectionString属性右侧的按钮,从弹出的下拉列表中选择“新建连接”选项,打开“添加连接”对话框。3)单击“更改”按钮,打开“更改数据源”对话框,选中“MicrosoftAccess数据库文件”选项,单击“确定”按钮。4)打开“添加连接”对话框,通过“浏览”按钮选择Access数据库文件为H:\C#2005\school.mdb。5)单击“测试连接”按钮确定连接是否成功。在测试成功后单击“确定”按钮返回。此时,ConnectionString属性值改为:Provider=Microsoft.Jet.OLEDB.4.0;DataSource=H:\C#2005\school.mdb两种方法建立的连接字符串是相同的。【例13.11】设计一个窗体,说明通过属性窗口建立连接字符串的连接过程。Form2:有一个命令按钮button1、一个标签label1和一个OleDbConnection控件oleDbConnection1(已建连接)。事件过程:privatevoidbutton1_Click(objectsender,EventArgse){oleDbConnection1.Open();if(oleDbConnection1.State==ConnectionState.Open)label1.Text=成功连接到Access数据库;elselabel1.Text=不能连接到Access数据库;oleDbConnection1.Close();}13.3.2OleDbCommand对象建立数据连接之后,就可以执行数据访问操作和数据操纵操作了。一般对数据库的操作被概括为CRUD—Create、Read、Update和Delete。在ADO.NET中定义OleDbCommand类去执行这些操作。OleDbCommand类的属性说明CommandText获取或设置要对数据源执行的T-SQL语句或存储过程。CommandTimeout获取或设置在终止执行命令的尝试并生成错误之前的等待时间。CommandType获取或设置一个值,该值指示如何解释CommandText属性。其取值如表13.10所示。Connection数据命令对象所使用的连接对象Parameters参数集合(OleDbParameterCollection)1.OleDbCommand类的属性和方法OleDbCommand类的方法说明CreateParameter创建OleDbParameter对象的新实例。ExecuteNonQuery针对Connection执行SQL语句并返回受影响的行数。ExecuteReader将CommandText发送到Connection并生成一个OleDbDataReader。ExecuteScalar执行查询,并返回查询所返回的结果集中第一行的第一列。忽略其他列或行。2.创建OleDbCommand对象OleDbCommand类的主要构造函数如下:OleDbCommand();OleDbCommand(cmdText);OleDbCommand(cmdText,connection);其中,cmdText参数指定查询的文本。connection参数是一个OleDbConnection,它表示到Access数据库的连接。例如,以下语句创建一个OleDbCommand对象mycmd:OleDbConnectionmyconn=newOleDbConnection();stringmystr=Provider=Microsoft.Jet.OLEDB.4.0;+DataSource=H:\\C#2005\\school.mdb;myconn.ConnectionString=mystr;myconn.Open();OleDbCommandmycmd=newOleDbCommand(SELECT*FROMstudent,myconn);3.通过OleDbCommand对象返回单个值在OleDbCommand的方法中,ExecuteScalar方法执行返回单个值的SQL命令。例如,如果想获取Student数据库中学生的总人数,则可以使用这个方法执行SQL查询SELECTCount(*)FROMstudent。示例:stringmystr,mysql;OleDbConnectionmyconn=newOleDbConnection();OleDbCommandmycmd=newOleDbCommand();mystr=Provider