零点起飞学C#之操作数据库.pptx
第24章 操作数据库在C#程序开发中,数据库是很重要的一部分。使用数据库,可以存放大量的数据。.NET Framework提供的一个重要的功能是.NET数据访问,它由ADO.NET实现。通过ADO.NET的使用,开发人员可以轻松访问SQL Server、Oracle等数据源,并检索、操作这些数据源中的数据。本章主要给大家详细讲解.NET Framework中的.NET数据访问。24.1 什么是ADO.NETADO.NET是一组向.NET程序员公开数据访问服务的类。它提供了对关系数据、XML和应用程序数据的访问。数据客户端应用程序可以使用ADO.NET来连接到这些数据源,并查询、添加、删除和更新所包含的数据。因此,ADO.NET是.NET Framework中不可或缺的一部分。本节我们来认识ADO.NET。24.1.1 ADO.NET组成结构ADO.NET是.NET Framework的一部分,它包括两大组件:.NET Framework数据提供程序和DataSet(数据集)。对于这两大组件的详细描述如下所示。1.NET Framework数据提供程序.NET Framework数据提供程序是指处理数据的应用程序。.NET Framework中包括四个数据提供程序,具体如下所示。SQL Server.NET Framework数据提供程序,为SQL Server数据库提供服务。OLE DB.NET Framework数据提供程序,为以OLE DB方式连接的数据源提供服务。ODBC.NET Framework数据提供程序,为ODBC数据源提供服务。Oracle.NET Framework数据提供程序,为Oracle数据库提供服务。注意:本章节只介绍用于SQL Server数据库的SQL Server.NET Framework数据提供程序,其他.NET Framework数据提供程序不做详细介绍。.NET Framework数据提供程序包括Connection、Command、DataReader、DataAdapter等连接对象,即这些对象必须在保持连接数据库或数据源的状态时有效。其中,Connection对象提供与数据库或数据源的连接。Command对象执行对数据库或数据源的操作或命令,如检索、插入、更新、删除等。DataReader对象可以高性能地从数据库或数据源中在保存连接时读取数据。DataAdapter对象是一种数据适配器,它为连接DataSet对象和数据源提供了桥梁。2DataSet(数据集)DataSet是ADO.NET结构的主要组件,它是从数据源中检索到的数据在内存中的缓存。DataSet由一组DataTable对象组成。DataSet能够提供断开式的数据访问和操作,它可以被看作是数据源的数据在内存中的副本。通过DataSet对象,可以检索或更新这些数据,同时保持该副本和数据源一致。24.1.2 ADO.NET基本对象ADO.NET是一组向.NET程序员公开数据访问服务的类。该类有很多的对象,主要有Connection、Command、DataReader、DataAdapter、DataSet、DataView等。下面我们来介绍用于操作SQL Server数据库的Connection、Command、DataReader、DataAdapter、DataSet、DataView等对象。1SqlConnection对象SqlConnection对象用来连接数据库,它表示ADO.NET与SQL Server数据库的唯一的会话。使用SqlConnection对象连接SQL Server数据库的步骤如下所示。(1)创建连接字符串。连接SQL Server数据库的字符串一般由多个“名称/值”对(“名称”表示连接字符串的属性、“值”表示该属性的值)组合而成,常用属性如下表所示。属 性说 明data source数据源,可以为机器名称或IP地址user id(uid)用户名password(pwd)密码database数据库或SQL Server实例的名称server数据库所在的服务器的名称,一般为机器名称pooling表示是否启用连接池Intergrated Security表示是否使用系统集成验证connection timeout连接超时时间,即再次尝试连接数据库时所经历的时间长度,默认值为15秒【示例24-1】下面创建一个连接字符串“data source=(local);uid=sa;pwd=123456;database=Data24”,并保存为connectionString变量。string connectionString=data source=(local);user id=sa;pwd=123456;database=Data24;分析:上述连接字符串包括4个“名称/值”对,用来连接Data24数据库。其中,data source属性指定数据库所在的服务器的名称(“(local)”表示本机);uid和pwd属性分别指定用户名和密码;database属性指定被连接的数据库的名称。【示例24-2】下面创建一个连接字符串“Data Source=(local);Initial Catalog=FirstSQLServer DB;Integrated Security=True”,并保存为connectionString变量。string connectionString=Data Source=(local);Initial Catalog=Data24;Integrated Security=True;分析:上述连接字符串不包括用户名和密码,是一种信任连接的连接字符串。“Integrated Security=True”属性指定使用信任连接方式,Initial Catalog属性指定被连接的数据库的名称。(2)创建SqlConnection类的实例。【示例24-3】下面创建一个名称为con的SqlConnection类的实例,并指定该对象使用connec tionString变量的值作为的连接字符串。SqlConnection con=new SqlConnection();/创建SqlConnection类的实例/设置con实例的连接字符串为connectionStringcon.ConnectionString=connectionString;(3)打开数据库的连接,即建立ADO.NET与数据库的会话。【示例24-4】下面在try语句的try块中调用con实例的Open()方法打开数据库的连接。如果连接数据库失败,将在catch块中显示异常信息。trycon.Open();/其他操作catch(Exception ex)Console.WriteLine(ex.Message);/如果连接数据库失败,则显示错误信息(4)关闭数据库的连接。【示例24-5】下面在try语句的finally块中调用con实例的Close()方法关闭数据库的连接,并释放该连接占用的资源。finallyif(con!=null)con.Close();/关闭数据库的连接2SqlCommand对象SqlCommand对象用来执行对数据库的操作,它能够执行指定的SQL语句或存储过程。SqlCommand对象提供了用来执行SQL语句或存储过程的方法,具体如下所示。ExecuteReader()方法:读取数据,并返回SqlDataReader对象。ExecuteNonQuery()方法:执行指定的SQL语句或存储过程,并返回该操作影响的行数。ExecuteXmlReader()方法:读取数据,并返回XmlReader对象。ExecuteScalar()方法:读取数据,并返回结果集合中的第一行第一列的值。【示例24-6】下面cmd实例调用ExecuteReader()方法执行它的SQL语句或存储过程,返回结果保存为dr对象(类型为SqlDataReader)。SlqDataReader dr=cmd.ExecuteReader();/cmd为SqlCommand类的实例【示例24-7】下面cmd实例调用ExecuteNonQuery()方法执行它的SQL语句或存储过程,返回结果保存为result变量(类型为int)。int result=cmd.ExecuteNonQuery();/cmd为SqlCommand类的实例【示例24-8】下面cmd实例调用ExecuteScalar()方法执行它的SQL语句或存储过程,返回结果保存为result变量(类型为object)。object result=cmd.ExecuteScalar();/cmd为SqlCommand类的实例SqlCommand对象的CommandText属性指定其执行的SQL语句或存储过程的名称。CommandType属性指定其是执行SQL语句还是存储过程。它的值由CommandType枚举指定,包括以下3个值。Text:将CommandText属性的值解释为SQL语句,并以文本方式执行。StoredProcedure:将CommandText属性的值解释为存储过程的名称,并以存储过程方式执行。TableDirect(很少用):将CommandText属性的值解释为表的名称,即直接操作指定的表。【示例24-9】下面设置cmd实例所执行的SQL语句为“select*from Data”。cmd.CommandText=select*from Data;/cmd为SqlCommand类的实例分析:上述SQL语句查询Data表中的所有记录。【示例24-10】下面首先设置cmd实例所执行的存储过程的名称为Pr_GetDatas,然后设置CommandType属性的值为CommandType.StoredProcedure,即执行方式为存储过程。cmd.CommandText=Pr_GetDatas;/cmd为SqlCommand类的实例cmd.CommandType=CommandType.StoredProcedure;/设置执行方式为存储过程3SqlDataReader对象SqlDataReader对象用于提供从SQL Server数据库中快速读取数据的方法,且在读取数据时必须保持与数据库的连接。该对象有三个特征,具体说明如下所示。只能读取数据:不能对数据库执行任何更新、修改或插入操作。只能向前读取数据:即不能再次读取已经被访问的数据。直接把数据传递到对象,Windows Form控件或者Web窗体页。SqlDataReader类的Read()方法可以定位到下一条记录,NextResult()方法可以定位到下一个记录集。【示例24-11】下面在if语句中使用Read()方法读取dr实例的第一条记录的值。如果记录存在,则读取该记录的ID列的值,并保存为idValue变量。if(dr.Read()/dr为SqlDataReader类的实例string idValue=drID.ToString();【示例24-12】下面在while语句中使用Read()方法读取dr实例的所有记录的值,并将每一条记录的ID列的值都保存为idValue变量。while(dr.Read()/dr为SqlDataReader类的实例string idValue=drID.ToString();注意:使用SqlDataReader对象读取数据完成之后,务必要关闭(调用Close()方法)SqlDataReader对象。否则,该对象将一直处于打开状态,并一直占用系统的资源。4DataSet对象DataSet对象用于提供断开式的数据访问机制,它是数据在内存中的一种表现形式。该对象被看作是数据在内存中的副本。DataSet对象包括一个或多个表(DataTable),以及表之间的关系(DataRelation)、约束(Constraint)、外键约束(ForeignKeyConstraint)、唯一约束(UniqueKeyConstraint)等。DataSet对象共包括以下7种对象,具体说明如下所示。DataTable:表示表,由行、列组成的数据集合。DataRow:表示行,由单行数据组成的数据集合。DataColumn:表示列,约束行对象中存储的数据。DataRelation:表示关系,描述表之间的关系。Constraint:表示约束,表中数据所满足的约束条件。ForeignKeyConstraint:表示外键约束,外键关系的列所满足的约束条件。UniqueKeyConstraint:表示唯一约束,表中的数据所满足的唯一约束。5SqlDataAdapter对象SqlDataAdapter表示用于填充DataSet和更新SQL Server数据库的一组数据命令和一个数据库连接。它是DataSet和SQL Server之间的桥接器,用于检索和保存数据。它提供了四种命令,具体说明如下所示。SelectCommand:用于检索(查询)数据。InsertCommand:用于插入数据。UpdateCommand:用于修改数据。DeleteCommand:用于删除数据。SqlDataAdapter对象最常用的方法就是用于填充DataSet对象,该功能由其Fill()方法实现,一般需要以下6个步骤。(1)创建连接字符串。【示例24-13】下面创建一个连接字符串“data source=(local);uid=sa;pwd=123456;database=Data24”,并保存为connectionString变量。string connectionString=data source=(local);user id=sa;pwd=123456;data base=Data24;(2)创建SqlConnection类的实例。【示例24-14】下面创建一个名称为con的SqlConnection类的实例,并指定该实例使用connectionString变量的值作为的连接字符串。SqlConnection con=new SqlConnection();/创建SqlConnection类的实例/设置con实例的连接字符串为connectionStringcon.ConnectionString=connectionString;(3)创建查询数据的SQL语句或存储过程。【示例24-15】下面创建查询Data表的SQL语句“select*from Data”,并保存为cmdText变量。string cmdText=select*from Data;(4)创建SqlDataAdapter类的实例。【示例24-16】下面创建一个名称为cmd的SqlDataAdapter类的实例。该实例的SQL语句为cmd Text变量的值,连接对象为con实例。SqlDataAdapter da=new SqlDataAdapter(cmdText,con);/创建SqlData Adapter 类的实例cmd(5)打开数据库的连接,获取数据并填充到数据集。【示例24-17】下面调用con实例的Open()方法打开数据库的连接,并调用da实例的Fill()方法将获取的数据填充到DataSet对象ds。DataSet ds=new DataSet();/创建DataSet对象dscon.Open();/打开数据库的连接da.Fill(ds);/获取数据,并填充DataSet对象ds(6)关闭数据库的连接。【示例24-18】下面调用con实例的Close()方法关闭数据库的连接,并释放该连接占用的 资源。con.Close();/关闭数据库的连接24.2 操作SQL Server数据库使用ADO.NET可以连接数据库,并查询、添加、删除和更新该数据库所包含的数据。本节我们以SQL Server数据库为例,给大家讲解连接数据库、读取数据、插入数据、修改数据、删除数据和使用DataGirdView控件、ListView控件、TreeView控件显示数据的方法。24.2.1 创建Chapter24窗体应用程序在本例中,我们首先创建一个名为Chapter24的窗体应用程序。【实例24-1】创建了名称为“Chapter24”的Windows Form应用程序,具体步骤如下。(1)在Visual Studio 2010集成开发环境中,创建名称为Chapter24的Windows Form应用程序。(2)右击“解决资源方案管理器”面板中的Form1.cs节点,并选择“重命名”命令,将Form1.cs重命名为MainForm.cs。(3)双击MainForm.cs节点,打开MainForm窗体的编辑界面,并设计该窗体,具体细节如下所示。设置窗体的标题为“C#4.0Chapter24”。添加6个按钮(Button)控件:“连接数据库”按钮、“读取数据”按钮、“插入数据”按钮、“修改数据”按钮、“删除数据”按钮和“显示数据”按钮。添加RichTextBox控件,它的Name属性的值为rtbMessage。添加DataGridView控件,它的Name属性的值为dgvData。添加ListView控件,它的Name属性的值为lvData。添加TreeView控件,它的Name属性的值为tvData。24.2.2 创建Data24数据库Chapter24 Windows Form应用程序连接了名称为Data24的SQL Server 2012数据库,并操作了该数据库中的数据。创建Data24数据库及其表的具体步骤如下:(1)打开SQL Server 2012数据库的SQL Server Management Studio窗体。(2)在“对象资源管理器”面板中,右击“数据库”节点,并选择“新建数据库”命令。(3)单击“新建数据库”命令,打开“新建数据库”对话框,并在“数据库名称”文本框中输入Data24。单击“确定”按钮,即可创建Data24数据库。(4)创建Data24数据库之后,就可以在“对象资源管理器”面板中找到Data24节点。展开Data24,右击“表”节点,并选择“新建表”命令。(5)单击“新建表”命令,打开“表-dbo.Table1”选项卡。在该选项卡中创建名称为Data的表,该表包含4个列:ID、Name、Value和ShowOrder。24.2.3 连接数据库连接数据库是指将C#程序Chapter24与数据库Data24连接起来。在Chapter24应用程序中,单击MainForm窗体的“连接数据库”按钮,即可连接数据库Data24。该功能由“连接数据库”按钮的Click事件实现,具体步骤如下所示。(1)设置连接Data24数据库的连接字符串“data source=localhost;user id=sa;pwd=123456;database=Data24;”,并保存为connectionString变量。(2)创建SqlConnection类的实例con,它将用于连接Data24数据库。(3)设置con实例的ConnectionString属性的值为connectionString变量,即设置该连接的连接字符串。(4)在try语句中,调用con实例的Open()方法打开数据库的连接,即连接Data24数据库。如果连接成功,则在rtbMessage控件中显示连接Data24数据库成功的信息。如果连接失败,则在catch块中显示失败的信息。(5)在finally块中,调用con实例的Close()方法关闭已打开的数据库连接。运行Chapter24 Windows Form应用程序,并在“C#4.0Chapter24”窗体中单击“连接数据库”按钮。24.2.4 读取数据读取数据是指读取数据库Data24的Data表中的所有数据,并显示在rtbMessage控件中。在Chapter24应用程序中,单击MainForm窗体的“读取数据”按钮,即可读取数据库指定位置的数据。该功能由“读取数据”按钮的Click事件实现,具体步骤如下所示。(1)设置连接Data24数据库的连接字符串“data source=localhost;user id=sa;pwd=123456;database=Data24;”,并保存为connectionString变量。(2)创建SqlConnection类的实例con,它将用于连接Data24数据库。(3)设置con实例的ConnectionString属性的值为connectionString变量,即设置该连接的连接字符串。(4)设置查询Data表中的数据的SQL语句“select*from Data”,并保存为cmdText变量。(5)创建执行SQL语句的命令cmd,它使用了cmdText和con变量。(6)在try语句中,调用con实例的Open()方法打开数据库的连接(即连接Data24数据库),并执行以下操作。调用cmd实例的ExecuteReader()方法读取数据,保存为dr对象。设置rtbMessage控件的Text属性的初始值。使用while语句读取dr对象中的每一行数据,并追加到rtbMessage控件的Text属性。关闭dr对象。如果上述操作成功,则在rtbMessage控件中显示连接Data24数据库的Data表中的所有数据。如果失败,则在catch块中显示失败的信息。(7)在finally块中,调用con实例的Close()方法关闭已打开的数据库连接。运行Chapter24 Windows Form应用程序,并在“C#4.0Chapter24”窗体中单击“读取数据”按钮。24.2.5 插入数据插入数据是指向数据库Data24的Data表中插入新的数据。在Chapter24应用程序中,单击MainForm窗体的“插入数据”按钮,即可向Data24数据库的Data表中插入数据。该功能由“插入数据”按钮的Click事件实现,具体步骤如下所示。(1)设置连接Data24数据库的连接字符串“data source=localhost;user id=sa;pwd=123456;database=Data24;”,并保存为connectionString变量。(2)创建SqlConnection类的实例con,它将用于连接Data24数据库。(3)设置con实例的ConnectionString属性的值为connectionString变量,即设置该连接的连接字符串。(4)设置向Data表中插入数据的SQL语句“INSERT Data(ID,Name,Value,ShowOrder)VALUES(+count+,Name+count.ToString()+,Value+count.ToString()+,+count.ToString()+);”,并保存为cmdText变量。(5)创建执行SQL语句的命令cmd,它使用了cmdText和con变量。(6)在try语句中,调用con实例的Open()方法打开数据库的连接(即连接Data24数据库),并执行以下操作。调用cmd实例的ExecuteNonQuery()方法执行上述SQL语句,并插入新数据到Data表中。新插入的数据的Name列的值为Name字符串和count变量的值组成,Value列的值为Value字符串和count变量的值组成,ShowOrder列的值为count变量的值。注意:count变量为静态变量,它的初始值为1。每增加一个新数据之后,它的值加1。count变量的值增1。如果上述操作失败,则在catch块中显示失败的信息。(7)在finally块中,调用con实例的Close()方法关闭已打开的数据库连接。运行Chapter24 Windows Form应用程序。在“C#4.0Chapter24”窗体中,首先单击“插入数据”按钮。然后单击“读取数据”按钮显示Data表中的数据。24.2.6 修改数据修改数据是指修改数据库Data24的Data表的数据。在Chapter24应用程序中,单击MainForm窗体的“修改数据”按钮,即可修改Data24数据库的Data表中的数据。该功能由“修改数据”按钮的Click事件实现,具体步骤如下所示。(1)设置连接Data24数据库的连接字符串“data source=localhost;user id=sa;pwd=123456;database=Data24;”,并保存为connectionString变量。(2)创建SqlConnection类的实例con,它将用于连接Data24数据库。(3)设置con实例的ConnectionString属性的值为connectionString变量,即设置该连接的连接字符串。(4)设置修改Data表中数据的SQL语句“UPDATE Data SET +Name=jam,+Value=8+WHERE Name=Name3”,并保存为cmdText变量。(5)创建执行SQL语句的命令cmd,它使用了cmdText和con变量。(6)在try语句中,调用con实例的Open()方法打开数据库的连接(即连接Data24数据库),并调用cmd实例的ExecuteNonQuery()方法执行上述SQL语句,并修改Data表中的数据。上述SQL语句执行以下修改操作。找到Name列的值等于Name3字符串的记录。将上述找到的记录Name列的值修改为jam。将上述找到的记录Value列的值修改为8。将上述找到的记录ShowOrder列的值修改为空。如果上述操作失败,则在catch块中显示失败的信息。(7)在finally块中,调用con实例的Close()方法关闭已打开的数据库连接。运行Chapter24 Windows Form应用程序。在“C#4.0Chapter24”窗体中,首先单击“修改数据”按钮。然后单击“读取数据”按钮显示Data表中的数据。24.2.7 删除数据删除数据是指删除指定的数据库Data24的Data表中的数据。在Chapter24应用程序中,单击MainForm窗体的“删除数据”按钮,即可删除指定的Data24数据库的Data表中的数据。该功能由“删除数据”按钮的Click事件实现,具体步骤如下所示。(1)设置连接Data24数据库的连接字符串“data source=localhost;user id=sa;pwd=123456;database=Data24;”,并保存为connectionString变量。(2)创建SqlConnection类的实例con,它将用于连接Data24数据库。(3)设置con实例的ConnectionString属性的值为connectionString变量,即设置该连接的连接字符串。(4)设置删除Data表中的数据的SQL语句“DELETE Data+WHERE Name=mary;”,并保存为cmdText变量。(5)创建执行SQL语句的命令cmd,它使用了cmdText和con变量。(6)在try语句中,调用con实例的Open()方法打开数据库的连接(即连接Data24数据库),并调用cmd实例的ExecuteNonQuery()方法执行上述SQL语句,并删除Data表中的数据。上述SQL语句删除Data表中的Name列的值为mary的记录。如果上述操作失败,则在catch块中显示失败的信息。(7)在finally块中,调用con实例的Close()方法关闭已打开的数据库连接。运行Chapter24 Windows Form应用程序。在“C#4.0Chapter24”窗体中,首先单击“删除数据”按钮。然后单击“读取数据”按钮显示Data表中的数据。24.2.8 使用DataGridView控件显示数据DataGridView控件可用来显示数据。在Chapter24应用程序中,使用DataGridView控件显示Data24数据库的Data表中的数据。该功能由ShowDataWithDataGirdView()方法实现,具体步骤如下所示。(1)设置连接Data24数据库的连接字符串“data source=localhost;user id=sa;pwd=123456;database=Data24;”,并保存为connectionString变量。(2)创建SqlConnection类的实例con,它将用于连接Data24数据库。(3)设置con实例的ConnectionString属性的值为connectionString变量,即设置该连接的连接字符串。(4)设置查询Data表中的数据的SQL语句“select*from Data”,并保存为cmdText变量。(5)创建执行SQL语句的数据适配器da,它使用了cmdText和con变量。(6)创建DataSet对象ds。(7)在try语句中,调用con实例的Open()方法打开数据库的连接(即连接Data24数据库),并调用da实例的Fill()方法填充ds对象。如果失败,则在catch块中显示失败的信息。(8)在finally块中,调用con实例的Close()方法关闭已打开的数据库连接。(9)设置dgvData控件的DataSource属性的值为ds.Tables0.DefaultView,即使用DataGridView控件显示ds对象中的数据。24.2.9 使用ListView控件显示数据ListView控件可用来显示数据。在Chapter24应用程序中,使用ListView控件显示Data24数据库的Data表中的数据。该功能由ShowDataWithListView()方法实现,具体步骤如下所示。(1)设置连接Data24数据库的连接字符串“data source=localhost;user id=sa;pwd=123456;database=Data24;”,并保存为connectionString变量。(2)创建SqlConnection类的实例con,它将用于连接Data24数据库。(3)设置con实例的ConnectionString属性的值为connectionString变量,即设置该连接的连接字符串。(4)设置查询Data表中的数据的SQL语句“select*from Data”,并保存为cmdText 变量。(5)创建执行SQL语句的数据适配器da,它使用了cmdText和con变量。(6)创建DataSet对象ds。(7)在try语句中,调用con实例的Open()方法打开数据库的连接(即连接Data24数据库),并调用da实例的Fill()方法填充ds对象。如果失败,则在catch块中显示失败的信息。(8)在finally块中,调用con实例的Close()方法关闭已打开的数据库连接。(9)清空lvData控件的所有子项。(10)使用foreach语句为Data表中的每一个记录都创建一个ListViewItem类的实例lvi。其中,实例的Text属性的值为该记录的ID列的值,该记录的其他列(如Name、Value和ShowOrder)的值作为该实例的子项。最后,把lvi实例添加到lvData控件中。注意:lvData控件的View属性的值为View.Details,即lvData控件以Details的方式显示数据。24.2.10 使用TreeView控件显示数据TreeView控件可用来显示数据。在Chapter24应用程序中,使用TreeView控件显示Data24数据库的Data表中的数据。该功能由ShowDataWithTreeView()方法实现,具体步骤如下所示。(1)设置连接Data24数据库的连接字符串“data source=localhost;user id=sa;pwd=123456;database=Data24;”,并保存为connectionString变量。(2)创建SqlConnection类的实例con,它将用于连接Data24数据库。(3)设置con实例的ConnectionString属性的值为connectionString变量,即设置该连接的连接字符串。(4)设置查询Data表中的数据的SQL语句“select*from Data”,并保存为cmdText 变量。(5)创建执行SQL语句的数据适配器da,它使用了cmdText和con变量。(6)创建DataSet对象ds。(7)在try语句中,调用con实例的Open()方法打开数据库的连接(即连接Data24数据库),并调用da实例的Fill()方法填充ds对象。如果失败,则在catch块中显示失败的信息。(8)在finally块中,调用con实例的Close()方法关闭已打开的数据库连接。(9)清空tvData控件的所有子节点,并添加一个名称为“根”的根节点。(10)使用foreach语句将Data表中的所有记录的Name列的值作为tvData控件的根节点的子节点,即在TreeView控件中显示Data表中的数据。(11)调用tvData控件的ExpandAll()方法展开其所有节点。运行Chapter24 Windows Form应用程序,并在“C#4.0Chapter24”窗体中单击“显示数据”按钮。此时,“C#4.0-Chapter24”窗体在DataGirdView控件(右下角框)、ListView控件(右上角的左边框)和TreeView控件(右上角的右边框)中显示Data表中的数据。24.3 小 结本章主要介绍了.NET Framework中的数据访问功能,如ADO.NET组成结构、ADO.NET基本对象、使用ADO.NET操作SQL Server数据库、使用DataGridView控件显示数据、使用ListView控件显示数据、使用TreeView控件显示数据等。其中,重点是要掌握ADO.NET基本对象,以及使用ADO.NET操作SQL Server数据库的方法,为后续编写功能强大的、处理数据(特别是处理数据库中的数据)的C#程序代码奠定基础。第25章将要介绍使用C#语言开发图书管理系统的方法。