580 likes | 748 Views
C# 网络编程技术教程. 第 4 章 C# 常用数据类与 Windows 编程. 学习目标. 掌握使用关键字 String 来定义字符串类型,以及利用 String 类型提供的成员来实现对字符串的操作。 了解常用的集合类型,掌握对数组元素进行各种操作的 ArrayList 类的使用方法。 了解 System.IO 命名空间中包含的用于对数据文件和流进行读写操作的类,重点掌握 File 、 Directory 、 Path 、 FileStream 等类的使用。 了解 .NET 中数据库编程的一般技术,重点掌握 ADO.NET 的使用。
E N D
C#网络编程技术教程 第4章 C#常用数据类与Windows编程
学习目标 • 掌握使用关键字String来定义字符串类型,以及利用String类型提供的成员来实现对字符串的操作。 • 了解常用的集合类型,掌握对数组元素进行各种操作的ArrayList类的使用方法。 • 了解System.IO命名空间中包含的用于对数据文件和流进行读写操作的类,重点掌握File、Directory、Path、FileStream等类的使用。 • 了解.NET中数据库编程的一般技术,重点掌握ADO.NET的使用。 • 了解Windows程序设计的基本概念,掌握创建窗体的一般过程,以及窗体中各控件的使用,掌握菜单设计的步骤。
本章内容 4.1 String类和StringBuilder类 4.2 ArrayList类 4.3文件与IO流 4.4 Windows程序设计基础 4.5数据库编程基础
4.1 String类和StringBuilder类 字符串将一组字符视为一个整体进行处理。C#使用关键字string来定义字符串类型,它对应着.NET类库的System.String类,该类专门用于存储字符串,允许对字符串进行许多操作。 4.1.1 字符串表示格式 string类型是从object类直接继承的封装类型,定义string类型变量的形式为: string 引用标识符{=“字符串值”} 例如:string str="hello world!"; 另外还可以通过string类的构造函数来表示字符串,例如: (1)public string(char,int) —将一个字符重复多次形成字符串 string str1=new string('a',3); //str1="aaa" (2)public string (char[]) —将一个字符数组全部转换成一个字符串 char[] aa=new char[]{'h','e','l','l','o'}; string str2=new string(aa); //str2="hello" (3)public string(char[],int,int) —将字符数组的一部分转换成字符串,其中第二个参数和第三个参数分别表示数组中转换部分的起始位置和长度 string str3=new string (aa,0,4); //str3="hell"
4.1 String类和StringBuilder类 4.1.2 常用字符串操作方法
4.1 String类和StringBuilder类 4.1.3 StringBuilder类的常用方法 对字符串进行删除、插入、替换等操作时,StringBuilder类提供的Remove、Insert、Replace方法和String类对应的方法基本相同,但使用上有一些差别。 1.Remove方法 StringBuilder类的Remove方法相当于String类中对应方法的第二个重载形式。 Public StringBuilder Remove(int,int) —删除字符串从指定位置开始的指定长度的子串 2.Replace方法 StringBuilder类的Replace方法比String类的Replace方法有更多的重载形式。其4种重载形式为: Public StringBuilder Replace(char,char) —将字符串中出现的所有指定字符替换成新的字符 Public StringBuilder Replace(string,string) —将字符串中出现的所有指定子串替换成新的子串 Public StringBuilder Replace(char,char,int,int) —将字符串中指定范围内出现的所有指定字符替换成新的字符 Public StringBuilder Replace(string,string,int,int) —将字符串中制定范围内出现的所有指定子串替换成新的子串
4.1 String类和StringBuilder类 3.Insert方法 StringBuilder类的Insert方法也是在字符串的指定位置插入一个子串,但它接受的参数类型除了可以是string类型,还可以是各种数值类型以及object类型。例如: StringBuilder str=new StringBuilder( ); str=str.Insert(0,DateTime.Now); str=str.Insert(4,‘年’); str=str.Insert(7,‘月’); str=str.Insert(11,‘日’); StringBuilder类还有特有的3种方法:Append、AppendLine和AppendFormat,它们都用于在字符串的尾端追加新内容。 4.Append方法 Append方法可以在字符串的尾端追加一个新串,它和Insert方法相似,接受的参数不仅可以是string类型,还可以是各种数值类型和object类型。例如: StringBuilder str=new StringBuilder( ); str.Append("UTC"); str.Append(DateTime.Now.Hour); str.Append("时");
4.1 String类和StringBuilder类 5.AppendLine方法 AppendLine方法比较简单,只有2种重载形式: Public StringBuilder AppendLine ( ) —在字符串末端追加一个换行符 Public StringBuilder AppendLine (string) —在字符串末端追加一个新串和一个换行符 6.AppendFormat方法 AppendFormat方法实际上是将Append方法和String类的静态方法Format结合在一起,先对一个字符串进行参数格式化,然后将得到的字符串追加到对象包含的字符串末端。
4.2 ArrayList类 ArrayList类主要用于对数组中的元素进行各种处理,它通过Add、Insert、Remove、RemoveAt这4种方法对数组进行操作。 1.Add( ) Add( )方法用于将对象添加到ArrayList的末尾处。 2.Insert( ) Insert( )方法用于将数据元素插入到ArrayList的指定索引处。 3.Remove( ) Remove( )方法用于从ArrayList中删除指定对象的第一匹配项。 4.RemoveAt( ) RemoveAt( )方法用于删除ArrayList中指定索引处的数据元素。
4.2 ArrayList类 例如: static void Main(string[] args) { //实例化一个ArrayList对象 ArrayList myArrlist = new ArrayList( ); //使用Add方法向myArrlist中添加对象 myArrlist.Add("星期一"); myArrlist.Add("星期二"); myArrlist.Add("星期三"); foreach (int i in new int[3] { 1,2,3 }) { myArrlist.Add(i); } //从myArrlist中删除值为3的第一个数据元素 myArrlist.Remove(3); //从myArrlist中删除索引号为3的数据元素,即第4个元素 myArrlist.RemoveAt(3); //从索引号为2(即第3个元素的位置处)插入一个元素 myArrlist.Insert(2,"星期四"); }
4.3文件与IO流 在.NET框架中,所有的输入输出操作都是基于流的方式。流是串行化设备的抽象表示,可以是一个文件、一个输入/输出设备或者是其他任何支持以线性方式读写的对象。Stream类是所有流类的抽象基类,它封装了操作系统和底层存储的各个细节,为用户提供了一致的方式来操作不同种类的数据源。与输入/输出操作相关的类都包含在命名空间System.IO中。 4.3.1 文件操作 在.NET框架中,使用File类来实现对文件的操作。 1.判断文件是否存在(Exists) 通过File类的Exists( )方法(参数是文件的路径),能够简单快速地判断文件是否存在。如果文件存在,返回值为True,如果文件不存在,返回值为False。例如: File.Exists("d:\abc.txt") 2.创建文件(Create) File类的Create( )方法可以方便地创建文件(参数是文件路径以及文件名),并返回一个FileStream对象,提供对创建的文件进行读写访问。例如: FileStream fs=File.Create("abc.txt")
4.3 文件与IO流 3.删除文件(Delete) File类的Delete( )方法用来删除指定的文件。例如: File.Delete("d:\abc.txt") 4.复制文件(Copy) File类的Copy( )方法可以复制文件,它有两个参数:一个是源文件的路径及其文件名,另一个是目标文件的路径及其文件名。例如: File.Copy("d:\abc.txt","c:\abc.txt") 如果目标文件已经存在,则复制失败。如果要覆盖目标文件,可以使用这样的形式: File.Copy("d:\abc.txt","c:\abc.txt",true) 5.移动文件(Move) File类的Move( )方法可以对文件进行移动。例如: File.Move(“d:\abc.txt”,“c:\abc.txt”) 6.返回文件属性(GetAttributes) File类的GetAttributes( )方法用来返回指定文件的属性,文件属性用枚举类型System.IO.FileAttributes表示(Archive表示归档属性,ReadOnly表示只读属性,Directory表示是否为一个目录等)。 FileAttributes attrib=File.GetAttributes("d:\abc.txt") if((attrib&FileAttributes.ReadOnly)!=0) Console.Write("abc.txt is ReadOnly!")
4.3 文件与IO流 7.设置文件属性(SetAttributes) File类的SetAttributes( )方法用来设置文件的属性。例如: FileAttributes attrib=FileAttributes.Archive| FileAttributes.ReadOnly File.SetAttributes("d:\abc.txt",attrib) 8.返回文件创建日期和时间(GetCreationTime) File类的GetCreationTime( )方法用来返回指定文件的创建日期和时间。例如: DateTime dt=File. GetCreationTime("d:\abc.txt") Console.Writeline(dt.TolongDateString( )) 除了File类外,.NET还提供了FileInfo类来对文件进行操作。这个类的作用及其所包含的属性和方法与File类相似,只是它的方法是动态的,在使用这些方法前必须先实例化FileInfo对象。
4.3 文件与IO流 4.3.2 目录操作 在.NET框架中,使用Directory类来实现对目录的操作 。 1.判断目录是否存在(Exists) Directory类的Exists( )方法可以判断目录是否存在,若文件夹存在,返回值为True,若文件夹不存在,返回值为False。例如: Directory.Exists("d:\\example") 2.创建目录(CreateDirectory) Directory类的CreateDirectory( )方法用来创建指定路径中包含的所有目录和子目录,并返回指定目录的DirectoryInfo对象。例如: Directory.CreateDirectory(d:\\example) 3 .删除目录(Delete) Directory类的Delete( )方法用来删除指定的目录。例如: Directory.Delete("d:\\example") 删除指定的空目录,如果目录非空,操作失败 Directory.Delete("d:\\example",True)删除指定目录以及它的所有子目录 4 .移动目录(Move) Directory类的Move( )方法用来移动指定目录。例如: Directory.Move("d:\dir","d:\c#\dir") 另外,.NET还提供DirectoryInfo类对目录进行操作。
4.3 文件与IO流 4.3.3 路径操作 .NET提供的Path类主要用于处理路径中的字符串, 而不是针对用户指定的路径。 1.ChangeExtension( ) 该方法用来改变指定文件的扩展名,并返回具有新扩展名的文件路径。 例如: String nPath=Path. ChangeExtension("d:\abc.txt","doc 2.GetExtension( ) GetExtension( )方法返回指定文件的扩展名。例如: String ext=Path.GetExtension("d:\abc.txt") 3.Combine( ) Combine( )方法用来合并两个路径的字符串。例如: String nPath=Path.Combine("d:\","example\dir"" 4.GetDirectoryName( ) 该方法返回指定文件的目录部分,即指定文件路径的最后一个反斜线前面的部分。例如: String dir=Path.GetDirectoryName("d:\example\dir\abc.txt") 5.GetFileName( )返回指定文件的文件名,即返回指定路径字符串最后一个反斜线后面的部分。例如: String dir=Path.GetFileName("d:\example\dir\abc.txt")//返回abc.txt 6.GetFileNameWithoutExtension( )返回指定文件的文件名,不包含后缀名。 7.GetPathRoot( )返回指定路径的根目录。
4.3 文件与IO流 4.3.4 读写文件 1.FileStream类 FileStream类主要用于对文件进行读写操作。 FileStream类常用的属性如下:
4.3 文件与IO流 FileStream类的常用方法 FileStream的构造函数有多种不同的重载形式,最简单的构造函数只有两个参数,即文件名和FileMode的枚举。 FileMode枚举成员
4.3 文件与IO流 2.文件的写入 (1)StreamWriter类。 StreamWriter类是用来向文本文件写入字符串的类,它提供了一些写入数据的方法。 ① Close( ) Close( )方法用于关闭当前StreamWriter对象和基础流。 ② Flush( )方法 Flush( )方法用于清理当前写入器的所有缓冲区,并将所有缓冲数据写入基础设备。 ③ Write( ) Write( )方法用于向文本流中写入字符串,但不追加换行符。 ④ WriteLine( ) WriteLine( )方法用于向文本流中写入字符串,并自动追加换行符。 举例:利用StreamWriter类将字符串写入文本文件abc.txt。 Public void WriteText( ) { System.IO.StreamWriter sw=new StreamWriter("d:\abc.txt”,True); sw.Write("It is a example"); sw.WriteLine("of StreamWriter"); }
4.3 文件与IO流 (2)BinaryWriter类。 除了StreamWriter类外,System.IO还提供了BinaryWriter类,它以二进制形式将基元类型写入流。例如: Public void WriteText( ) { BinaryWriter bw=new BinaryWriter(File.Open("bw.bin",Filemode.Create)); bw.Write("Hello World"); bw.Close( ); }
4.3 文件与IO流 3.文件的读取 (1)StreamReader类。 StreamReader类是用来读取文本文件的类,它提供了许多用于读取和浏览数据的方法。下面介绍其常用的方法。 ① Close( ) Close( )方法用于关闭StreamReader对象和基础流,释放读取器占用的所有系统资源。 ② Read( ) Read( )方法用于读入文本流中的下一个字符并移动文件指针。 ③ ReadLine( ) ReadLine( )方法用于从文本流中读入一行字符,并将数据作为字符串返回。 ④ ReadToEnd( ) ReadToEnd( )方法用于读取文本流中从当前位置到末尾的所有内容,并将读到的数据作为字符串返回。 (2)BinaryReader类 除了StreamReader类外,System.IO还提供了BinaryReader类,用于按二进制读取文件。
4.4 Windows程序设计基础 4.4.1 创建简单的WinForm程序 窗体的常用属性
4.4 Windows程序设计基础 4.4.2 Windows窗体应用程序模型 Windows窗体的应用程序编程模型主要由窗体、控件及其事件组成。 1.窗体 在Windows窗体中,Form类是在应用程序中显示的任何窗口的表示形式。当为应用程序设计用户界面时,首先创建一个从Form派生的类。然后添加控件、设置属性、创建事件处理程序以及向窗体添加编程逻辑。 2.控件 添加到窗体中的每个组件(如Button、TextBox或RadioButton)称为控件。Windows窗体通常包括与Windows关联的所有控件以及类似Windows窗体DataGridView的自定义控件。 3.事件 Windows窗体编程模型基于事件。
4.4 Windows程序设计基础 4.4.3 WinForm常用控件 一、常用控件 1.标签控件(Label) Label控件为控件提供运行时信息或说明性文字,通常用于显示静态文本,是WinForm中最基本的控件。 标签控件的常用属性 除了常规的标签控件外,.NET框架还提供了一种新型的标签控件LinkLabel,它由Label类派生,因此具有标签控件所有的属性、事件和方法。LinkLabel控件使用户能向Windows窗体程序中添加Web样式的链接。
4.4 Windows程序设计基础 2.文本框控件(TextBox) 文本框控件通常用于接收用户的输入或者显示文本。 文本框的常用属性
4.4 Windows程序设计基础 文本框的常用方法 文本框最常用的事件是TextChanged事件,当文本框中的内容发生改变时,触发该事件。
4.4 Windows程序设计基础 3.列表框控件(ListBox) 列表框控件通常用于显示供用户选择的选项列表,用户可以从中选择一项或多项。 列表框的常用属性
4.4 Windows程序设计基础 列表框的常用方法 列表框常用的事件: SelectedIndexChanged事件和SelectedValueChanged事件。 组合框控件(ComboBox)结合了文本框控件和列表框控件的功能,同时具有这两类控件的功能,能够执行大部分文本框和列表框所具有的操作。
4.4 Windows程序设计基础 4.命令按钮控件(Button) 命令按钮控件允许用户通过单击来响应各种操作,当单击Button控件时,即调用了它的Click事件。 命令按钮的常用属性 命令按钮最常用的事件是Click事件。
4.4 Windows程序设计基础 二、容器控件 1.FlowLayoutPanel控件 FlowLayoutPanel控件主要用来排列该容器控件中包含的控件对象。 FlowLayoutPanel控件的常用属性 FlowLayoutPanel控件最常用的事件是Layout事件。
4.4 Windows程序设计基础 2.Panel控件 Panel控件用于对控件集合分组。利用Panel控件可以按功能细分窗体,当移动Panel控件时,Panel控件里面包含的控件对象也一起移动。 Panel控件的常用属性 Panel控件常用事件是Layout事件。
4.4 Windows程序设计基础 3.GroupBox控件 GroupBox控件用于在一组控件周围显示带有标题的框架。同样当移动GroupBox控件时,GroupBox控件里面包含的控件也一起移动。 GroupBox控件的常用属性 4.TabControl控件 TabControl控件用于显示多个选项卡,以创建一组相关属性的属性页。 TabControl控件的常用属性
4.4 Windows程序设计基础 三、通用对话框控件 1.消息对话框(MessageBox) 消息对话框(MessageBox)通常用于向用户显示一些提示、警告信息。用户不能创建MessageBox类的实例,而只能通过它的静态成员来显示消息对话框。 若要显示消息对话框,通常是调用类MessageBox的静态方法Show。在调用Show方法时,除了需要指定在消息对话框中出现的文本和消息对话框的标题外,还可以通过MessageBoxIcon和MessageBoxButton类来指定在消息对话框中出现的图标和按钮类型。 MessageBoxIcon的枚举成员
4.4 Windows程序设计基础 MessageBoxButton的枚举成员 例如: MessageBox.Show("这是一个包含警告图标和确定、取消按钮的消息框", "消息框示例",MessageBoxButtons.OKCancel,MessageBoxIcon.Exclamation);
4.4 Windows程序设计基础 2.文件对话框 文件对话框通常用来打开文件和保存文件,其中打开文件对话框是用类OpenFileDialog表示,保存文件对话框是用类SaveFileDialog表示,这两个类都从FileDialog类派生,它们的使用方法也基本相同。 OpenFileDialog的常用属性
4.4 Windows程序设计基础 续上表 OpenFileDialog对话框的常用方法
4.4 Windows程序设计基础 3.颜色对话框(ColorDialog) ColorDialog控件用于显示选择颜色的对话框,其常用属性如表4.21所示。 ColorDialog控件的常用属性
4.4 Windows程序设计基础 4.字体对话框(FontDialog) FontDialog对话框用于显示选择字体的对话框。 FontDialog对话框的常用属性
4.4 Windows程序设计基础 4.4.4 Visual C#的菜单设计与编程 菜单是可视化编程的重要组成部分,在开发Windows应用程序时,菜单是组织大量数据最常用的方法。菜单通常分为下拉菜单(包括主菜单和子菜单)和快捷菜单两种。 主菜单:显示在菜单栏上、窗体运行时始终显示的菜单。 子菜单:主菜单下面的菜单。 快捷菜单:单击鼠标右键弹出的菜单。 其中下拉菜单使用类MenuStrip创建,快捷菜单使用类ContextMenuStrip创建。两者设计完全相同。
4.4 Windows程序设计基础 4.4.5 Visual C#中的MDI编程 MDI(Multiple-Document Interface)即多文档界面,由一个父窗体和多个子窗体组成。MDI窗体允许同时打开多个子窗体,是一种能够同时处理两个或两个以上窗体的界面形式。创建MDI窗体主要包括以下步骤: 1)MDI父窗体的创建 2)MDI子窗体的创建 3)从父窗体中调用子窗体。
4.5 数据库编程基础 4.5.1 ADO.NET概述 ADO.NET由ADO发展而来,具有与ADO相似的编程方式,是.NET提供的一组专门用于存取数据的类。ADO.NET最重要的新特性是:以断开连接的方式访问数据源以及使用标准的XML格式来保存和传输数据,它比ADO具有更好的互操作性、可维护性和可扩展性。 ADO.NET的体系结构图: ADO.NET主要由两部分构成:一部分是.NET数据提供程序(Data Provider),这部分是与数据库直接相连的联机对象,通过该类对象,可以在应用程序内完成连接数据源以及数据维护等相关操作;一部分是数据集(DataSet),这部分是与数据源无关的断开对象,是断开连接访问方式的核心组件。
4.5 数据库编程基础 4.5.2 ADO.NET的数据访问对象 1.Connection对象 要访问数据库,首先要建立与数据库的连接,ADO.NET提供了与数据源连接的对象,包括SqlConnection、OleDbConnection、OdbcConnection等。 1)SqlConnection类 SqlConnection类用来建立到SQL Server数据库的连接,它位于System.Data.SqlClient命名空间中。使用SqlConnection类首先要创建对象实例,然后通过设置SqlConnection对象的连接字符串(ConnectionString)属性来选择连接字符串。 常用的连接属性:
4.5 数据库编程基础 SqlConnection类的常用方法 ① Open( ) Open( )方法用于打开数据库连接,如果存在可用的数据连接,则SqlConnection会直接使用它,如果没有,则SqlConnection会创建一个新的连接。 ② Close( ) Close( )方法用于关闭打开的数据库连接。调用Open( )方法打开数据连接之后,数据库将一直处于打开状态,因此,必须调用Close( )方法或Dispose( )方法来关闭数据连接。 ③ ChangeDatabase( ) ChangeDatabase( )方法用于改变建立连接的数据库。例如: SqlConnection1.ChangeDatabase("pubs"); ④ BeginTransaction( ) BeginTransaction( )方法用于开始一个事务。例如: sqlConnection1.Open( ); sqlTransaction tran=sqlConnection1.BeginTransaction( );
4.5 数据库编程基础 利用SqlConnection类,建立SQL Server数据库连接的一般步骤如下: ① 创建SqlConnection对象。 ② 将连接字符串赋值给SqlConnection对象的ConnectionString属性。 ③ 调用SqlConnection对象的Open方法打开连接。 ④ 连接完毕后,调用SqlConnection对象的Close方法关闭连接。 ⑤ 调用SqlConnection对象的Dispose方法释放其占用的资源。 2)OleDbConnection类 OleDbConnection类表示到OLE DB数据源的连接,它位于命名空间System.Data.OleDb中。使用OleDbConnection类首先要创建OleDbConnection对象实例,然后通过设置OleDbConnection对象的连接字符串(ConnectionString)属性来选择连接字符串,其设置方法与SqlConnection对象完全相同。
4.5 数据库编程基础 2.Command对象 使用Connection对象与数据源建立连接之后,可以使用Command对象来对数据源执行查询、添加、删除和修改等操作。.NET 提供了两种数据命令类:SqlCommand类和OleDbCommand类,SqlCommand类专用于SQL Server数据库,而OleDbCommand用于所有OLE DB数据源。 1)SqlCommand类 SqlCommand类表示将在SQL Server中执行的SQL语句或存储过程,它位于命名空间System.Data.SqlClient中。 SqlCommand类的常用属性
4.5 数据库编程基础 SqlCommand类的常用方法 ① ExecuteReader( ) ExecuteReader( )方法将CommandText属性发送给Connection对象并生成一个SqlDataReader对象。 ② ExecuteNonQuery( ) 在执行不返回结果的数据库操作时,可以使用SqlCommand对象的ExecuteNonQuery( )方法,该方法在SqlCommand对象所关联的数据库连接上执行Transact-SQL语句并返回语句所影响的行数。 ③ ExecuteScalar( ) ExecuteScalar( )方法用于执行命令中的查询语句,并返回结果集中的第一行的第一列,其他的列和行都将被忽略。 2)OleDbCommand类 OleDbCommand类表示在OLE DB数据源上执行的SQL语句或存储过程,它包含的属性和方法与SqlCommand类完全相同,使用方式也完全相同。
4.5 数据库编程基础 3.DataReader对象 DataReader对象是一个简单的数据集,用于从数据源中检索只读数据集。.NET提供了两种类:SqlDataReader类和OleDbDataReader类。这两个类除了用于不同的数据源(SqlDataReader用于SQL,OleDbDataReader用于所有的OLE DB数据源),其他的方面完全相同。 一般情况下,不需要直接创建SqlDataReader对象或OleDbDataReader对象,而是通过调用SqlCommand对象或OleDbCommand对象的ExecuteReader方法从数据源中检索数据来创建。 DataReader对象的常用属性
4.5 数据库编程基础 SqlDataReader对象常用方法 ①Close( ) Close( )方法用于关闭SqlDataReader对象。在使用完SqlDataReader对象之后,必须调用这个方法来关闭它,以使数据库连接能够用于其他操作。 ②Read( ) Read( )方法使SqlDataReader对象移到下一条记录上。SqlDataReader对象的默认位置是第一条记录之前,因此在访问数据之前,必须先调用它的Read( )方法,如果该方法返回True,说明后面还有记录存在,反之,说明已经到达结果记录集的末尾。
4.5 数据库编程基础 4.DataSet对象 DataSet(数据集)是ADO.NET体系结构中的核心部分,ADO.NET的断开式、分布式数据方案正是通过它来实现的。DataSet主要用作一个非连接的数据缓存,从数据源中检索的数据都暂存在这个缓存中,供程序的其他部分使用。DataSet(数据集)独立于数据源,它的结构和关系数据库相似,主要体现为以下两大部分。 1)DataTableCollection DataTableCollection是由多个DataTable对象表示的表的集合。DataTable对象表示内存驻留数据的单个表,由DataColumnCollection类表示的列集合和ConstraintCollection类表示的约束集合共同构成。 2)DataRelationCollection DataSet(数据集)中,不仅包含多个DataTable,还包含这些DataTable之间的关系。表之间的关系由类DataRelation表示,它使一个DataTable对象中的行和另一个DataTable对象中的行相关联,即表示了两个表之间的一种父子关系,类似于关系数据库中主码和外码之间的联接。
4.5 数据库编程基础 DataSet对象的常用属性: DataSet对象的常用方法: ①ReadXml( ) ReadXml( )方法主要用于使用指定的文件将XML架构和数据读入DataSet对象。 ② GetXml( ) GetXml( )方法用于将DataSet(数据集)中的数据以XML文件形式显示给用户。 ③Clear( ) Clear( )方法用于清除所有表中的所有行的DataSet对象。