1、,生长,属性 (名词),体积变大 重量变重 颜色变红,将具有相同数据特征和行为特 征的所有的对象称为一个对象类 (苹果类),警铃响了,摘,方法(主动动词),事件(被动动词),某一个苹果,对象,类是型的概念,对象是值的概念,某一个苹果树,苹果,某一个对象的属性可以是数值型、字符型、也可以是另一个对象,在下面的界面中有几个对象?,数据库访问技术,JET与DAO ODBC与RDO OLE DB与ADO ADO.NET,1.JET与DAO,JET(Joint Engine Technology)数据连接引擎技术: 1991年末或92年初,MS发布了ACCESS作为其Windows桌面数据库,ACCES
2、S使用了JET数据库引擎。 Microsoft Jet 数据库引擎(Microsoft Jet Database Engine ) 一个数据库管理系统,它在用户及系统数据库中检索和存储数据。Microsoft Jet 数据库引擎可以被视为数据管理器组件,通过它可构建其他数据访问系统(例如,Microsoft Access 和 Microsoft Visual Basic)。 Microsoft Jet 数据库 使用 Microsoft Jet 数据库引擎创建的数据库。Microsoft Jet 数据库的文件扩展名是 .mdb。 JET仅为ACCESS数据库服务。,JET与DAO,DAO(Dat
3、a Access Object)数据访问对象 在开发JET引擎时,在其上增加了一个对象层,叫做数据访问对象(DAO)。 DAO可以打开DataBase的连接、访问或创建表,对表执行SQL语句,ACCESS 数据库 (*.mdb),通过JET,应用程序 使用DAO访问数据库,2.ODBC与RDO,ODBC(Open Database Connectivity)开放数据库互连 MS意识到许多人都拥有后端的数据库,如Oracle、DB2等,因此发布JET的同时也推出了一个数据访问层。 ODBC: 是MS建议并开发的数据库API标准,为异种数据库提供了统一的访问接口,屏蔽了不同DBMS的差异,使数据库
4、应用系统不仅仅局限于某个DBMS。 ODBC的设计思想 是允许从桌面到中等范围以及大型机上数据库的透明访问。,ODBC与RDO,RDO(Remot Data Object)远程数据对象 产生背景 在应用程序在直接访问ODBC时,由于ODBC不是基于对象的,主要是通过调用一些API( Application Programming Interface 应用编程接口)访问后端数据库的,虽然ODBC的执行效率比DAO要快得多,但编程工作却非常困难,而且错误处理时也不友好。 例如:完成如下的数据库操作,打开一个DataBase并修改一个Table 使用RDO需要写5行代码 使用ODBC API函数大概
5、需要30行代码 因此提出了RDO,RDO(Remot Data Object)远程数据对象 是建立在ODBC 之上的对象模型,提供如同DAO一样的易用性,同时又拥有几乎和ODBC API一样的速度。 使用DAO/ODBC Direct功能可以实现远程RDO功能,关系数据库 (SQL Sever200、 Oracle、 Access等),通过ODBC,应用程序 使用RDO访问数据库,JET通知ODBC 访问服务器数据库,数据库 (DataBase),ODBC允许JET或 RDO访问服务器数 据库,JET不能直接访问服务器,ACCESS,JET可以直接访问 ACCESS数据库,缺点,DAO与RDO
6、只能处理后台为关系数据库的DBMS,不能解决通用数据存储及通用数据访问。 例如:一个Email系统需要存储多媒体文件以及其他数据,比方说将一个Excel表格存储于该系统之中, DAO与RDO都不能访问。,3. OLE DB与ADO,OLE DB(Object Linking and Embedding for DataBase)数据库对象链接和嵌入 MS采用通用数据访问的方法,“你自己保存数据,我们给你提供一种方法来访问这些数据。” 实际上就是一种进行关系型数据和非关系型数据一样的技术。 OLE DB定义: MS提供一种对各类应用程序均适用的,采用ODBC接口,通过结构化查询语言SQL对数据库
7、进行访问操作的总体解决方案。 设计目的: 为了给多种多样的应用程序提供优化功能,OLE DB与ADO,ADO(ActiveX Data Object) ActiveX 数据对象 OLE DB和ODBC一样是一种底层的API,其上层对象模型是ADO。ADO几乎兼容所用的数据库系统。 定义 一种数据访问接口,可与符合 OLE DB 的数据源通信,以连接、检索、操作和更新数据。 优点: 与DAO和RDO相比,模型非常小 不是层次式结构,每个主要对象都可以独立创建。,什么是层次式结构?,Excel中把一个数放进一个单元格,不能仅创建单元格,需要创建一个工作表,工作表需要一个工作簿,工作簿又在Excel
8、程序中,因此存储一个数据,必须先创建一个Excel对象,再访问。,应用系统,ADO,OLE DB,游标 引擎,查询 引擎,Shape 引擎,OLE DB,电子 表格,ODBC SQL,ISAM,目录 服务,文件 系统,数据使用者,由OLE DB提供的服务,数据提供者,JET通知ODBC 访问服务器数据库,数据库 (DataBase),ODBC允许JET或 RDO访问服务器数 据库,OLE DB可以使用 ODBC或自身提供 的方法访问数据库,ACCESS,JET可以直接访问 ACCESS数据库,ADO 对象的组成,七个对象: Connection, Command, Parameter, Rec
9、ordset, Field, Property, Error.,四个集合: Fields, Properties, Parameters, Errors.,ADO与ADO.NET,ADO与ADO.NET既有相似也有区别,他们都能够编写对数据库服务器中的数据进行访问和操作的应用程序,并且易于使用、高速度、低内存支出和占用磁盘空间较少,支持用于建立基于客户端/服务器和 Web 的应用程序的主要功能。 但是ADO使用OLE DB接口并基于微软的COM技术,而ADO.NET拥有自己的ADO.NET接口并且基于微软的.NET体系架构。众所周知.NET体系不同于COM体系,ADO.NET接口也就完全不同于
10、ADO和OLE DB接口,这也就是说ADO.NET和ADO是两种数据访问方式。,4. ADO.NET,1).NET 2).NET Framework 3)ADO与ADO.NET 4)ADO.NET组成,.NET,Microsoft .NET 是 Microsoft XML Web services 平台。XML Web services 允许应用程序通过 Internet 进行通讯和共享数据,而不管所采用的是哪种操作系统、设备或编程语言。Microsoft .NET 平台提供创建 XML Web services 并将这些服务集成在一起之所需。对个人用户的好处是无缝的、吸引人的体验。,.NET
11、 框架概述,.NET 框架是一个新的开发平台,它为局域网 (LAN) 和 Internet 上的分布式企业应用提供了一致和有效的支持。该平台的关键特性包括: 统一的、语言无关的、面向对象开发环境,充分利用开发者已有的编程知识 无冲突软件部署,避免组件的版本冲突 丰富的可执行模式,与存储位置无关,组件可以在本地存储执行,或者远程存储本地执行,或者在 Internet 上远程存储执行 安全代码执行,具有高级安全设置以满足现代组织的安全需求 Windows 和 Web 应用程序具有统一的编程环境 通过在各自环境中高效的代码编译提升 Windows 和 Web 应用程序的执行性能 兼容的通信标准,确保
12、 .NET 应用程序可以与其它应用程序和其它平台的应用程序共存和集成,.NET 框架组成,.NET 框架有两大部分 公共语言运行时 (CLR) CLR 的作用是作为运行和管理 .NET 代码的代理。该代理负责一些基础系统服务例如内存管理、线程管理、错误控制,以及类型安全。 .NET 框架类库.NET 框架类库是一个全面的面向对象的类型集合,您可以使用它来开发任何应用程序、服务或组件。该类库取代了在 C+ 开发中普遍使用的 Microsoft 基础类库 (MFC) ,它被设计成易扩展的以便对其他服务提供面向对象的编程支持,这些服务例如 Microsoft Windows Server Syste
13、m 产品目前仅仅提供了专有的应用程序编程接口 (API) 。,ADO.NET 是一系列与数据操作相关的类。它们提供比 ADO 更灵活的数据访问机制为非连接环境设计的系统架构支持 XML 的编程对象模型一系列用来在 .NET 架构中访问数据的类、结构以及枚举器,ADO.NET 简介,System.Data 命名空间,ADO.NET的结构,ADO.NET 对数据库的访问,将数据传递到用户界面时, ADO.NET 采用 XML 格式,数据已缓存,断开式数据结构,连接环境,连接环境是指用户在这种环境下始终保持与数据源的连接 优点 环境易于实施安全控制 同步问题易于控制 数据实时性优于其他环境 缺点 必
14、须保持持续的网络连接 扩展性差,非连接环境举例,记者,获取并传输信息,发布信息到互联网,非连接环境,在非连接环境中,中央数据存储的一部分数据可以被独立地复制与更改,在需要时可以与数据源中的数据合并 优点 可以在任何需要的时间进行操作,在必要时才连接到数据源 不独占连接 非连接环境的应用提高了应用的扩展性与性能 缺点 数据不是实时的 必须解决数据的并发性与同步问题,非连接环境(续),连接环境中使用的对象,非连接环境中使用的对象,ADO.NET 对数据库的访问,对于Insert,Update,Delete 等单向操作,应用程序,数据库,1、用Connection.Open打开数据库,2、用Data
15、Adapter.Command或者 Command.Execute 执行命令,3、关闭数据库,Insert用InsertCommand Delete 用DeleteCommand Update用UpdateCommand,ADO.NET 对数据库的访问,应用程序,数据库,关闭数据库,1、用Connection .Open建立连接,2、用DataAdapter.SelectCommand 执行命令,DataAdapter.Fill,对于Select的双向操作,DataSet,与数据相关的命名空间(续),数据相关的命名空间包括 System.Data ADO.NET 的核心,包含了处理非连接的架构
16、所涉及到的类,例如:DataSetSystem.Data.Common 由 .NET 数据提供程序继承或者实现的工具类和接口,与数据相关的命名空间(续),System.Data.SqlClient SQL Server 的 .NET 数据提供程序 System.Data.OleDb OLEDB 的.NET 数据提供程序 System.Data.SqlTypes 为 SQL Server 数据类型专门提供的相关类与架构,提供了比其他类更安全、快速的解决方案 System.Xml 提供基于标准 XML 的类、结构以及枚举器,例如 XmlDataDocument 类,从 ADO 到 ADO.NET,
17、Connection,ADO,ADO.NET,Command,Recordset,XxxConnection,XxxCommand,DataSet,XxxTransaction,XxxDataReader,XxxDataAdapter,数据集,SQL Server .NET 数据提供程序,OLE DB .NET 数据提供程序,SQL Server 7.0 (或更高版本),OLEDB 数据源 (SQL Server 6.5),ADO.NET 对象模型,SQL Server 7.0 (或更高版本),在连接环境中使用ADO.NET,在连接环境中,只有操作结束后才断开与数据库的连接 打开连接 执行命令
18、 从 DataReader 中读取数据 关闭 DataReader 断开连接,SqlConnection,SqlCommand,SqlDataReader,在连接环境中使用ADO.NET(续),ADO.NET 提供了两种数据提供程序 SQL Server .NET 提供程序 需要导入 System.Data.SqlClient 命名空间,使用这个数据提供程序比使用 OLEDB 数据提供程序效率更高,这是因为没有经过 OLEDB 层或ODBC 层 OLE DB .NET 提供程序 必须导入 System.Data.OleDb 命名空间 数据提供程序对应的类 XxxConnection、XxxCo
19、mmand、XxxDataReader,在非连接环境中使用ADO.NET,在与数据库断开连接的情况下,数据库资源并不被独占 打开连接 填充数据集 关闭连接 处理数据集 打开连接 更新数据源 关闭连接,SqlConnection,数据适配器,数据集,SQL Server 7.0 (或更高版本),Connection 对象,方法,Close(),Open(),属性,ConnectionString,Database,在 ADO.NET 中,必须显式关闭连接,才能释放实际的数据库连接,Connection 对象,使用代码编辑器,SqlConnection objSqlConnection = new
20、 SqlConnection (“server = SQLDB; uid = sa; pwd = password; database = pubs“); objSqlConnection.Open();,objSqlConnection 创建的连接对象名称,SQLDB 存储“pubs”数据库的服务器名称,也可以写成IP地址,如123.101.220.1 本地服务器可以有以下几种写法: 1、(local) 2、127.0.0.1 3、本地机子名称,uid, pwd 用户标识和密码,Command 对象,数据库,Command 对象指定要对数据库执行的操作,检索和操纵数据,Command,与数据
21、库建立连接之后,可以使用 Command 对象执行命令并从数据源返回结果,Command 对象 7-3,方法,ExecuteNonQuery() 返回受影响的行数,ExecuteScalar() 返回第一行第一列,ExecuteReader() 返回DataReader类型值,属性,CommandText 欲执行的内容,可以是SQL语句或者存储过程名称,Connection,CommandType 命令类型,Command 对象,用SQL 语句的Command设置 SqlCommand objComm=new SqlCommand(); objComm.CommandText=“SQL 语句“
22、; objComm.CommandType=CommandType.Text ; objComm. Connection=objConnection;,DataReader,DataReader,只读 只进记录集,数据源,查询,只读和只进访问,需要永久连接,DataReader,DataReader 对象的属性和方法,DataSet,DataSet,是存储从数据库检索到的数据的对象,是零个或多个表对象的集合,这些表对象由数据行和列、约束和有关表中数据关系的信息组成,不直接与数据库交互,既可容纳数据库的数据,也可以容纳非数据库的数据源,DataSet 类的层次结构,DataSet,DataTab
23、le,DataColumn,DataRow,DataSet,DataSet 层次结构中的类,数据集的工作原理,客户端,服务器,数据集,将数据发送到数据集,客户端修改数据集,将数据集传递给客户端,将修改后的数据集传递给服务器,客户端向服务器请求数据,访问数据集中的数据,string stuName; stuName = dsStudents.Tables“Student“.Rows0“Sname“;,使用 Tables 集合返回 Sname 列,使用 C# 代码创建数据集,数据集实例是由 DataSet 构造函数创建的 数据集的名称是可选的,不需要指定 如果没有指定名称,则以默认名称 New D
24、ataSet 创建数据集,DataSet empDS = new DataSet(“EmployeeDetails“);,DataAdapter 对象,数据源,填充,脱机数据库,非永久连接,DataAdapter 对象,.NET 提供程序及其 DataAdapter 类,DataAdapter 类的属性和方法,DataAdapter 类的属性和事件,SQLDataAdapter,它设计为使用 Microsoft SQL Server 7 或更高版本提供最佳通信 该适配器在数据集和 Microsoft SQL Server 之间起桥梁作用,提供用于保存和检索数据的接口 与 SqlConnecti
25、on 和 SqlCommand 相互配合使用,SqlConnection objSqlConnection = new SqlConnection (“SERVER=MYSERVER;database=Students;uid=sa;password=playware“);SqlDataAdapter objSqlAdapter = new SqlDataAdapter(“SELECT * from Student“,objSqlConnection); objSqlConnection.Open(); DataSet objDataSet = new DataSet(); objSqlAda
26、pter.Fill(objDataSet,“Students“);,创建与 SQL Server 数据库的连接, 并用相应的值填充数据集,string query =“SELECT * from Student“; DataSet objDataSet = new DataSet(); SqlDataAdapter objSqlAdapter = new SqlDataAdapter(); objSqlAdapter.SelectCommand = newSqlCommand(query,objOleConnection); objSqlAdapter.Fill(objDataSet,“Stu
27、dents“);,传递给 objSqlAdapter 对象,将数据填充到数据集中,方法二,ADO与ADO.NET对照,在开始设计.NET体系架构时,微软就决定重新设计数据访问模型,以便能够完全的基于XML和离线计算模型。两者的区别主要有: ADO以Recordset存储,而ADO.NET则以DataSet表示。 Recordset看起来更像单表,如果让Recordset以多表的方式表示就必须在SQL中进行多表连接。反之,DataSet可以是多个表的集合。 ADO 的运作是一种在线方式,这意味着不论是浏览或更新数据都必须是实时的。ADO.NET则使用离线方式,在访问数据的时候ADO.NET会利用
28、XML制作数据的一份副本,ADO.NET的数据库连接也只有在这段时间需要在线。 由于ADO使用COM技术,这就要求所使用的数据类型必须符合COM规范,而ADO.NET基于XML格式,数据类型更为丰富并且不需要再做COM编排导致的数据类型转换,从而提高了整体性能。,参考文献,TechNet 中文网站 :http:/ 北大青鸟 .NET平台 http:/ C#数据库入门经典(第3版) (美) James Huddleston 清华大学出版社 SQL Server 2005 Oracle与MySQL基于ADO.NET 2的高级编程 (美) Wallace B.McClure 清华大学出版社 Visu
29、al C# 2005技术内幕 (美)Kevin Hoffman著 C# Windows编程 (美)Chris H.Pappas,(美)William H.Murray著,XML,XML(eXtensible Markup Language)即可扩展标记语言,它与HTML一样,都是SGML(Standard Generalized Markup Language,标准通用标记语言)。Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具。扩展标记语言XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立,虽然XML占用的
30、空间比二进制数据要占用更多的空间,但XML极其简单易于掌握和使用。,XML与Access,Oracle和SQL Server等数据库不同,数据库提供了更强有力的数据存储和分析能力,例如:数据索引、排序、查找、相关一致性等,XML仅仅是展示数据。事实上XML与其他数据表现形式最大的不同是:他极其简单。这是一个看上去有点琐细的优点,但正是这点使XML与众不同。 XML的简单使其易于在任何应用程序中读写数据,这使XML很快成为数据交换的唯一公共语言,虽然不同的应用软件也支持其它的数据交换格式,但不久之后他们都将支持XML,那就意味着程序可以更容易的与Windows、Mac OS, Linux以及其他
31、平台下产生的信息结合,然后可以很容易加载XML数据到程序中并分析他,并以XML格式输出结果。,.NET 的组成,开发工具 我们做的第一项工作是:通过 .NET 框架和 Visual Studio 工具集,使编写 Web 服务尽可能简单方便。我们认为,用于编写 Web 服务最好、最方便、最快并且最节约的方法是使用 .NET 框架和 Visual Studio .NET 开发工具。,http:/ Parthasarathy,平台战略副总裁,Microsoft Corporation 2000年 12 月 21 日,.NET 的组成,服务器 我们做的第二项工作是:真正致力于 Web 服务聚合与集成,
32、这恰恰是我们的 .NET 服务器家族的用武之地。我们认为,这些服务器是用于聚合与集成 Web 服务最好、最简单、最方便、最节约的方法。,http:/ 的组成,基础服务 我们的第三项工作是:使最终消费者的体验简单而令人神往,为此我们正在构建一个 .NET 构造块服务集。几乎每个人,每当他遇到多个站点和多个应用程序时,都遇到过这样的情况:需要登录这些站点和应用程序;我们正在创建一个诸如标识、通知和系统化存储之类的小服务集,利用这些服务,消费者和用户从一个服务转向另一个服务,从一个应用程序转到另一个应用程序,甚至从一种环境转向另一个环境都将非常容易。这种简单性在分布式计算的世界里是绝对必要的。,ht
33、tp:/ 的组成,设备 第四部分致力于最终用户的体验,通过一套我们正在创建的客户端和设备软件,将特别带给用户令人神往的体验。首先,.NET 假设您拥有了一个设备家族,我们正是要创建许多设备软件,以使人们可以使用相互取长补短的设备家族。我们将在设备软件中做一些有趣的事情,以使您尽可能体验到令人神往的效果。一方面,您将拥有我们为游戏机创建的设备软件,另一方面,您也将拥有我们为 PC 创建的设备软件,同时我们还致力于创建用于从电话到 PDA 到其他如掌上 PC 之类的各种设备的软件。,http:/ 的组成,用户体验 在拉动简单而令人神往的用户体验这一杠杆方面,我们的最后一项工作,是正在实实在在地创建
34、一些非常有针对性的用户体验,把 Web 服务集合到一起,并且集成很多功能,以提供非常有针对性的体验。我们正在创建 面向消费者的 MSN 面向小型企业的 bCentral 面向知识工作者的 Office 面向开发人员的 Visual Studio .NET。,http:/ Windows 应用程序示例,演示: 创建 Windows 应用程序示例的步骤,“乘客详细信息”窗体,创建一个名为“Example 1”的 Windows 应用程序 将 Form1.cs 更改为 frmPassenger.cs 设计窗体,如图 2.3 所示 命名控件 将以下命名空间包含在项目中 在类声明部分声明以下变量,usi
35、ng System.Data; using System.Data.SqlClient;,private SqlConnection objSqlConnection; private SqlDataAdapter objDataAdapter;,用于查询和检索数据的 Windows 应用程序示例,将以下代码添加到 frmPassenger 的 Load 事件中。 在 btnAdd 按钮的 Click 事件中添加以下代码。,private void frmPassenger_Load(object sender, System.EventArgs e) this.cboSex.Items.Ad
36、d(“男“);this.cboSex.Items.Add(“女“);objSqlConnection = new SqlConnection(“server=MYSERVER;database=Flights; uid=sa; pwd = playware;“); ,向组合框中添加值,创建 Sql 连接,private void btnAdd_Click(object sender, System.EventArgs e) tryobjSqlConnection.Open();DataSet objDataSet = new DataSet();objDataAdapter = new Sql
37、DataAdapter(“Select * fromPassenger“,objSqlConnection);objDataAdapter.Fill(objDataSet,“Passenger“); objDataAdapter.InsertCommand =objSqlConnection.CreateCommand();,打开 Sql 连接,新建数据集,填充数据集,objDataAdapter.InsertCommand.CommandText = “INSERT INTO Passenger(FlightCode,PassportNo”+ ”,Name,SeatNo, Sex,Age)
38、“ + “VALUES(“+this.txtFlightCode.Text+“,“+this.txtPassport.Text+“,“ +this.txtName.Text+“,“+this.txtSeatNo.Text+“,“+this.cboSex.SelectedItem.ToString()+“,“+this.txtAge.Text+“)“;DataTable objDataTable = new DataTable();objDataSet.Tables.Add(objDataTable);DataRow objDataRow = objDataSet.Tables0.NewRow(
39、);,创建显式、可重用的 INSERT 命令,objDataRow“FlightCode“=this.txtFlightCode.Text; objDataRow“PassportNo“=this.txtPassport.Text; objDataRow“Name“=this.txtName.Text;objDataRow“SeatNo“=Convert.ToInt32(this.txtSeatNo.Text); objDataRow“Sex“=this.cboSex.SelectedText; objDataRow“Age“=Convert.ToInt32(this.txtAge.Text)
40、; objDataSet.Tables0.Rows.Add(objDataRow);/ objDataAdapter.Update(objDataSet,“Passenger“);Application.DoEvents();MessageBox.Show(“已插入行“); this.ClearFields();catch(SqlException ex). . . ,用于查询和检索数据的 Windows 应用程序示例,在 btnDelete 按钮的 Click 事件中添加下列代码。,private void btnDelete_Click(object sender, System.Even
41、tArgs e) tryobjSqlConnection.Open();DataSet objDataSet = new DataSet();objDataAdapter = new SqlDataAdapter(“Select * fromPassenger“,objSqlConnection);objDataAdapter.Fill(objDataSet,“Passenger“);objDataAdapter.DeleteCommand = objSqlConnection.CreateCommand();objDataAdapter.DeleteCommand.CommandText =
42、 “DELETE from Passenger where FlightCode=“+this.txtFlightCode.Text+“;DataTable objDataTable = new DataTable();objDataSet.Tables.Add(objDataTable);,打开连接,创建显式、可重用的 DELETE 命令。,foreach(DataRow dr in objDataSet.Tables0.Rows)if(dr“FlightCode“.Equals(this.txtFlightCode.Text)DataRow objDataRow = dr;this.txt
43、FlightCode.Text = objDataRow“FlightCode“.ToString();this.txtPassport.Text = objDataRow“PassportNo“.ToString();this.txtName.Text = objDataRow“Name“.ToString();this.txtSeatNo.Text = objDataRow“SeatNo“.ToString();this.cboSex.SelectedText = objDataRow“Sex“.ToString();this.txtAge.Text = objDataRow“Age“.T
44、oString();objDataRow.Delete();,删除数据集中的记录,objDataAdapter.Update(objDataSet,“Passenger“);objDataSet.AcceptChanges();MessageBox.Show(“已删除记录“);ClearFields();break;elseMessageBox.Show(“未找到记录“);break;catch(SqlException ex). . . ,如果未找到记录,则显示一条错误消息,用于查询和检索数据的 Windows 应用程序示例,在项目中添加 ClearFields() 方法 在 btnCancel 按钮的 Click 事件中添加代码,private void ClearFields() this.txtName.Text=“;this.txtFlightCode.Text=“;this.txtAge.Text=“;this.txtPassport.Text=“;this.txtSeatNo.Text=“;this.cboSex.Text=“; ,private void btnCancel_Click(object sender, System.EventArgs e) this.Close(); ,