版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C#C#教程教程8.1 8.1 数据库基础数据库基础8.2 ADO.NET8.2 ADO.NET概述概述8.3 8.3 创建连接创建连接8.4 Command8.4 Command对象与对象与DataReaderDataReader对象对象8.5 DataSet8.5 DataSet对象与对象与DataAdapterDataAdapter对象对象8.6 8.6 综合应用综合应用C#C#教程教程8.1.1 8.1.1 数据库和数据库管理系统数据库和数据库管理系统1 1数据库基本概念数据库基本概念数据库(Database,简称DB),顾名思义,就是存放数据的仓库,其特点是数据按照数据模型组织,是高
2、度结构化的,可供多个用户共享并且具有一定的安全性。2 2数据库管理系统数据库管理系统数据库管理系统即DBMS(DataBase Management System),它是位于用户应用程序和操作系统之间的数据库管理系统软件,其主要功能是组织、存储和管理数据,高效地访问和维护数据,即提供数据定义、数据操纵、数据控制和数据维护等功能。C#C#教程教程本教材主要使用的是SQL Server 2005数据库。打开数据库管理器(SQL Server Management Studio),如图8.1所示(图中的数据库是后来添加的)。图8.1 数据库管理器部分截图C#C#教程教程1 1表(表(TableTab
3、le)表是在日常工作和生活中经常使用的一种表示数据及其关系的形式,例如表8.1就是一个学生情况表。学 号姓 名专 业 名性 别出 生 时 间081101王 林计算机男1990/10/01081102王 巍计算机女1991/02/08081103林 滔通信工程男1990/04/06081104江为中通信工程男1990/12/08表8.1 学生情况表C#C#教程教程下面是表的定义。(1)表结构每个数据库包含了若干个表。每个表具有一定的结构,称为表“型”,所谓表型是指组成表的各列的名称及数据类型,也就是日常表格的“栏目信息”。(2)记录每个表包含了若干行数据,它们是表的“值”。(3)字段每个记录由若
4、干个数据项构成,将构成记录的每个数据项称为字段(Field)。字段包含的属性有字段名、字段数据类型、字段长度及是否为关键字等,其中字段名是字段的标识,字段的数据类型可以是多样的,如整型、实型、字符型、日期型或二进制类型,等等。(4)关键字在学生情况表中,若不加以限制,每个记录的姓名、专业、性别和出生时间这4个字段的值都有可能相同,但是学号字段的值对表中所有记录来说一定不同,即通过“学号”字段可以将表中的不同记录区分开。C#C#教程教程2 2视图(视图(ViewView)视图是从一个或多个表(或视图)导出的表。视图与表不同,它是一个虚表,即视图所对应的数据不进行实际存储。数据库中只存储视图的定义
5、,对视图的数据进行操作时,系统根据视图的定义去操作与视图相关联的基本表。视图一经定义以后,就可以像表一样被查询、修改、删除和更新。使用视图具有便于数据共享、简化用户权限管理和屏蔽数据库的复杂性等优点。C#C#教程教程1 1创建数据库创建数据库用VS2008创建数据库的步骤如下所示:(1)打开VS2008“服务器资源管理器”窗口,右击“数据连接”,选择“创建新SQL Server数据库”选项,如图8.2所示。(2)在“创建新的SQL Server数据库”对话框中选择要连接的服务器名,输入新的数据库名,单击“确定”按钮,如图8.3所示,系统便添加了一个数据库。 图8.2 创建数据库步骤1 图8.3
6、 创建数据库步骤2C#C#教程教程2 2创建表创建表用VS2008创建表的步骤如下所示:(1)打开“服务器资源管理器”窗口,展开刚添加的数据库“XSCJ”,右击“表”,选择“添加新表”选项,如图8.4所示。(2)给新表设计字段和字段类型,设计后右击“XH”,选择“设置主键”选项,XH被设置为新表的主键,如图8.5所示。其中“XH”、“XM”、“XB”、“ZY”、“ZXF”、“CSSJ”、“BZ”、“ZP”分别表示 “学号”、“姓名”、“性别”、“专业”、“总学分”、“出生时间”、“备注”和“照片”。 图8.4 添加新表 图8.5 设计表的字段和类型C#C#教程教程(3)关闭窗口,保存对表格的修
7、改,在弹出的选择名称对话框中输入“XS”,单击“确定”按钮,XS表就新建成功了。以同样的方法创建KC(课程)表,表的结构如图8.6所示。“KCH”、“KCM”、“XQ”、“XS”、“XF”分别表示“课程号”、“课程名”、“学期”、“学时”和“学分”。图8.6 KC表的结构C#C#教程教程表8.2列出了常用的SQL命令及其相应的功能。表8.3列出了常用的一些SQL子句,这些命令和子句经过一定的组合,可以创建一个SQL语句,用于完成数据库操作功能。命 令分 类功 能SELECTDML根据查询条件查询数据表INSERTDML向数据表中插入记录UPDATEDML更改数据表的记录DELETEDML删除数
8、据表的记录CREATEDDL创建一个表、字段或索引ALTERDDL添加一个字段或改变一个字段的定义DROPDDL删除一个表或索引子 句功 能FROM指定要操作的数据表WHERE指定查询条件GROUP BY指定分组条件HAVING 指定在一个查询中每一个组的条件ORDER BY指定查询的排序表8.2 SQL命令及其相应的功能表8.3 SQL子句C#C#教程教程1 1SELECTSELECT语句语句一个典型的SQL查询可以从指定的数据库表中“选择”信息,这时就需要使用SELECT语句执行。它的最简单形式是:SELECT * FROM tableName其中,星号(*)用来指定从数据库的tableN
9、ame表中选择所有的字段(列)。例如,若要查询Course表中的所有记录,则可用下列语句:SELECT * FROM Course若要从表中选择指定字段的记录,则将星号(*)用字段列表代替,多个字段之间用逗号分隔,例如:SELECT courseno,credit,coursename FROM CourseC#C#教程教程执行的结果如图8.7所示,可以看出查询的结果记录集合(简称为“结果集”)中的字段顺序是由SELECT语句中的字段顺序决定的。coursenocreditCoursename21121053C语言程序设计21123482.5AutoCAD21213313计算机图形学21213
10、453Visual C+程序设计图8.7 Course表执行SELECT的结果C#C#教程教程2 2WHEREWHERE子句子句在数据表查询SELECT语句中,经常还需要使用WHERE子句来设定查询的条件。它的一般形式如下:SELECT columnl,column2,FROM tableName WHERE condition例如,若将Score表中成绩(score)在80分以上的记录查询出来,则可使用下列语句:SELECT studentno, score FROM Score WHERE score=80WHERE子句中的条件可以包含(大于)、=(大于等于)、=(等于)、(不等于)和LI
11、KE等运算符。其中,LIKE用于匹配条件的查询,它可以使用星号(*)和问号(?)等通配符,星号(*)表示可以出现0个或多个字符,问号(?)表示该位置处只能出现1个字符。例如:SELECT * FROM Score WHERE studentno LIKE 21*C#C#教程教程将Score表中所有学号以21打头的记录查询出来。注意,LIKE后面的字符串是以单引号标识的。又如:SELECT * FROM Score WHERE studentno LIKE 210105? 将Score表中所有学号以210105打头的,且学号为8位的记录查询出来。需要说明的是,在许多DBMS中,LIKE后面字符串
12、中的通配符用“%”代替“*”,用“-”代替“?”。WHERE子句中的条件还可用AND(与)、OR(或)以及NOT(非)运算符构造复合条件查询,例如:若查询Score表中成绩(score)在70分到80分之间的记录,则可使用下列语句:SELECT * FROM Score WHERE score=70C#C#教程教程3 3ORDER BYORDER BY子句子句在数据表查询SELECT语句中,若将查询到的记录进行排序,则可使用ORDER BY子句。例如下面的形式:SELECT columnl,column2,FROM tableName WHERE conditionORDER BY coll,
13、col2,ASC 或SELECT columnl,column2,FROM tableName WHERE conditionORDER BY col1,col2,DESC其中,ASC表示升序(从低到高),DESC表示降序(从高到低),coll,col2,分别用来指定按什么字段排序。当指定多个字段时,先按coll排序,当出现相同coll的记录时,相同的记录按col2排序,依此类推。例如:SELECT * FROM Score ORDER BY studentno,coursenoC#C#教程教程4 4INNER JOININNER JOIN语句语句在进行多个数据表查询时,总希望将多个表的某几个
14、字段作为结果集的内容。例如,在学生信息管理系统中,常需要将学生成绩按学号、姓名、课程名称、成绩的记录查询出来,这时就需要将Score、Student和Course三个表的数据合并成单个数据集,这种合并称为表的“连接”,它是通过在SELECT查询中使用INNER JOIN(内连)操作实现的。INNER JOIN的最简单形式是:SELECT columnl,column2FROM table1INNER JOIN table2ON tablel.columnName= table2.columnName INNER JOIN将tablel和table2表进行内连,其连接的条件由ON子句设定。通过O
15、N子句指定这两个表中的哪些列进行比较,从而确定最终需要合并的记录。例如:SELECT Score. studentno, Score.courseno,Course.coursename, Score. scoreFROM Score INNER JOIN Course ON Score.courseno=Course.coursenoORDER BY studentno, coursenoC#C#教程教程需要说明的是,由于多个表中的列(字段)名可能重名,因此SELECT、ON后面所指定的列(字段)还需用圆点运算符指定该列所属的数据表名。上述查询将Score表中的studentno、cours
16、eno、score和Course表中的coursename列合并,同时根据studentno和courseno列进行升序排序。又如: SELECT Score.studentno,Student.studentname,Score.courseno,Course.coursename,Score.scoreFROM( Score INNER JOIN Student ON Score.studentno=Student.studentno )INNER JOIN Course ON Score.courseno=Course.coursenoORDER BY Score.studentno,S
17、core.coursenoC#C#教程教程5 5INSERTINSERT语句语句INSERT语句用来向表中插入一个新的记录。该语句的常用形式是:INSERT INTO tableName(coll,col2,col3,colN)VALUES (vall,va12,val3,,valN)其中,tableName用来指定插入新记录的数据表,tableName后面跟一对圆括号,包含一个以逗号分隔的列(字段)名列表,VALUES后面的圆括号内是一个以逗号分隔的值列表,它与tableName后面的列名列表是一一对应的。需要说明的是,若某个记录的某个字段值是字符串,则需要用单引号括起来。例如:INSERT
18、 INTO Student(studentno,studentname)VALUES (21010503,张小峰)将在Student中插入一个新行,其中studentno(学号)为“21010503”,studentname(学生姓名)为“张小峰”,对于该记录的其他字段值,由于没有指定相应的值,其结果由系统决定。C#C#教程教程6UPDATE语句语句UPDATE语句用于更新表中的数据。该语句的常用形式是: UPDATE tableName SET columnl=valuel,column2=value2,columnN=valueNWHERE condition 该语句可以更新tableNa
19、me表中一行记录或多行记录的数据,这取决于WHERE后面的条件。关键字SET后面是以逗号分隔的“列名值”列表。例如: UPDATE Student SET studentname=王鹏WHERE studentno=21010503C#C#教程教程7DELETE语句语句DELETE语句用来从表中删除记录,其常用形式如下: DELETE FROM tableName WHERE condition 该语句可以删除tableNam表中一行记录或多行记录,这取决于WHERE后面的条件。例如: DELETE FORM Student WHERE studentno LIKE 210105* 将Stud
20、ent表中所有以210105开头的学号的记录删除。C#C#教程教程1 1System.DataSystem.Data该命名空间是由ADO.NET(ActiveX Data Object,ActiveX数据对象)类组成的,它是托管应用程序中主要数据访问方法的。ADO.NET组件能够有效地管理来自多个数据源的数据,并为分布式应用程序中的数据进行请求、更新和协调提供相应的工具。2 2System.Data.CommonSystem.Data.Common该命名空间包含由.NET框架中的数据提供程序共享的类,用于在托管空间中访问数据源,旨在给开发人员提供一种方法以编写将作用于所有 .NET Frame
21、work 数据提供程序的 ADO.NET 代码。C#C#教程教程3 3System.Data.OdbcSystem.Data.Odbc该命名空间用于在托管空间中访问ODBC(Open Database Connectivity,开放数据库连接)数据源。ODBC提供应用程序接口(API),使得任何一个数据库都可以通过ODBC驱动器与指定的DBMS相连。用户的程序就可以通过调用ODBC驱动管理器中相应的驱动程序达到管理数据库的目的。作为Microsoft Windows Open Standards Architecture(WOSA,Windows开放式服务体系结构)的主要组成部分,ODBC一直
22、沿用至今。4 4System.Data.OleDbSystem.Data.OleDb该命名空间用于OLE DB(OLE Data Base,OLE数据库)数据源的连接、执行命令以及读取等。OLE DB试图提供一种统一的数据访问接口,并且除了处理标准关系型数据库中的数据之外,还能处理包括邮件数据、Web上的文本或图形、目录服务(Directory Services),以及主机系统中的IMS和VSAM数据。OLE DB提供一个数据库编程COM(组件对象模型)接口,使得数据的使用者(应用程序)可以使用同样的方法访问各种数据,而不用考虑数据的具体存储地点、格式或类型。这个COM接口与ODBC相比,其健
23、壮性和灵活性要高得多。C#C#教程教程5 5System.Data.SqlClientSystem.Data.SqlClient该命名空间用于SQL Server 7.0数据源的连接、执行命令以及读取等。它与System.Data.OleDb命名空间类似,但它为访问SQL Server 7.0及更高版本进行了优化。6 6System.Data.SqITypesSystem.Data.SqITypes该命名空间用于为SQL Server内部提供内部安全、快捷的数据类。7 7System.Data.OracleClientSystem.Data.OracleClient该命名空间用于Oracle数
24、据源的连接、执行命令以及读取等。8 8System.XmlSystem.Xml该命名空间用于支持XML数据的处理。C#C#教程教程【例例EX8_1EX8_1】根据上面的介绍创建数据库,命名为根据上面的介绍创建数据库,命名为“STUINFSTUINF”,用,用于记录学生信息,包括记录学生信息表,表名为于记录学生信息,包括记录学生信息表,表名为“StudentStudent”,记录学,记录学生课程成绩表,表名为生课程成绩表,表名为“ScoreScore”,以及记录课程的表,表名为,以及记录课程的表,表名为“CourseCourse”。使用。使用SQLSQL语句插入、更新和查询记录(在第一部分使用界
25、语句插入、更新和查询记录(在第一部分使用界面方式创建数据库和表,在这里使用面方式创建数据库和表,在这里使用SQLSQL语句创建数据库和表)。语句创建数据库和表)。设计步骤如下:(1)打开数据库管理器依次单击“开始”“所有程序”“Microsoft SQL Server 2005”“SQL Server Management Studio”,打开数据库管理工具,在弹出的“连接到服务器”对话框中选择“服务器名称”和“身份验证”,单击“连接”按钮连接到所选择的服务器。(2)创建数据库单击“新建查询”工具按钮,在打开的查询设计器窗口中输入创建数据库“STUINF”的T-SQL语句,单击执行按钮“ ”创
26、建数据库,代码如下所示:CREATE DATABASE STUINFC#C#教程教程(3)创建表在查询设计器窗口中输入创建表“Student”、“Course”和“Score”的T-SQL语句,单击执行按钮“ ”创建表,代码如下所示。(4)插入数据信息以及查询数据信息在查询设计器窗口中输入插入及查询的T-SQL语句,单击执行按钮“ ”执行此语句,结果如图8.8所示。图8.8 插入信息后查询的结果C#C#教程教程代码如下所示: USE STUINFGOINSERT INTO Student(studentno,studentname,xb,birthday,native,address)VALU
27、ES (081101,王林, 男,1989-3-10,江苏南京,南京师范大学)INSERT INTO Student(studentno,studentname,xb,birthday,native,address)VALUES (081102,李小锋,男,1987-10-3,江苏南京,南京师范大学)SELECT * FROM StudentC#C#教程教程8.2.1 ADO.NET8.2.1 ADO.NET基本概念与特点基本概念与特点ADO.NET数据模型从ADO发展而来,但它不只是对ADO的改进,而是采用了一种全新的技术。主要表现在以下几个方面:(1)ADO.NET不是采用ActiveX技
28、术,而是与.NET框架紧密结合的产物。(2)ADO.NET包含对XML标准的完全支持,这对于跨平台交换数据具有重要的意义。(3)ADO.NET既能在与数据源连接的环境下工作,又能在断开与数据源连接的条件下工作,特别是后者,非常适合于网络应用的需要。因为在网络环境下,要保持与数据源连接,不符合网站的要求,不仅效率低,付出的代价高,而且常常会引发由于多个用户同时访问所带来的冲突。C#C#教程教程ADO.NET提供了面向对象的数据库视图,并且在 ADO.NET对象中封装了许多数据库属性和关系。最重要的是,ADO.NET通过多种方式封装和隐藏了很多数据库访问的细节。可以完全不知道对象在与ADO.NET
29、对象交互,也不用担心数据移动到另外一个数据库或者从另一个数据库获得数据的细节问题。图8.9显示了ADO.NET 架构总览。图8.9 通过ADO.NET访问数据库的接口模型C#C#教程教程在ADO.NET中数据集与数据提供器是两个非常重要而又相互关联的核心组件,它们之间的关系如图8.10所示。图的右边代表数据集(DataSet),图的左边代表数据提供器(Provider)。下面将对两者分别做详细讲解。图8.10 数据集与数据提供器的关系C#C#教程教程图8.11展示了ADO.NET对象模型中的主要对象。实际上,ADO.NET类库是很复杂的,但我们现在需要了解的是ADO.NET对象模型中有哪些主要
30、对象,它们之间是如何交互的。图8.11 ADO.NET的对象模型C#C#教程教程1 1数据提供程序数据提供程序数据提供程序组件属于数据源(Data Source)。在.NET框架下的数据提供程序具有功能相同的对象,但这些对象的名称、部分属性或方法可能不同。如SQL Server对象名称以SQL为前缀(如SqlConnection对象),而OLEDB对象名称以OleDb为前缀(如OleDbConnection对象),ODBC对象则以Odbc为前缀(如OdbcConnection)。Connection对象表示与一个数据源的物理连接。Command对象代表在数据源上执行的一条SQL语句或一个存储过
31、程。DataReader是一种快速、低开销的对象,用于从数据源中获取仅转发的、只读的数据流,往往用来显示查询的结果。DataAdapter(数据适配器)对象是功能最复杂的对象,它是Connection对象和数据集之间的桥梁。它通过管理4个Command对象来处理后端数据集和数据源的通信。C#C#教程教程2 2数据集数据集数据集(DataSet)是记录在内存中的数据,它的结构如图8.12所示。图8.12 DataSet的结构C#C#教程教程数据集的一个主要特性是,可用以下两种方式访问和操作本地数据集内的数据:(1)作为关系数据库中的表,数据集可以包含一个表或表的集合。数据集的一个重要特征是,它会
32、跟踪其所包含的表之间的关系,就好像它是内存中的关系数据存储区。(2)作为XML(可扩展标记语言)结构数据,集中的数据还可按照XML数据的形式访问。ADO.NET提供了完成以下操作的方法:以XML形式读取和写入数据,以XML架构形式读取和写入数据集的结构。此外,为了允许同步查看、查询和修改XML形式的数据,可将XML Data Document与数据集相关联。C#C#教程教程8.3.1 8.3.1 创建创建ConnectionConnection对象对象建立与特定数据源的连接。在进行数据库操作之前,首先要建立对数据库的连接。所有Connection对象的基类均为DbConnection类。Con
33、nection类中最重要的属性是ConnectionString,该属性用来指定建立数据库连接所需要的连接字符串,其中包括如下几项:服务器名称、数据源信息以及其他登录信息。ConnectionString的主要参数有: Data Source:设置需连接的数据库服务器名。 Initial Catalog:设置连接的数据库名称。 Integrated Security:服务器的安全性设置,是否使用信任连接。值有True、False和SSPI三种,True和SSPI都表示使用信任连接。 Workstation Id:数据库客户端标识。默认为客户端计算机名。 Packet Size:获取与SQL S
34、erver通信的网络数据包的大小,单位为字节,有效值为51232 767,默认值为8192。 User ID:登录SQL Server的账号。 Password(Pwd):登录SQL Server的密码。 Connection Timeout:设置SqlConnection对象连接SQL数据库服务器的超时时间,单位为秒,若在所设置的时间内无法连接数据库,则返回失败。默认为15秒。C#C#教程教程Connection对象的构造函数有两个版本,没有参数的版本创建一个ConnectionString属性为空的新连接,带参数的版本接收一个字符串作为ConnectionString属性的值。以下是使用带
35、参数的构造函数的例子: System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection (Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=C:data.mdb; ); 下面是采用无参数构造函数,然后修改ConnectionString属性的例子: System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection (); 设置C
36、onnectionString属性的语句是: conn.ConnectionString = Data Source=MySQLServer; /服务器名user id=sa;password=123456; /安全信息Initial catalog=Northwind; Integrated Security=False; /数据库名以及其他参数C#C#教程教程如上例,存储连接字符串的详细信息(如用户名和密码)可能会影响应用程序的安全性。若要控制对数据库的访问,一种较为安全的方法是使用 Windows 集成安全性,此时连接字符串可以修改为:conn.ConnectionString = Da
37、ta Source=MySQLServer; /服务器名Initial catalog=Northwind;/数据库名Integrated Security=SSPI; /采用Windows集成安全性C#C#教程教程表8.4列出了Connection对象的常用方法。方 法说 明Open()打开与数据库的连接。注意ConnectionString属性只对连接属性进行了设置,并不打开与数据库的连接,必须使用Open()方法打开连接Close()关闭数据库连接ChangeDatabase()在打开连接的状态下,更改当前数据库CreateCommand()创建并返回与Connection对象有关的Co
38、mmand对象Dispose()调用Close()方法关闭与数据库的连接,并释放所占用的系统资源表8.4 Connection对象的常用方法C#C#教程教程1利用利用trycatchfinally语句块语句块确保释放资源的第一种方式是利用trycatchfinally语句块,确保在finally块中关闭任何已打开的连接。下面是一个小示例: try /Open the connection conn.Open(); /Do something usefulcatch ( Exception ex ) /Do something about the exceptionfinally / Ensur
39、e that the connection is freed conn.Close ( ); C#C#教程教程2使用使用using语句块语句块上面两种方法都没有好的异常处理方法来替代,所以有时需要结合起来使用。下面的例子结合了trycatchfinally和using技术,确保数据连接及时关闭。trycatchfinally与using的内外嵌套关系可以根据需要决定。 string source = server=(local)NetSDK; + integrated security=SSPI; + database=Northwind;using ( SqlConnection conn
40、= new SqlConnection ( source ) ) /Open the connection conn.Open (); /Do something usefulC#C#教程教程【例例EX8_2EX8_2】在在usingusing语句块中打开语句块中打开【例例EX8_1EX8_1】所建的数据库连接,所建的数据库连接,并显示数据库连接状态。并显示数据库连接状态。设计步骤如下:(1)新建WinForm项目新建WinForm项目并命名为“EX8_2”。(2)添加控件并设置属性在Form1的设计视图中将此窗体调整到适当的大小并将“Text”属性设置为“数据库连接”。从工具箱中拖曳一个Bu
41、tton控件到此窗体中,将其Text属性值设置为“测试”。(3)引用命名空间引用的命名空间为“System.Data.SqlClient;”。(4)添加事件及其事件代码切换到窗体设计视图,双击button1,添加Click事件,代码如下所示。C#C#教程教程(5)运行程序按“Ctrl+F5”组合键运行程序,单击“测试”按钮,结果如图8.13所示。 图8.13 例EX8_2运行的结果C#C#教程教程8.4.1 8.4.1 创建创建CommandCommand对象对象以下代码示例演示如何创建SqlCommand对象:string sql = SELECT CategoryID, CategoryN
42、ame FROM Categories;SqlCommand command1 = new SqlCommand(sql, sqlConnection1);参数sql为需执行的SQL命令,上述语句将生成一个命令对象command1,对由sqlConnection1连接的数据源指定检索(SELECT)操作。这两个参数在创建Command对象时也可以省略不写,而在创建了Command对象后,再通过设置Command对象的CommandText和CommandType等属性来指定。如果要通过代码在运行时创建Command对象,可以使用4个版本的构造函数,如表8.5所示。原 型含 义Command()
43、创建一个默认数据命令实例Command (cmdTxt)创建一个数据命令实例并设置CommandText属性为参数cmdTxt中指定的字符串Command (cmdTxt, conn)创建一个数据命令实例,设置CommandText属性为参数cmdTxt中指定的字符串,设置Connection属性为conn中指定的数据连接对象Command(cmdTxt,conn,trans)创建一个数据命令实例,设置CommandText属性为参数cmdTxt中指定的字符串,设置Connection属性为conn中指定的数据连接对象,设置Transaction属性为参数trans中指定的事务对象表表8.5
44、Command对象的构造函数对象的构造函数C#C#教程教程Command对象的常用属性和方法分别列于表8.6和表8.7中。表8.6 Command对象的常用属性属 性说 明CommandText取得或设置要对数据源执行的SQL命令、存储过程或数据表名CommandTimeout获取或设置Command对象的超时时间,单位为秒,为0表示不限制。默认为30秒,即若在这个时间之内Command对象无法执行SQL命令,则返回失败CommandType获取或设置命令类别,可取的值:StoredProcedure、TableDirect、Text所代表的含义分别为:存储过程、数据表名和SQL语句,默认为T
45、ext。数字、属性的值为CommandType.StoredProcedure、CommandType.Text等Connection获取或设置Command对象所使用的数据连接属性ParametersSQL命令参数集合方 法说 明Cancel()取消Comand对象的执行CreateParameter创建Parameter对象ExecuteNonQuery()执行CommandText属性指定的内容,返回数据表被影响的行数。只有Update、Insert和Delete命令会影响行数。该方法用于执行对数据库的更新操作ExecuteReader()执行CommandText属性指定的内容,返回D
46、ataReader对象ExecuteScalar()执行CommandText属性指定的内容,返回结果表第一行第一列的值。该方法只能执行Select命令ExecuteXmlReader()执行CommandText属性指定的内容,返回XmlReader对象。只有SQL Server才能用此方法表8.7 Command对象的常用方法C#C#教程教程Command对象的CommandType属性用于设置命令的类别:可以是存储过程、表名或SQL语句。当将该属性值设为CommandType.TableDirect时,要求CommandText的值必须是表名而不能是SQL语句。例如: OleDbComm
47、and cmd = new OleDbCommand();cmd.CommandText = students;cmd.CommandType = CommandType.TableDirect;cmd.Connection = conn; 这段代码执行以后,将返回students表中的所有记录。它等价于以下代码: OleDbCommand cmd = new OleDbCommand();cmd.CommandText = Select * from students;cmd.CommandType = CommandType.Text;cmd.Connection = conn;C#C#教
48、程教程与Command类似,每个.NET Framework数据提供程序都包括一个DataReader对象:OLE DB.NET Framework数据提供程序包括一个OleDbDataReader对象;SQL Server.NET Framework数据提供程序包括一个SqlDataReader对象;ODBC.NET Framework数据提供程序包括一个OdbcDataReader对象;Oracle.NET Framework数据提供程序包括一个OracleDataReader对象。使用DataReader检索数据首先必须创建Command对象的实例,然后通过调用Command的Execu
49、teReader方法创建一个DataReader,以便从数据源检索行。以下示例创建SqlDataReader对象reader,其中command代表有效的 SqlCommand对象。 SqlDataReader reader = command.ExecuteReader(); C#C#教程教程在创建了DataReader对象后,就可以使用 Read 方法从查询结果中获取行。通过传递列的名称或序号引用,可以访问返回行的每一列。为了实现最佳性能,DataReader 也提供了一系列方法,以便能够访问其本机数据类型(GetDateTime、GetDouble、GetString、GetInt32等
50、)的列值。以下示例循环访问一个 DataReader 对象,并从每个行中返回两个列。 if (reader.HasRows)/判断是否有结果返回 while (reader.Read() /依次读取行 Console.WriteLine(t0t1, reader.GetInt32(0), reader.GetString(1);else Console.WriteLine(No rows returned.);reader.Close();每次使用完DataReader对象后都应调用Close 方法显式关闭。DataReader对象的常用属性和方法分别列于表8.8和表8.9中。C#C#教程教程
51、【例例EX8_3EX8_3】对对【例例EX8_1EX8_1】所建的数据库的学生表所建的数据库的学生表StudentStudent进行读进行读取和添加。取和添加。设计步骤如下:(1)新建WinForm项目新建WinForm项目并命名为“EX8_3”。(2)添加控件并设置属性在Form1的设计视图中将此窗体调整到适当的大小并将“Text”属性设置为“Command对象与DataReader对象”。从工具箱中拖曳2个GroupBox、2个Button、5个TextBox、1个CheckBox、1个DateTimePicker、6个Label控件到此窗体中,属性的设置如表8.10所示。C#C#教程教程
52、对 象对 象 名属 性 名属 性 值FormForm1TextC o m m a n d 对 象 与DataReader对象TextBoxtxtAllStuMultilineTrueScrollBarsBothtxtStuIDtxtNametxtNativetxtAddressGroupBoxgroupBox1Text输入学生信息groupBox2Text显示学生信息CheckBoxcckXBText男ButtonbtnSeachText读取btnInsertText添加表8.10 窗体和控件属性设置C#C#教程教程(3)引用命名空间引用的命名空间为“System.Data.SqlClient
53、;”。(4)添加事件及其事件代码切换到窗体设计视图,分别双击两个按钮,添加Click事件,代码如下所示。C#C#教程教程(5)运行程序按“Ctrl+F5”组合键运行程序,单击“读取”按钮读取数据库中的所有学生信息,输入一个新的学生信息并单击“添加”按钮,将此学生信息插入数据库中,再单击“读取”按钮,结果如图8.14所示。图8.14 例EX8_3运行的结果C#C#教程教程DataAdapter是怎样向DataSet填充数据的呢?如图8.15所示,先用Connection建立数据库连接,相当于在数据库和应用程序之间建立一座桥梁,然后再用DataAdapter来填充它。DataAdapter相当于一
54、辆运货的卡车,Command就是卡车上的搬运工,一辆卡车上最多可以有四位搬运工,分别是Select、Insert、Update和Delete,每人负责一项任务。图8.15 ADO.NET的三个对象协同工作C#C#教程教程数据集从数据源中获取数据以后就断开了与数据源之间的连接。允许在数据集中定义数据约束和表关系,增添、删除和编辑记录,还可以对数据集中的数据进行查询、统计等。当完成了各项数据操作以后,还可以将数据集中的最新数据更新到数据源。创建数据集对象的语句格式如下: DataSet ds = new DataSet (); 或者 DataSet ds = new DataSet (数据集名);
55、 C#C#教程教程DataSet对象的常用属性列于表8.11中。表8.11 DataSet对象的常用属性属 性说 明CaseSensitive获取或设置在DataTable对象中进行字符串比较时是否区分字母的大小写。默认为FalseDataSetName获取或设置DataSet对象的名称EnforceConstraints获取或设置执行数据更新操作时是否遵循约束。默认为TrueHasErrorsDataSet对象内的数据表是否存在错误行Tables获取数据集的数据表集合(DataTableCollection),DataSet对象的所有DataTable对象都属于DataTableCollec
56、tionC#C#教程教程1 1数据表集合(数据表集合(DataTableCollectionDataTableCollection)和数据表()和数据表(DataTableDataTable)DataSet的所有数据表包含在数据表集合DataTableCollection中,通过DataSet的Tables属性访问DataTableCollection。DataTableCollection有以下两个属性:(1)Count:DataSet对象所包含的DataTable个数。(2)Tablesindex,name:获取DataTableCollection中下标为index或名称为name的数据
57、表。例如,DS.Tables0表示数据集对象DS中的第一个数据表,DS.Tables1表示第二个数据表,依次类推。DS.Tablesstudents表示数据集对象DS中名称为“students”的数据表。C#C#教程教程DataTableCollection有以下常用方法:(1)Add(table,name):向DataTableCollection中添加数据表。(2)Clear():清除DataTableCollection中的所有数据表。(3)CanRemove(table):判断参数table指定的数据表能否从DataTableCollection中删除。(4)Contains(name
58、):判断名为name的数据表是否被包含在DataTableCollection中。(5)IndexOf(table,name):获取数据表的序号。(6)Remove(table,name):删除指定的数据表。(7)RemoveAt(index):删除下标为index的数据表。C#C#教程教程创建DataTable时,不需要为TableName属性提供值,可以在其他时间指定该属性,或者将其保留为空。但是,在将一个没有TableName值的表添加到DataSet中时,该表会得到一个从“Table”(表示Table0)开始递增的默认名称TableN。例如,以下示例创建DataTable对象的实例,并
59、为其指定名称“Customers”。 DataTable workTable = new DataTable(Customers); 以下示例创建DataTable实例,方法是直接将其添加到DataSet的Tables集合中。 DataSet customers = new DataSet();DataTable customersTable = customers.Tables.Add(CustomersTable);表8.12、表8.13和表8.14分别列出了DataTable对象的常用属性、常用方法和事件。C#C#教程教程2 2数据列集合(数据列集合(DataColumnCollecti
60、onDataColumnCollection)和数据列()和数据列(DataColumnDataColumn)数据表中的所有字段都被存放在数据列集合DataColumnColection中,通过DataTable的Columns属性访问DataColumnCollection。例如,stuTable.Columnsi.Caption代表stuTable数据表的第i个字段的标题。DataColumnColection有以下两个属性:(1)Count:数据表所包含的字段个数。(2)Columnsindex,name:获取下标为index或者名称为name的字段。例如:DS.Tables 0.Col
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年商洛市丹凤县育才学校教师招聘笔试模拟试题及答案详解
- 2025年平顶山市第五人民医院医护人员招聘笔试试题及答案详解
- 2026年张家港中兴卫生院医护人员招聘笔试备考题库及答案解析
- 2026年芦溪县芦州控股等单位公开招聘编外工作人员调整岗位要求笔试参考题库及答案详解
- 2026年上半年新疆维吾尔自治区广播电视局所属事业单位自治区影视译制中心招聘事业单位工作人员考试(8人)笔试参考题库及答案详解
- 2026年天门市江汉三机医院医护人员招聘笔试备考题库及答案解析
- 2026云南西双版纳州景洪市教育体育系统在外教育英才回引9人笔试备考题库及答案详解
- 2026贵州贵阳市乌当区农村义务教育阶段学校教师特设岗位计划招聘21人笔试备考题库及答案详解
- 2025年佛山市顺德区陈村医院医护人员招聘笔试试题及答案详解
- 2025年哈尔滨市口腔医院医护人员招聘笔试试题及答案详解
- 第四届全国新能源汽车关键技术技能大赛-新能源汽车维修工(节能减排与氢动力技术方向)考试题库(含答案)
- HG∕T 4214-2011 脲铵氮肥 标准
- 《中医药文献检索》课件
- 气流除尘机电气控制系统设计
- 广西三支一扶考试试题真题及答案2023
- 解决铝合金车轮精车划伤问题(物场模型)
- 院前急救检伤分类
- 《预拌混凝土作业指导书》
- 人教版八年级物理第三章第四节升华和凝华课件
- 挖掘机司机技能理论考试题库大全(600题版)
- DLT50722023年火力发电厂保温油漆设计规程
评论
0/150
提交评论