求救,使用ADO对数据库插入操作怎么扩大手机本身内存释放内存

当前位置: >>
【GIS二次开发】(MapX+C#)期末复习资料【考试要点】【老师整理】
一、.NET 框架VB.NET // C# // C++ // ..... Common language specification// ASP.NET (Web Forms& Web Services) // Windows ADO.NET(Data & XML)// Class Library// Common Language Runtime(CLR)// Runtime(CLR) :架构在操作系统的服务上,它负责 1、一般语言运行时 Common Language Runtime(CLR) 应用程序实际的执行,满足所有的应用程序的需求 。 用 于 执 行 和 管 理 所 有 对 .NET 平 台 编 写 的 程 序 语 言 编 码 。 CLR 通 过 中 间 语 言 ―― (Intermediate Language)机制实现基于.NET 的编程语言的无关性。 *通用语言规范 (CLS) 规定所有 .NET 语言都应遵循的规则 生成可与其他语言互操作的应用程序 *公共类型系统 (CTS) 通常包含标准数据类型、包含准则集 CLS、CTS 和 MSIL 紧密配合以实现语言互操作性 在.NET 平台编写的程序首先经过.NET 编译器,但得到的不是机器码,而是 Intermediate Language(IL) ,然后再经过即时(Just In Time)编译器编译得到机器码并最终执行。 透过 JIT 编译器所编译出来的机器码仍被是 CLR 所管理。 这种方式使得不管用何种语言(VB、C# 或其它语言)所写成的组件,都可以被结合在一起 使用。 2、.NET Framework Class Library .NET 类库的组织是以名字空间(Name Space)为基础的,最顶层的名字空间是 System。 ? using S ? using System.D ? using System.T ――C#示例 第三方厂商提供的类库同样可以使用。因为,该类库是以 Name Space 组织的,可以很容易 地避免命名冲突。 命名空间//说明 System.Drawing 处理图形和绘图,包括打印 System.Data 处理数据存取和管理,在定义 ADO.NET 技术中扮演重要角色 System.IO 管理对文件和流的同步和异步访问 System.Windows 处理基于窗体的窗口的创建 System.Reflection 包含从程序集读取元数据的类 System.Threading 包含用于多线程编程的类 System.Collections 包含定义各种对象集的接口和类3、ADO.NET (Data & XML) ADO.NET 为.NET 框架提供一套统一的数据访问技术1 与以前的 ADO 相比,ADO.NET 主要引入了以下几个新特性: (1)对 XML 的支持、(2)引入新数据对象(DataSet) 、(3)语言无关的数据访问 4、开发方式 ASP.NET:WebAWeb Service Windows *运行在.NET Platform 之上 *支持多种语言(VB.NET、C#、c++) 5、Common Language Specification 定义了一组运行于.NET Framework 的语言特性 CLS, 使得符合该规范的语言所编写程序可以 在.NET Framework 上无缝的集成。 符合该规范的语言,编译器可以把源代码编译成 CLR 所能识别的中间语言 Microsoft Intermediate Language( MSIL)和元数据 metadata。 C#的特点(优点) C#的特点(优点) 的特点 C#是专门为.NET 应用而开发的语言。在.NET 类库的支持下,C#能够全面地体现.NET Framework 的各种优点。总地来说,C#具有以下突出的优点。 1. 语法简洁。 彻底的面向对象设计。 与 Web 应用紧密结合。 强大的安全机制。 完 2. 3. 4. 5. 善的错误、异常处理机制。6.灵活的版本处理技术。7.兼容性 Visual Studio 2005 Visual Studio .NET 2005 是一套完整的开发工具, 用于构建高性能的桌面应用程序、 Web XML Services、移动应用程序和 ASP Web 应用程序 小结 (1).NET Framework 由 .NET Framework 类库和公共语言运行时两个主要组件组成 (2)CLR 是管理用户代码执行的现代运行时环境,它提供 JIT 编译、内存管理、异常管理和 调试等方面的服务 (3)CTS 定义声明、定义和管理所有类型所遵循的规则,而无需考虑源语言 (4)CLS 是所有针对 .NET 的编译器都必须支持的一组最低标准,以确保语言的互操作性 (5)命名空间是一组包含相关方法的相似类,专门用于避免类与类之间的名称冲突 (6)即时 (JIT) 编译器将 MSIL 代码编译为特定于目标操作系统和计算机体系结构的本机代 码 C# 中的数据类型分为两个基本类别 1、值类型 表示实际数据 只是将值存放在内存中 值类型都存储在堆栈中 int、char、结构 2、引用类型 表示指向数据的指针或引用 包含内存堆中对象的地址 为 null,则表示未引用任何对象 类、接口、数组、字符串 装箱和拆箱 装箱是将值类型转换为引用类型 ;拆箱是将引用类型转换为值类型2 利用装箱和拆箱功能, 可通过允许值类型的任何值与 Object 类型的值相互转换, 将值类型 与引用类型链接起来 隐式转换:无需指明转换,编译器自动将操作数转换为相同的类型。 隐式转换 当两个不同类型的操作数进行运算时, 编译器会试图对其进行自动类型转换, 使两者变为同 一类型。但是,不同的数据类型具有不同的存储空间,如果试图将一个需要较大存储空间的 数据转换为存储空间较小的数据,就会出现错误。 显式转换:又叫做强制类型转换,需指定把一个数据转换成其他类型。 显式转换数组: 数组:是可将同一类型的多个数据元素作为单个实体存放的一种数据结构*数组是同一数据类型的一组值 *数组属于引用类型,因此存储在堆内存中 *数组元素初始化或给数组元素赋值都可以在声明数组时或在程序的后面阶段中进行 数据类型[元素个数] 数组名称; int[6] arrayHere Array 类是支持数组的语言实现的基类。 1、创建数组 在 C#中,数组大体可以分为两种:一维数组和多维数组。 1. 一维数组:如果数组中的每个数据都只有一个元素, 那么, 这样的数据就称之为一维数组。 一维数组的定义方式如下:data_type[] arr_name = new data_type[int length] 2.多维数组:如果数组中的每个数据都由多个元素组成,那么,这样的数据就称之为多维数 组。多维数组的定义方式如下: data_type[,…,] arr_name = new data_type[int length1,int length2,…,int lengthn] 2、访问数组 访问数组的元素包括读取或设置某个元素的值。 最基本的方法是通过下标定位元素, 另外还 可以使用 GetValue/SetValue 方法。 1.通过下标定位元素 C#中数组对其中的元素进行排序, 并从 0 开始计数, 这样每一个元素都会有一个唯一的 下标,通过这个下标,就可以定位唯一的一个元素。 2.使用 GetValue/SetValue GetValue 方法定义如下:public object GetValue(params int[] indices); 3、数组排序 对数组进行排序是指按照一定的排序规则, 如递增或递减规则, 重新排列数组中的所有元素。 可以使用 Array 类的 Sort 方法完成这个功能。 Sort 方法有多种重载方式, 常用的形式如下: public static void Sort(Array array); 其中, 参数 array 为待排序的数组。 下面的示例首先定义了一个数组, 含有元素{5,4,3,2,1}, 然后利用 Sort 方法对其排序。 4、Clone 方法 Clone 方法对数组进行浅复制,即如果是引用类型数组,它不会复制元素引用的对象。对于 值类型数组和引用类型数组,结果不同:克隆值类型数组会产生两个独立数组。克隆引用类 型数组会产生指向相同对象的两个数组。数组序列数组序列(ArrayList)是一种较为复杂的数组,其实现了可变大小的一维数组。常用属性 和方法如下。 属性: 属性:Capacity// Count// IsReadOnly// Item//3 方法: 方法: Add/AddRange //IndexOf BinarySearch BinarySearch //Insert/InsertRange Clear //LastIndexOf Contains //Remove/RemoveAt/RemoveRange GetEnumerator //Reverse GetRange //Sort 1、创建 ArrayList 利用 ArrayList 的构造函数来创建一个新的列表,常用的形式有以下两种: (1)public ArrayList() (2)public ArrayList(int capacity) 参数 capacity 可以指定所创建列表的初始容量。如果不指定,则初始容量为.NET 的默认值 16。下面的代码创建了两个列表对象: (1)ArrayList arr1=new ArrayList(); (2)ArrayList arr2=new ArrayList(100); 2、添加元素 *可以通过 ArrayList 的 Add 和 AddRange 方法, 实现向一个列表中添加数据。 两者的区别在 于:Add 一次只能添加一个元素,而 AddRange 一次可以添加多个元素,这多个元素需要放 在一个集合或数组中。两者常用的形式如下: (1)public int Add(object value) (2)public void AddRange(ICollection c) *Add 和 AddRange 方法只能将元素添加到列表的末尾, 如果想要在列表的任意位置添加元素, 则需要使用 Insert 方法。 3、删除元素 ArrayList 中支持删除元素的方法有 3 个,形式分别如下: (1)public void Remove(object obj):用于删除数组中特定对象 obj 的第一个匹配项。 参数 obj 为要从 ArrayList 移除的 Object; (2)public void RemoveAt(int index):用于移除 ArrayList 的指定索引处的元素。参数 index 为要移除的元素的从零开始的索引; (3)public void RemoveRange(int index,int count):用于从 ArrayList 中移除一定范 围的元素。参数 index 为要移除元素的起始索引(从零开始计数) ,参数 count 为要移除的 元素数。 4、查找元素 (1)在集合中对特定元素的查找也是常用的操作之一,ArrayList 提供了二分查找的方法 BinarySearch。 (2)如果使用制定的排序策略对集合中的元素进行排序之后,相应地,也可以使用同样的排 序策略,结合 BinarySearch 方法实现元素的查找。这时,形式如下: (3)public virtual int BinarySearch(object value,IComparer comparer); 5、遍历列表 1.使用 foreach 语句 遍历列表是指访问一遍列表中的所有元素,可以使用 foreach 语句完成这个功能。 2.使用 GetEnumerator 方法 除了 foreach 之外, 还可以使用 ArrayList 的 GetEnumerator 方法实现列表的遍历。 形式 如下: public virtual IEnumerator GetEnumerator();4 GetEnumerator 方法返回整个 ArrayList 的枚举数对象 IEnumerator。这个对象可以得到 一个集合对象的所有元素,其最主要的属性为 Current,用于获取集合中的当前元素。 **数组 Array) 数组( 的对比: **数组(Array)与 ArrayList 的对比: (1)数组是固定大小。 (2)数组要声明元素的类型,集合类的元素类型却是 object。 (3) 数组可读可写不能声明只读数组; 集合类可以提供 ReadOnly 方法以只读方式使用集合。 (4)数组要有整数下标,集合不使用下标访问。 Array 位于 System 命名空间中;ArrayList 位于 System.Collections 命名空间中。**哈希表 **哈希表哈希表,名-值对。类似于字典(比数组更强大)。哈希表是经过优化的,访问下标的对象先 散列过。如果以任意类型键值访问其中元素会快于其他集合。 C#中,哈希表是一个&键(key) 、值(value)&对的集合,每一个元素都是这样一个对。 哈希表(Hashtable)每个元素是一个键/值对,键不能为空引用 null,但值可以为 null。 在需要存储具有键/值对属性的数据时,例如&学号,学生对象&对、&数据属性名,数据值& 等具有一一对应关系的数据时,常常需要使用哈希表。队列队列(Queue)实际上是一种特殊的列表。对队列,进先出。enqueue 方法入队列,dequeue 方法出队列。 1、创建队列 利用 Queue 的构造函数创建一个新的队列,常用的形式包括以下几种: (1)public Queue () (2)public Queue (int capacity) (3)public Queue( int capacity, float growFactor) 参数 capacity 可以指定所创建列表的初始容量,如果不指定,则初始容量为.NET 的默认值 32。 而参数 growFactor 则指定当队列满后容量的增长率, 新容量等于当前容量与 growFactor 的乘积,默认值为 2.0。 2、元素入队 可以通过 Queue 的 Enqueue,实现向一个元素的入队操作,形式如下: public virtual void Enqueue(object obj); 下面的示例中,首先定义了一个队列 queue1,然后使用 Enqueue 方法,向其中添加了 3 个 元素, 其中第一个为字符串对象 “Hello”第二个为一个整数对象 1, 3 个为整型数组 arr1。 , 第 Queue queue1=new Queue(); object item=new object(); item=&Hello&; queue1.Enqueue(item); //字符串:&Hello&入队 item=1; queue1.Enqueue(item);//整数:1 入队 int[] arr1=new int[]{1,2,3}; queue1.Enqueue(arr1);//数组:arr1={1,2,3}入队 3、元素出队 与 Enqueue 相反,可以通过 Queue 的 Dequeue,实现一个元素的出队操作,形式如下: public virtual object Dequeue(); 下面的示例中,首先定义了一个队列 queue1,然后使用 Enqueue 方法,依次入队 3 个元素。5 然后再使用 Dequeue 方法, 输出所有的元素。 注意, 这个输出的顺序和入队的顺序是一致的。 Queue queue1=new Queue(); queue1.Enqueue(&Hello&); queue1.Enqueue(1); queue1.Enqueue(new int[]{1,2,3});//依次入队:&Hello&、1、{1,2,3} object outItem=new object(); while(queue1.Count&0){ outItem=queue1.Dequeue(); Console.WriteLine(&{0}&,outItem); } //通过出队操作,输出队列中的所有元素,顺序与入队的顺序一致。堆栈同 Queue 相反,堆栈(Stack) ,后进先出。push 方法入栈,pop 方法出栈。 1、创建堆栈 利用 Stack 的构造函数创建一个新的堆栈,常用的形式包括: (1)public Stack(); (2)public Stack(int capacity)。 参数 capacity 可以指定所创建列表的初始容量。如果不指定,则初始容量为.NET 的默认值 10。当堆栈中的元素达到其最大容量时,容量将自动增加一倍。下面的代码创建了两个堆栈 对象: (1)Stack Stack1=new Stack(); (2)Stack Stack2=new Stack(100); 2、元素入栈 可以通过 Stack 的 Push,实现向一个元素的入栈操作,形式如下: public virtual void Push(object obj); 下面的示例中, 首先定义了一个堆栈 Stack1, 然后使用 Push 方法, 向其中添加了 3 个元素, 其中第一个为字符串对象“Hello” ,第二个为一个整数对象 1,第 3 个为整型数组 arr1。 Stack stack1=new Stack(); object item=new object(); item=&Hello&; stack1.Push(item); //字符串:&Hello&入栈 item=1; stack1.Push(item); //整数:1 入栈 int[] arr1=new int[]{1,2,3}; stack1.Push(arr1); //数组:arr1={1,2,3}入栈 3、元素出栈 与 Push 相反,可以通过 Stack 的 Pop,实现一个元素的出栈操作,形式如下: public virtual object Pop(); 下面的示例中,首先定义了一个堆栈 Stack1,然后使用 Push 方法,依次入栈 3 个元素。再 使用 Pop 方法,输出所有的元素。这个输出的顺序和入栈的顺序是相反的。 Stack stack1=new Stack(); stack1.Push(&Hello&); stack1.Push(1); stack1.Push(new int[]{1,2,3}); //依次入栈:&Hello&、1、{1,2,3} object outItem=new object(); while(stack1.Count&0){6 outItem=stack1.Pop(); Console.WriteLine(&{0}&,outItem); } //利用 Pop 方法,循环输出 stack1 中所有的元素,注意到,输出的顺序与入栈的顺序是 相反的字符串*字符串是应用程序和用户交互的主要方式,是评价一个编程语言非常重要的内容。 *.NET 提供了几个类来快速实现字符串操作,包括 String,System.Text 命名空间等。 *字符串(String)是最常用的字符串操作类,可以帮助程序设计人员完成绝大部分的字符 串操作功能,使用方便。如下所示为 String 类的属性和常用方法。 属性:Empty// Chars// Length// 方法: (1)Compare //GetEnumerator //Remove (2)Concat //IndexOf/IndexOfAny //Replace (3)Copy/CopyTo //Insert //Split (4)EndsWith/StartsWith //Join //Substring (5)Equals //LastIndexOf/LastIndexOfAny //ToLower/ToUpper (6)Format //PadLeft/PadRight //Trim/TrimEnd/TrimStart 运算符: (1)相等运算符:= =(2)不等运算符: !=(3)连接算符:+ 1、比较字符串 比较字符串是指按照字典排序规则,判定两个字符串的相对大小。按照英文字母顺序,出现 在前面的字母小于出现在后面的单词。在 String 类中,常用的比较字符串的方法包括 Compare, CompareTo ,CompareOrdinal 以及 Equals。 1.Compare 方法 2.CompareTo 方法 3.CompareOrdinal 方法 4. Equals 方法 2、格式化字符串 Format 方法用于创建格式化的字符串以及连接多个字符串对象。Format 方法有多个重载形 式,最常用的为:public static string Format(string format, params object[] args); 其中,参数 format 用于指定返回字符串的格式,而 args 为一系列变量参数。 示例:String newStr=String.Format(&{0},{1}!&,strA,strB); Console.WriteLine(newStr); // 输出为 Hello,World! 3、连接字符串 String 类包含了两个连接字符串的静态方法 Concat 和 Join。 1. Concat 方法: 用于连接两个或多个字符串。 Concat 方法也有多个重载形式, 最常用的为: public static string Concat(string a,string b); 2.Join 方法:利用一个字符数组和一个分隔符构造新的字符串。常用于把多个字符串连接 在一起,并用一个特殊的符号来分隔开。Join 的常用形式为: public static string Join(string[]value,string separator,); 3.连接运算符“+” :String 支持连接运算符“+” ,可以方便地连接多个字符串。 例如,用“+”把“Hello”和“World”连接起来。 4、分割字符串 使用前面介绍的 Join 方法, 可以利用一个分隔符把多个字符串连接起来。 反过来, 使用 Split 方法可以把一个整串,按照某个分隔符分裂成一系列小的字符串。例如,把整串7 “Hello^^World”按照字符‘^’进行分裂,可以得到 3 个小的字符串,即“Hello”“” 、 (空 串)和“World” 。Split 有多个重载形式,最常用的为: public string[] Split( params char[] separator); 5、插入字符串 String 类包含了在一个字符串中插入新元素的方法,可以用 Insert 在任意位置插入任意字 符。而使用 PadLeft/PadRight 方法,可以在一个字符串的左右两侧进行字符填充。 1.Insert 方法 2.PadLeft/PadRight 方法 6、删除字符串 String 类包含了删除一个字符串的方法,可以用 Remove 方法在任意位置删除任意长度的字 符,也可以使用 Trim/TrimEnd/TrimStart 方法剪切掉字符串中的一些特定字符。 1.Remove 方法:从一个字符串的制定位置开始,删除指定数量的字符。最常用的为: 2.Trim/TrimStart/TrimEnd 方法:若想把一个字符串首尾处的一些特殊字符剪切掉,如去 掉一个字符串首尾的空格等,可以使用 String 的 Trim 方法。 7、遍历字符串 遍历子字符串(简称子串)是指在一个字符串中寻找其中包含的子串或者某个字符,在 String 类 中 , 常 用 的 定 位 子 串 和 字 符 的 方 法 包 括 StartWith/EndsWith 、 IndexOf/LastIndexOf 以及 IndexOfAny/LastIndexOfAny。 1.StartWith/EndsWith 方法 2.IndexOf/LastIndexOf 方法 3.IndexOfAny/LastIndexOfAny 方法 8、复制字符串 String 类包含了在复制字符串方法 Copy 和 CopyTo, 可以完成对一个字符串及其一部分的复 制操作。 1.Copy 方法:若想把一个字符串复制到另一个字符数组中,可以使用 String 的静态方法 Copy 来实现,其形式为: public static string Copy(string str); 2.CopyTo 方法:实现 Copy 同样的功能,但功能更丰富,可以复制源字符串中的一部分到 一个字符数组中。另外,CopyTo 不是静态方法,其形式为: public void CopyTo(int sourceIndex, char[] destination, int destinationIndex, int count); 9、大小写转换 String 提供了方便转换字符串中所有字符大小写的方法 ToUpper 和 ToLower。 这两个方法没 有输入参数,使用也非常简单。下例首先把“Hello”转换为“HELLO” ,然后再变为小写形 式“hello” 。 newStr=strA.ToUpper(); Console.WriteLine(newStr); //输出为 HELLO newStr=strA.ToLower(); Console.WriteLine(newStr); //输出为 helloStringBuilder 类与 String 类相比,System.Text.StringBuilder 类可以实现动态字符串。此处,动态的含 义是指在修改字符串时,系统不需要创建新的对象,不会重复开辟新的内存空间,而是直接 在原 StringBuilder 对象的基础上进行修改。 属性:Capacity// Chars// Length// MaxCapacity 方法:Append// AppendFormat// Equals// Insert// Remove// Replace//8 1、创建 StringBuilder 对象 *StringBuilder 类位于命名空间 System.Text 中,使用时,可以在文件头通过 using 语句 引入该命名空间:using System.T *声明 StringBuilder 对象需要使用 new 关键字,并可以对其进行初始化。如下语句声明了 一个 StringBuilder 对象 myStringBuilder,并初始化为“Hello” 。 StringBuilder myStringBuilder=new StringBuilder(&Hello&); 2、追加字符串 1.Append 方法 Append 方法实现简单的追加功能,常用形式为: public StringBuilder Append(object value); 2.AppendFormat 方法 AppendFoamat 方法可以实现对追加部分字符串的格式化,可以定义变量的格式,并将 格式化后的字符串追加在 StringBuilder 后面。常用形式为: StringBuilder AppendFormat(string format, params object[] args); 3、插入字符串 StringBuilder 的插入操作是指将新的字符串插入到当前 StringBuilder 字符串的指定位 置,如“Hello”变为“Heeeello” 。可以使用 StringBuilder 类的 Insert 方法来实现这个 功能,常用形式为:public StringBuilder Insert(int index,object value); 其中,参数 index 指定所要插入的位置,并从 0 开始索引,如 index=1,则会在原字符串的 第 2 个字符之前进行插入操作;同 Append 一样,参数 value 并不仅是只可取字符串类型。 4、删除字符串 StringBuilder 的删除操作可以从当前 StringBuilder 字符串的指定位置,删除一定数量的 字符,例如把“Heeeello”变为“Hello” 。 可以使用 StringBuilder 类的 Remove 方法来实现这个功能,常用形式为: public StringBuilder Remove( int startIndex, int length); WinForms 基础知识总结 (1)WinForms 可用于 Windows 窗体应用程序开发 (2)Windows 窗体控件是从 System.Windows.Forms.Control 类派生的类 (3)标签控件用于显示用户不能编辑的文本或图像 (4)按钮控件提供用户与应用程序交互的最简便方法 (5)组合框控件是列表框控件和文本框控件的组合,用户可以键入文本,也可以从所提供的 列表中选择项目 (6)窗体提供了收集、显示和传送信息的界面,是 GUI 的重要元素 (7)消息框显示消息,用于与用户交互C#的面向对象设计 第 5 章 C#的面向对象设计一、面向对象概述 面向对象是一种模块化的、以对象为基础的设计思想,现在被广泛应用于软件设计领域。 类是对象的一个抽象的概念,对象则是类的一个实例化。 二、命名空间 命名空间是用来组织类的。通常可以把相关联的类放在一个命名空间中,进行有效的管理。 组织代码的最基本的单元就是类。 把每个类分别写在一个文件中, 可以更好地组织代码的结 构。但是,有时候还需要组织各个类,将再次分类的类组织起来。.NET 架构提供了一种可 以组织类的概念,那就是命名空间。9 命名空间的定义和引用 用户可以自己定义命名空间, 以便程序的功能可以更好地得到扩展, 代码也可以更加有效合 理地组织起来。 使用命名空间之前,要先引用。引用命名空间是利用 using 关键字,后跟命名空间的名称。 引用命名空间 CustomNamespace1 的代码如下:using CustomNamespace1; 三、类 类是面向对象中最为重要的概念之一, 是面向对象设计中最基本的组成模块。 类可以简单地 看作一种数据结构。 (1)在现实生活中,可以找出很多关于类的例子。例如,学生可以看作是一个类,那么某个 同学就是这个学生类的一个实例化对象。同样,老师也可看作一个类,某个老师是老师类的 一个实例化对象。 (2)从软件设计的角度来说,类是一种数据结构,用于模拟现实中存在的对象和关系,包含 静态的属性和动态的方法。 (3)C#中类的声明需要使用 class 关键字,并把类的主体放在花括号中,格式如下: [class-modifiers] class class-name { //属性 //方法 } 类的成员和访问控制 从类的继承关系上讲,类的成员可以分为两大类:类本身声明的和从基类继承的。类的成员 的类型有以下几种:常量、变量、方法、属性、事件、操作符以及构造函数和析构函数。 从类的访问角度上来讲,类的成员又可以分为四类:公有成员、私有成员、保护成员及内部 成员: (1)public:所属类的成员以及非所属类的成员都可以访问 (2)private:只有所属类的成员才能访问 (3)protected:所属类或派生自所属的类型可以访问 (4)internal:当前程序集可以访问 构造函数和析构函数 构造函数主要的作用是执行类的实例的初始化。 析构函数主要的作用就是回收系统占用的资 源。 1.构造函数 在实例化对象的时候,对象的初始化是自动完成的,并且这个对象是空的。有时候,希望每 创造一个对象时都为其初始化某些特征, 这时就需要用到构造函数。 构造函数是类的一种特 殊方法,每次创建类的实例都会调用它 2.析构函数 上面介绍了使用构造函数在实例化对象时自动完成了一些初始化工作。 反过来, 在销毁 对象的时候,有时候也希望能自动完成一些“收尾”任务。例如,关闭数据库连接等,C# 使用析构函数来完成这个功能。 四、域和属性 域和属性都提供了保存类的实例的数据信息的方法。 域就是表示对象或类相关联的变量, 属 性则实现了数据的封装和隐藏。 1、域可以简单地理解为成员变量,其主要作用是保存数据信息。域的修饰符主要有几种:10 public,internal,protected,private。 2、属性可以看作是实体特征的抽象表现。例如,一个学生的姓名、一个软件的大小、一个 班级的人数等,这些都可以作为属性来表示。属性的声明涉及两个关键字:get 和 set。 get:表示对属性的读操作。 set:表示对属性的写操作。 get { return_id }//读取 ID ========================= set { //验证输入长度小于 2 if(_id.Length&2) _id= }//将值赋给 ID 时调用 五、抽象类 面向对象编程思想试图模拟现实中的对象和关系。但是,有时候,基类并不是与具体的事物 相联系的,而是表达一种抽象的概念。抽象类就可以满足这种关系。 抽象类的声明 (1) C#中, 在 使用关键字 abstract 来定义抽象方法 (abstract method) 并需要把 abstract , 关键字放在访问级别修饰符和方法返回数据类型之前,没有方法实现的部分,格式如下: public abstract void Train(); (2)子类继承抽象父类之后,可以使用 override 关键字覆盖父类中的抽象方法,并做具体 的实现,格式如下:public override void Train() {…} 抽象方法 子类在继承了抽象父类之后,就可以具体实现其中的抽象方法了。 六、接口 接口实际上是定义了一组数据结构,通过这组数据结构,可以调用组件对象的功能。接口和 抽象类很相似。 接口的概念 接口和抽象类非常相似, 它定义了一些未实现的属性和方法。 所有继承它的类都继承这些成 员,在这个角度上,可以把接口理解为一个类的模板。 接口的声明 下面通过一个具体的例子,介绍如何在 C#中声明和使用接口。示例中有一个“形状”的概 念,它有 3 个具体的形状类:矩形、圆形、三角形。可以看出,在某种意义上,接口与抽象 类非常相似。 public interface IPict { int Deletelmage(); void Displaylmage(); } 多重接口实现11 C# 不允许多重类继承 ,但 C# 允许多重接口实现,这意味着一个类可以实现多个接口 七、方法 方法属于类的成员之一,用于执行计算或者其他的行为。 *声明方法 访问修饰符]返回类型&方法名&([参数列表]) &([参数列表 [访问修饰符]返回类型&方法名&([参数列表]) { //方法主体 //方法主体 } 访问修饰符(可选),默认情况下为 private 如果不需要返回任何值,方法可能返回 void 数据类型 *调用方法 对象名.方法名([参数列表]);return [表达式]; *静态方法 静态方法用于表示类所具有的行为,而非其对象所具有的行为。例如,学生分班这项任务, 就是全体学生集体的事情。静态方法通过在定义中使用 static 关键字来声明,static 关键 字放在修饰符和方法返回的数据类型之前,格式如下: [访问修饰符] static 返回类型 &方法名&([参数列表]) { // 方法主体 } 方法的重载 (1)有时候,对于类需要完成的同一个功能的要求可能比较复杂。例如,对学生类而言,如 果想要使其具有一个“成长”方法,但是这个方法,可能使其增长一岁,也可能增加指定的 岁数,该怎么解决这个问题呢? (2)C#使用重载技术来完成这个功能。重载是指允许存在多个同名函数,而这些函数的参数 不同(或许参数个数不同,或许参数类型不同,或许两者都不同) 。 操作符的重载 C#还提供了符号重载机制:允许重载运算符,如“+”“==”等,在原来功能的基础上,完 , 成用户自定义的功能。例如: class Rectangle{ private int iH private int iW } //重载操作符 == public static bool operator ==(Rectangle a, Rectangle b){ return ((a.Height == b.Height) && (a.Width == b.Width));} //使用重载后的操作符比较矩形 if (objRect1 == objRect2) { Console.WriteLine(&矩形 1 和矩形 2 高和宽都相等&); } 继承和多态 继承和多态是面向对象思想的两个主要的特征。12 (1)继承的本质是代码重用。当要构造一个新的类时,通常无需从零开始。例如,在学生类 的基础上,建立一个“大学生”类。很明显, “大学生”这个类具有自己的特点,如“所在 系”就并不是所有的学生都有的,而是大学生的特殊性质。 (2)可以把大学生看作是学生的一种延续,既在继承了学生的属性和方法基础之上,又包含 了新的属性或方法。 在构造大学生这个类时, 只需在学生类的基础上添加大学生特有的特性 即可,而无需从零开始,这时,称学生类为父类,大学生类为子类。 多态的含义就是 C#中允许多个方法的方法名相同,只要它们的方法签名不同就可以。方法 签名指的是方法名和方法参数列表的构造。 public static void Main() { Console.WriteLine(&hahaha&); Console.WriteLine(5); Console.WriteLine(true); } C# 是一 种强类 型语 言,它 的不 同类型 必须经 过转 换才 能进行 处理, 那么 为什 么一个 WriteLine()方法既可以输出字符串类型的常量,又可以输出整型和布尔型的常量呢?原因 就在于多态性。 修饰符 一、存取修饰符: (1)public:存取不受限制 (2)private:只有包含该成员的类可以存取 (3)internal:只有当前工程可以存取 (4)protected:只有包含该成员的类以及继承的类可以存取 二、类修饰符: (1)abstract:可以被指示一个类只能作为其他类的基类 (2)sealed:指示一个类不能被继承 三、成员修饰符: (1)abstract:指示该方法或属性没有实现 (2)const:指定域或局部变量的值不能被改动 (3)event:声明一个事件 (4)extern:指示方法在外部实现 (5)override:对由基类继承成员的新实现 (6)static:指示一个成员属于类型本身,而不是属于特定的对象 (7)virtual:指示一个方法第七章数据库开发技术用户和系统的交互过程是: 用户首先通过用户界面向系统发出数据操作的请求, 用户界面接 用户和系统的交互过程是: 收请求后传送到 ADO.NET;然后 ADO.NET 分析用户请求,并通过数据库访问接口与数据源交 互,向数据源发送 SQL 指令,并从数据源获取数据;最后,ADO.NET 将数据访问结果传回用 户界面,显示给用户。 ADO.NET 就是一系列提供数据访问服务的类。 一、ADO.NET 简介 数据访问技术 回顾微软公司的数据访问技术所走过的几个阶段, ODBC:第一个使用 SQL 语言访问不同关系数据库的数据访问技术。 DAO:提供给 Visual Basic 程序设计人员的一种简单数据访问方法,用于操纵 Access 数据 库。13 RDO:解决了 DAO 要在 ODBC 和 Access 之间切换导致性能下降问题。 OLEDB:基于 COM(Component Object Model) ,支持非关系数据的访问。 ADO:基于 OLE DB,更简单、更高级、更适合于 Visual Basic 程序设计人员。 ADO.NET:基于.NET 体系架构,优化的数据访问模型和基于 COM 的 ADO 是完全不同的数据访 问方式,最新 ADO.NET 2.0 版本在性能方面有了更进一步的提高。 System.Data 命名空间 ADO.NET 结构的类包含在 System.Data 命名空间内,根据功能划分,System.Data 空间又包 含了多个子空间。 =======空间//说明======= System.Data.Common:包含 ADO.NET 共享的类 System.Data.OleDb:包含访问 OLEDB 的数据源类 System.Data.SqlClient:包含访问 SQL Server 数据库的类 System.Data.SqlTypes:包含在 SQL Server 内部用于本机数据类型的类,这些类对其他数 据类型提供了一种更加安全、快捷的选择 System.Data.Odbc:包含访问 ODBC 数据源的类 System.Data.OracleClient:包含访问 Oracle 数据库的类二、连接数据库若要访问数据库,必须连接到数据库,本节将首先以连接 SQL Server 数据库为例进行数据 库连接技术的介绍。 1、SqlConnection 类 System.Data.SqlClient.SqlConnection 类提供对 SQL Server 数据库的连接,其常用属性 和方法 *SqlConnection 类常用的属性和方法: 属性:ConnectionString// Database// DataSoure// State// WorkstationId 方法:Open// ChangeDatabase// Close// CreateCommand// BeginTransaction 2、设置连接参数 SqlConnection 的 ConnectionString 属性指定了所要打开 SQL Server 数据库的参数,包含 源数据库名称和建立初始连接所需的其他参数。因此,在连接数据库之前,首先要构造一个 合理的连接字符串。 示例: &Persist Security Info=FUserid=pwd=database=server=(local)& 3、创建 SQL Server 连接 在构造完成 SqlConnection 对象的 ConnectionString 属性后, 便可以使用其 Open 方法连接 SQL Server 数据库了,形式如下。public virtual void Open(); 另外,也可以直接使用 SqlConnection 的构造函数,并把连接字符串作为参数来建立连接。 下面的代码同样完成数据库连接: SqlConnection myCon = new SqlConnection (&Persist Security Info=FUser id=pwd=database=server=local)&); //得到一个 SqlConnection myConn.Open(); //建立连接 4、断开 SQL Server 连接 断开 SQL Server 连接也非常简单,使用 SqlConnection 的 Close 方法即可: public virtual void Close();14 下面的示例断开了建立的 Northwind 数据库连接: myCon.Close(); //断开连接 Console.WriteLine(&{0}&,myCon.State); //输出连接状态 5、其他数据库连接 与连接 SQLServer 数据库类似, 可以使用 System.Data 中其他的类来创建其他数据库的连接, 具体包括以下 3 个类。 (1)OleDbConnection:可管理通过 OLE DB 访问的任何数据库连接; (2)OdbcConnection:可管理通过使用连接字符串或 ODBC 数据源名称(DSN)创建的数据 库连接; (3)OracleConnection:可管理 Oracle 数据库连接。 这 3 个类的使用与 SqlConnection 非常相似,不再赘述。三、与数据库交互查询数据操作可以通过多种方式来实现,其中,DBCommand 对象常表示一个 SQL 查询或者一 个存储过程,而 DataAdpater 对象常用于把一个 DBCommand 提交给数据库。 1、 使用 SqlCommand 提交增删改命令 使用 SqlCommand 执行非查询的数据操作 DBCommand 对象是一个统称,它包括以下 4 个类: (1)OleDbCommand:用于任何 OLE DB 提供程序; (2)SqlCommand:用于 SQL Server 7.0 或更高版本; (3)OdbcCommand:用于 ODBC 数据源; (4)OracleCommand:用于 Oracle 数据库。 2、使用 SqlCommand 获取查询命令 SqlCommand 可以执行数据查询操作,SqlCommand 有两种方式执行查询操作。 (1)使用自身的 ExecuteReader 和 ExecuteXmlReader 方法,获取只读的数据,并分别放入 DataReader 对象或 XmlReader 对象中。 (2) 本身只作为一条 SQL 语句或者一个存储过程, 结合后面所介绍的 DataAdapter, DataSet 实现数据查询。 3、使用 DataAdapter 提交查询命令 (1)DataAdapter 表示一组数据命令和一个数据库连接,可以向数据库提交 DBCommand 对 象所代表的 SQL 查询命令,同时获取返回的数据结果集。 (2)对于不同的数据源,ADO.NET 同样提供了多个不同的 DataAdapter 子类。本节仍以处 理 SQL Server 数据库的 SqlDataAdapter 为例进行说明,最常用的成员四、管理内存数据通过 ADO.NET 从数据库中读取的数据集,是被保存在内存中的。 1、数据集简介 (1)当完成对数据库的查询后,需要把所获取的数据保留下来,ADO.NET 使用数据集对象 在内存中缓存查询结果数据。 (2)数据集对象的结构类似于关系数据库的表,包括表示表、行和列等数据对象模型的类, 还包含为数据集定义的约束和关系。在 ADO.NET 中,可以作为数据集对象的类如下所示。 *ADO.NET 中的数据集: System -Data15 ---DataSet ---DataTable ---DataColumn ---Constraint ---DataRelation ---DataRow 内存表 DataTable 对应为数据库中的表 2、使用 DataTable 实现内存表 ADO.NET 试图模拟所有的数据库对象。首先来看对数据表的实现。数据表包括列、行、约束、 关系等,这些对象与 ADO.NET 中对象的对应关系为: (1)数据表←→DataTable; (2)数据列←→DataColumn; (3)数据行←→DataRow; (4) 约束←→Constraint; (5)关系←→DataRelation。 DataSet 对象则对应于整个数据库 3、使用 DataSet 管理数据 DataSet 是 ADO.NET 结构的主要组件,是从数据源中检索到的数据在内存中的缓存,可以包 括多个 DataTable 对象。常用的属性和方法如图所示。 *DataSet 类的常用属性和方法: 属性:DataSetName// Namespaces// Tables 方法:AcceptChanges// clear// GetChanges// GetXml// Matge 获取只读数据 4、使用 DataReader 获取只读数据 除了 DataSet, 还可以使用 DataReader 来获取数据。 可以使用 DBCommand 的 ExecuteReader 方法来获得一个只读的结果数据集;并且,在读取的过程中,数据游标只能向前移动,不能 返回。 DataSet 和 DataReader 都可以获取查询数据,那么,应如何在两者之间进行选择呢?通常 来说,下列情况下适合使用 DataSet: (1)操作结果中含多个分离的表; (2)操作来自多个源(例如来自多个数据库、XML 文件的混合数据)的数据; (3)在系统的各个层之间交换数据,或使用 XML Web 服务; (4)通过缓冲重复使用相同的行集合以提高性能(例如排序、搜索或过滤数据) ; (5)每行执行大量的处理; (6)使用 XML 操作(例如 XSLT 转换和 Xpath 查询)维护数据。第一课 MapX 的基础MapInfo 系列产品 MapInfo Professional、 MapBasic 、 MapInfo MapX 、 MapInfo MapXtreme 、 SpatialWare …… MapInfo 的数据结构 (1)&Somefile&.tab: 该文件描述 MapInfo 表的结构。 它是描述包含数据的文件格式的文本 文件。 (2)&Somefile&.dat (.mdb、.aid 或 .dbf) :这些文件包含表格数据。 (3)&Somefile&.map:该文件描述图形对象(如果该表没有任何地图对象,则该文件将不存 在) 。 (4)&Somefile&.id: 该文件是将数据与对象相链接的交叉引用文件 (如果该表没有如何地图 对象,则该文件将不存在) 。 (5)&Somefile&.ind:它是索引文件。通过该索引文件,您可以使用 Find 对象搜索地图对16 象。 组件技术与 MapX OLE( Embedding) OLE(Object Linking and Embedding)――对象链接与嵌入技术,就是满足用户在一个文 档中加入不同格式数据的需要,既解决建立复合文档的问题。比如我们在 Word 中插入一个 Excel 图表,用的都是 OLE 技术。 Model) COM (Component Object Model)――组件式对象模型,是组件之间相互接口的规范,是 OLE 的基础,其作用是使各种软件构件和应用软件能够用一种统一的标准方式进行交互。 COM 不是面向对象的语言,而是一种与源代码无关的二进制标准。 技术――ActiveX 的技术集合。ActiveX 是在 OLE 的基础上发展起来的,可以理解 ActiveX 技术 为是 OLE2.0。 控件――ActiveX 技术的主要构成,可以称为 OLE 控件或 OCX 控件(后缀名一般 ActiveX 控件 为.exe ,.dll 或者.ocx) ,是组件 (或对象) 的打包,重用于新的程序开发。 另外, ActiveX 技术还包括 ActiveX 文档和 ActiveX 脚本。 MapX 的对象模型 *MapX 主要包括以下对象: 对象, Map Layers 对象, Geoset 对象, DataSet 对象, Annotations 对象 (1)Map 对象。Map 对象是 MapX 的顶层属性,每个 Map 对象包括 DataSets、Layers、 Annotations 等主要对象的集合。 对象包括一些主要的属性, Zoom 用来设置放大级别, Map 如 Rotation 控制地图的旋转角度,CenterX 和 CenterY 用于设置地图显示窗口的中心坐标。 (2)Layers 对象。由 Features 对象组成,Features 对象又由 Feature 对象组成,Feature 对应于地图中的点、线、面以及符号等地图实体。 (3)Geoset。Geoset 是在 GeoManger 中建立的,GST 文件,类似 MapInfo 中的 WorkSpace 概念,是图层及其设置的集合,用于控制程序中显示的地图。 (4)Dataset。在 MapX 中,属性数据的操作主要通过数据绑定实现,DataSets 用于实现地 图与数据的绑定。数据绑定的数据源可以是 DAO、ADO、ODBC 数据源、RDO、MapInfo Table 文件, 还可以是一个规定了格式的文本文件。 要绑定一个数据源, 首先要指定所绑定的图层, 然后需要指定与图层中地图对象相匹配的关键字段。 ( 5 ) Annotations 。 Annotations 集 合 提 供 了 操 纵 地 图 中 文 字 和 符 号 的 简 单 方 法 。 Annotations 位于所有其他图层的上方并且不与任何数据连接。 *Geoset 管理器:.gst 文件,与 MapInfo 中的.war 文件类似。 *GeoDictionary 管理器: .dct 文件,MapX5.0 的运行不再必需该文件。 *.NET 平台上 MapX 的使用: MapX 控件的添加、MapX 控件的配置、地图数据的加载第二、三课 MapX 的图层与图元 1. 图层集合 Layers每个 Map 都是图层的集合。Layers 由 Layer 对象组成。Layers 提供从集合中添加、删除 Layer 对象的属性和方法。 表示集合中所有图层的地理范围,返回 Rectangle 对象。 (1)Layers.Bounds 属性 图层集合中 Layer 的数目,为只读属性。 (2)Layers.Count 属性 图层集合中 Layer 对象索引,起始值为 1。 (3)Layers.Item 属性 用于设置活动图层。当程序运行过程中,地图对象不 (4)Layers.AnimationLayer 属性17 断变化,则对象位于活动图层,会提高运算速度。 会 (5)Layers.InsertionLayer 属性 设定 Layers 中某图层为 InsertionLayer, 就可通过内置对象编辑工具对图层中所含的 图元进行编辑。 一个图层集合只包含一个 InsertionLayer。 需要先设定图层为可编辑状态。 Layer.Editable = True *图层集合的主要方法 创建图层对象,添加到集合中,并在地图上显示。 (1)Layers.Add 方法 Layers .Add([Layerlnfo],[Position]) 或者 Layers .Add FilePosition MapInfo 地图文件包括:地图数据和属性数据。因此,地图的加载还需要考虑属性数据的加 载绑定。 向 当 前 地 图 添 加 指 定 的 GeoSet 。 ( 2 ) Layers.AddGeosetLayers 方 法 Layers .AddGeosetLayers(GeosetName) 创建新的临时或永久 Maplnfo 表图层。 (3)Layers.CreateLayer 方法 Layers .CreateLayer(Name,[FileSpec],[Position],[KeyLength],[CoordSys]) 方法参数:Name――图层名称,FileSpec――图层文件的全路径+文件名称 Position――图层放置次序,KeyLength――字段长度,CoordSy――坐标系设置 图层控制对话框 (4)Layers.LayersDlg 方法 [Boolean=] Layers.LayersDlg([HelpFile],[HelpID]) 移动图层,更改所绘制图层的顺序。 (5)Layers.Move 方法 Layers.Move(From,TO) 从集合中删除 Layer 对象 (6)Layers.Remove 方法 Layers.Remove(Index) 从集合中删除所有 Layer 对象 (7)Layers.RemoveAll 方法2. 图层 LayerLayer 对象一般来讲, 对应于一张 MapInfo 表中的地理对象。 Layer 集合中的每一个 Layer 对象的行为独立于其他对象。 控制图层是否进行自动标注。布尔值,默认为 False。 Layer.AutoLabel 属性 返回只读的 CoordSys 对象,指出所保存图层所在的坐标系。 Layer.CoordSys 属性 绑定相关地图图层的 DataSets 集合。 Layer.DataSets 属性 该属性含有图层物理存储位置的文件的完整说明。字符串型值, Layer.FileSpec 属性 只读属性。 Layer.KeyField 属性 该属性标识在图层的 MapInfo 表中的列(字段)名称,该名称将被图元对象的 KeyValue 属性 设置或获得。默认值为图层表中的第一列。 Layer.OverrideStyle 属性 控制 Style 属性,用 Style 属性控制是否替代地图图元的样式。布尔值,默认为 False。 属性(Layer 对象) Layer.Style 属性(Layer 对象) 所用的样式对象替代地图图层中所有图元的外观。返回 Style 对象并用新的替代值进行填 充。当 Override 属性设置为 True 时,该样式可以使用。 Layer.Type 属性 Layer 对象 返回 Layer 对象的类型,对应于 LayerTypeConstants 常数之一的整数。只读属性。 ? miLayerTypeNormal=0 ? miLayerTypeRaster=218 ? miLayerTypeSeamless=4 ? miLayerTypeUnknown=5 ? miLayerTypeUserDraw=6 ? miLayerTypeDrilldown = 7 属性(Layer 对象) Layer.PredominantFretureType 属性(Layer 对象) 用来确定图层中最常见的图元类型。返回表示 FeatureTypeConstants 常数之一的整数,只 读属性 。 控制图层是否可用选择工具进行选择。 Layer.Selectable 属性 对象) Layer.Selection 属性(Layer 对象) 被选择的图层图元的集合,是特殊的 Features 集合。 控制图层是否可见。布尔值,默认为 True。 Layer.Visible 属性 属性(Layer 对象) Layer.ZoomLayer 属性(Layer 对象) 控制图层是否进行图层缩放,控制缩放级别范围(地图上的距离),以决定哪个图层显示。该 属性为布尔值,默认为 False。 Layer.ZoomMax 属性 & Layer.ZoomMin 属性 如图层缩放开启(Layer. ZoomLayer 属性), 则该属性指定可在地图上绘制该图层的最大 (最 小)放级别值。指定用地图单位(Map.MapUnit)表示的距离,类型为双精度值。 Layer―― ――方法 *图层 Layer――方法 从图层返回带所有图元的图元对象。 Layer.AllFeatures 方法 [Features=]Layer.AllFeatures() 用源对象图元的属性创建并返回新的图元。 Layer.AddFeature 方法 Layer.AddFeature(Source,[RowValues]) 方法(Layer 对象) 从图层中删除图元和其对应的数据库中的行。 Layer.DeleteFeature 方法(Layer 对象) Layer.DeleteFeature(FeatureKey) Layer.SearchAtPoint 方法 Layer.SearchWithinDistance 方法 Layer.SearchWithinFeature 方法 Layer.SearchWithinRectangle 方法 Layer.Search 方法 使用 SQL 查询的功能。表达式(语句的“where-子句”部分)对 Layers 表中的每一行进行分 析,然后返回所有符合条件的 Features 集合。 [Features=] Layer.Search(strWhere) Layer.FeatureIDFromFeatureName 方法 Layer.FeatureKeyFromFeatureName 方法 *Layer.GetFeatureByID 方法 *Layer.GetFeatureByKey 方法 用于刷新图层的缓存。 Layer.Refresh 方法 Layer.UpdateFeature 方法 更新图层中的目标图元使其获得源图元的属性。该方法用于对象编辑。 Layer.UpdateFeature(FeatureKey,[Source],[RowValues])3. LayerInfo 对象Layerlnfo 对象保存传递给 Layers.Add 方法的参数。 Layerlnfo.Type 属性 包括了添加文件各种常量类型。 miLayerlnfoTypeTab ――添加 tab 文件 miLayerlnfoTypeRaster ――添加栅格文件19 miLayerlnfoTypeShape――添加 shp 文件 …… Layerlnfo.Parameter 属性 FileSpec――要添加的文件说明。 Name――要添加的图层的名称 。 AutoCreateDataset――是否添加 miDatasetLayer 类型的数据集。 值为 0(默认值), 不添加; 为 1,添加。 DatasetName――添加的数据集名称。 … … Layerlnfo.AddParameter 方法 添加所需的参数设置。必要参数由 LayerInfo 对象的 Layerlnfo.Type 属性确定。 Layerlnfo.AddParameter(Name,Value)图元、图元集合、 4. 图元、图元集合、Selection独立图元 图元对象不依附于任何图层, 不能被添加到任何集合中, 而且只有用于定义图元的方法和属 性可以被使用,而其他的属性、方法禁止使用。 图层图元 图元对象隶属于某个图层,图元与地图的坐标系相关联。图元的属性、方法都可以在图层图 元上使用。 图元集合: 4-1. 图元集合:Features 的主要属性 Features.Bounds 属性 返回代表对象地理图元范围(其最小矩形区域)的 Rectangle 对象 。 集合中的项目数。 Features.Count 属性 返回来自集合的 Feature 对象。 Features.Item 属性 例如: Features.Item(i) 图元集合: 4-1. 图元集合:Features 的主要方法 Features.Add 方法 向图元集合中添加图元或图元集合 。添加的图元对象必须属于同一图层。 Features.Add (Source) 方法(Features 集合) Features.AddByID 方法(Features 集合) 用指定的 FeatureKey 向 Features 集合添加 Feature 对象。 Features.AddByID(FeatureKey) 将集合复制为另一个 Features 集合对象。 Features.Clone 方法 Features.Clone (Source) Features.Common 方法 使该集合与另一个 Features 相结合,使得该集合只含有二者兼有的图元。 Features.Common(source) 用 Feature 对象或 Features 对象替换集合的内容。 Features.Replace 方法 Features.Replace(source) source 表示图元对象或图元集合,它将替换“图元”的内容。 Features.Remove 方法 从集合的 Features 对象中删除图元对象或图元集合。Features.Remove(source) 其中,Source 为 Feature 或 Features 从集合的 Features 对象中删除指定 FeatureKey 的图元对象。 Features.RemoveByID 方法 Features. RemoveByID(FeatureKey ) 4-2. Selection 对象20 Selection 也是 Feature 对象的集合。对于图元的操作,通常会先选定需要进行各种 操作的若干图元,即将所选的若干图元对象放入 Selection ,然后再进行添加、修改、删 除等操作。 的属性主要有: Selection 的属性主要有: Selection.Count 、Selection.Item 的方法主要有: Selection 的方法主要有: Selection.Add 方法、Selection.ClearSelection 方法、Selection.Clone 方法、 Selection.Common 方法、Selection.Remove 方法、Selection.Replace 方法 、 Selection.SelectAll 、Selection.SelectBylD(FeatureID,Flag) 、 Selection.SelectByPoint(X,Y,Flag) 、Selection.SelectByRadius(X,Y,Radius, Flag) Selection.SelectByRectangle(Xl,Y1,X2,Y2,Flag) 、 Selection.SelectByRegion(Layer,FeatureKey,Flag) 参数 Flag 控制被选对象是否向当前选择结果添加、从当前选择结果删除或代替选择结果对 象。取自 SelectionTypeConstants 的值。 SelectionTypeConstants miSelectionNew = 0、miSelectionAppend = 1、miSelectionRemove = 2 图元对象: 4-3. 图元对象:Feature 对象的主要属性 属性// 描述// 代码示例// 属性// 描述// 代码示例// (1)CenterX :图元在 X 轴方向的中心 ftr.CenterX (2) CenterY :图元在 Y 轴方向的中心 ftr.CenterY (3)Name:包含图元名称。 ftr.name (4)FeatureID:返回图元 ID。图层中的每个图元在每个图层中包含唯一 ID,为整数值。 ftr.FeatureID (5)FeatureKey:返回图元的 ID。图层中的每个图元在图层中包含唯一 ID。为只读的字符 串值。 ftr.FeatureKey (6)Length:图元长度( 限于线形图元) ftr.Length (7)Perimeter:长度指图元的周长(限于区域图元) ftr.Perimeter (8)Type:图元(点、线等)类型 ftr.Type = miFeatureTypeLine (9)Nodes:得到图元对象的节点数据 ftr.Nodes (10)Parts:返回 Parts 对象,只读属性。只对 Lines 或 Regions 有效。 ftr.Parts 图元对象: 4-3. 图元对象:Feature 对象的主要方法 将独立图元附加到地图上,使其隶属于地图的坐标系。 (1)Feature.Attach 方法 Feature.Attach(Map) 复制图元,产生新的独立图元。 (2)Feature.Clone 方法 [=Feature]Feature.Clone 移动图元(相对于图元的当前位置) 。 (3)Feature.Offset 方法 Feature.Offset(x,y) 例如:ftr.Offset 10,10 更新图元,是图元的更改生效。 (4)Feature.Update 方法 Feature.Update5. FeatureFactory 对象FeatureFactory 对象主要提供创建和操作图元的各种方法。 (1)创建缓冲区 FeatureFactory.BufferFeatures21 返回代表缓冲区域的独立 Feature 对象。 FeatureFactory.BufferFeatures(Source,Distance, [Units],[Resolution]) (2)组合图元 FeatureFactory.CombineFeatures 返回独立的 Feature 对象,表示多个线图元或多个区域图元的组合(联合)。 FeatureFactory.CombineFeatures(feature1 [,feature2] ) 如果 feature1 是 Features 集合, 那么 feature2 参数为可选。 如果 feature1 是 Feature 对象,那么 feature2 参数必需。 注意:不能让线图元与区域图元结合。 FeatureFactory.CreateLine――创建线图元 FeatureFactory.CreateRegion――创建多边形区域图元 FeatureFactory.CreateArc 方法――创建弧线图元 FeatureFactory.CreateText 方法(FeatureFactory 对象) ――创建弧线图元 (3)FeatureFactory.EraseFeature 方法 通 过 从 一 个 图 元 中 “ 清 除 ” 另 一 个 图 元 的 面 积 而 返 回 独 立 的 Feature 对 象 。 FeatureFactory.EraseFeature(SourceFeature,EraserFeature) 上式中,SourceFeature 对象,想要清除的部分;它可能是线图元或区域图元。 EraserFeature 对象,代表要从 SourceFeature 擦除的区域。它必须为区域图元。 (4)FeatureFactory.IntersectFeatures 方法 返回独立图元,代表多个图元的交集。 FeatureFactory.IntersectFeatures(feature1,[feature2]) 注意: 不能对点或文本图元使用此方法。只支持下列图元类型的组合: 1、区域重叠,返回的图元也是区域。 2、区域与线相交。假设该区域至少覆盖线的一部分,返回的交集为线上被该区 域覆盖的部分。 3、可以让线与其它线相交。如果两条线交叉,IntersectFeatures 将返回带一个点的折线 图元。 4、当两个图元不相交时,方法返回的值为没有点的折线图元,这样的图元不能被插入图层。 (5)FeatureFactory.IntersectionPoints 方法 返回含有两个图元交点的 Points 集合。 FeatureFactory.IntersectionPoints(feature1,feature2,[flag]) (6)FeatureFactory.IntersectionTest 方法 返回布尔值,表示两个图元是否相交。 FeatureFactory.IntersectionTest(featrue1,feature2,[flag])第四章 MapX 的数据绑定数据绑定是将数据源中的数据导入 MapX 的过程。MapX 可以绑定多种不同类型的数据 源。并将数据显示为显示为 Dataset 对象。 **系统中常见的数据源类型 系统中常见的数据源类型: **系统中常见的数据源类型: ODBC( Connectivity) :开放数据库互连 (1)ODBC(Open DataBase Connectivity) 开放数据库互连 : 早期的数据库连接困难,每个数据库的格式都不一样,开发者要对所开发的每种数据库的底 层 API 有深刻的了解。因此,能处理各种数据库的通用 API 就应运而生,即 ODBC。ODBC 是 在创建通用 API 的早期产物,有许多种数据库遵从了这种标准,而被称为 ODBC 兼容的数据 库。ODBC 是 Microsoft 推出的一种开放对的工业标准,数据库接口技术,它独立于数据库 厂商。MapX 可以通过 ODBC 从任意的 ODBC 数据源读取数据进行邦定。实际操作中,系统使22 用 ODBC 数据源,需要事先配置,一般在控制面板中的进行配置。 :对象链接和嵌入数据库 (2)OLEDB (OLE DataBase ) 对象链接和嵌入数据库 : OLEDB 是一个基于 COM 的数据存储对象, 提供对各种类型数据的操作。OLEDB 是建立在 ODBC 功能之上的一个开放规范。ODBC 是为访问关系型数据库而专门开发的,OLEDB 则用于访问 关系型和非关系型信息源,位于 ODBC 层与应用程序之间。 DAO( Objects) :数据访问对象 (3)DAO(Data Access Objects) 数据访问对象 : DAO 提供了一种通过程序代码创建和操纵数据库的机制。 它包括了用于访问数据的集合、 对 象、方法和属性,利用对象集合来处理数据库、表和索引等。 VB 中,DAO 模型是 Microsoft Jet 数据库引擎的面向对象借口,一分层的结构来组织数据 访问对象类,使用这些类来定义数据访问对象。 通过 DAO 技术可以访问从文本文件到大型后台数据库等多种数据格式。 ADO( (4)ADO( ActiveX Data Objects ) ActiveX 数据对象 : ADO 是 DAO 的后继产物, 微软新的数据访问技术。 ADO 实际是一种提供访问各种数据类型 的连接机制,它位于系统结构的上层,通过下层的 ODBC 或者 OLEDB 来访问数据源。 ADO 不同于 DAO,不是 DAO 的层次模型,而是平面模型,即对象之间是平级的。 ADO 的 3 个主要对象是:Connection、Recordset、Command。 每个 Connection 定义与数据源的连接, Recordset 对象接收数据, Command 完成对数据的 各种操作。 MapInfo 表数据 MapInfo 表中除了空间数据,还有属性信息,其属性信息存放于.DAT 文件中,可以通 过绑定 MapInfo 表,向数据集添加数据。MapX 的数据集合 DataSets每一幅地图都有 DataSets 集合。DataSets 集合包含用于从集合中添加和删除 DataSet 对象 的方法和属性。 的主要属性包括: DataSets 的主要属性包括: (1)DataSets.Count 属性 (2)DataSets.Item 属性 的主要方法包括: DataSets 的主要方法包括: (1)DataSets.Add 方法 DataSets.Add ( Type, SourceData, [Name], [Geofield], [SecondaryGeofield], [BindLayer], [Fields], [Dynamic] ) Type――添加的数据集类型取 DatasetTypeConstants 值。 SourceData――数据的参考对象,随源数据类型不同而不同。 Name――标识数据集的字符串。默认使用 DataSet+N 形式的名称。 DatasetTypeConstants: (2)DatasetTypeConstants: miDataSetDAO = 1 miDataSetODBC = 2 miDataSetUnbound = 3 miDataSetGlobalHandle = 4 miDataSetOLEData = 5 miDataSetLayer = 6 miDataSetNotesView = 7 miDataSetNotesQuery = 8 miDataSetSafeArray = 9 …… (a)Geofield:含有地理信息的列名或列索引。可选参数,如果不指定,MapX 将在所有字段 中搜索与在 GeoDictionary 中所提供项相匹配的列。 (b)SecondaryGeofield:含有次地理信息的列名或列索引。23 (c)BindLayer:用来指定连接此数据的地图图层 ,可选参数,如果不指定,MapX 将在相连 接的 GeoDictionary 中搜索图层。 (d)Fields : 字段对象用来描述要从数据源引入的字段, 当数据源有不止一项记录匹配特定 的地图图元时,还要描述所要用的聚集函数。可选参数,默认将引入所有列,如果每个图元 的记录不止一项,那么将数据值求和。 (e)Dynamic:控制数据绑定是否为动态的布尔值。可选;如果省略,默认为 False。 (3)DataSets.Restore 方法 恢复已经用 OLE 序列保存为文件的数据集。 [ Dataset = ] DataSets.Restore( Name, SourceData ) Name――字符型参数。是要恢复的数据集的名称;它应该是地图序列化后存在的数据集名。 SourceData――应该与向原 DataSets.Add 添加存储的 DataSet 时的参数相同。该数据源被 用来恢复数据集的内容。 (4)DataSets. Remove 方法 从 DataSet 集合中删除指定的 DataSet 对象。 如果删除其中一项, 集合索引将重新编号以填 充因删除项而留下的空缺。 DataSets.Remove(index) 从集合中删除所有 Dataset 对象。 (5)DataSets.RemoveAll 方法 DataSets.RemoveAll*数据集 DataSetDataset 对象是将数据源中的数据绑定到 MapX 上的结果。 它含有绑定数据的地图图层图元 的计算值。 对象的主要要属性包括: *Dataset 对象的主要要属性包括: 数据集的 Fields 集合。 (1)DataSet.Fields 属性 ( 2 ) DataSet.SourceRows 属 性 含 有 匹 配 源 数 据 中 指 定 行 的 行 列 表 的 Dataset 的 SourceRows 集合。 (3)DataSet.RowCount 属性 绑定该数据集的 Layer 对象。 (4)DataSet.Layer 属性 (5)DataSet.GeoField 属性 Fields 集合中的地理关键值列的列数。此属性为整型值, 只读。 (6)DataSet.SecondaryGeoField 属性 (7)DataSet.Type 属性 Dataset 类型的只读属性。属性值为 DatasetTypeConstants 常数值之一。 (8)Dataset.ReadOnly 属性 该只读属性指示数据集是否可以更新。 当前, 只有 miDatasetLayer 型的数据集是可更新的。 数据集用 RowValues 集合中的 Layers.UpdateFeature 或 Feature.Update 来更新。 数据集包含的专题属性 (9)DataSet.Themes 属性 **DataSet 的主要方法包括: **DataSet 的主要方法包括: (1)DataSet.AddField 方法 此方法可以使得向数据集添加含有函数、 操作符和数据集字段(只来自当前数据集)的表达式 的字段(“列”)。 DataSet.AddField(Name,Expression) Name――新字段的字段名 Expression――新创建的表达式。 注意:新字段的类型可以是 miTypeNumeric 或 miTypeString,取决于表达式的返回类型。 (2)Dataset.RowValues 方法24 确定行值,长整型的行 ID、字符型的系列关键词,或关键词所在的图元对象。 [RowValues=] Dataset.RowValues(Row) Row――可为 FeatureID(整型)、FeatureKey(字符型),或 Feature 对象。 得到数据集中指定行和列的值。 (3)DataSet.Value 方法 [value =] DataSet.Value (Row, Column) Row――可为 FeatureID(整型)、FeatureKey(字符型),或 Feature 对象。 Column――列名或索引。 强制从数据源重读数据。 (4)DataSet.Refresh 方法专题图的专题地图功能包括: MapInfo 的专题地图功能包括: 变量专题图: 单变量专题图:独立值图、范围图、点密度图、等级符号图 多变量专题图: 多变量专题图:饼图、直方图 独立值专题图 独立值专题图可以用不同的颜色、 符号和现行来表达多个不同的变量数据。 它主要用来强调 数据的类型差异,而不是显示定量信息。 MapInfo 最多允许显示 255 个独立值。 范围专题图 按照设置的范围显示数据,用颜色和图案渲染范围,通过点、线和区域来说明数值,主要用 来反映数值和地理区域的关系,或显示比率信息。 MapX 专题类型常量的定义 类型// 类型// 描述 miThemeRanged 范围专题 miThemeBarChart miThemeBarChart 直方图专题 miThemePieChart 饼图专题 miThemeGradSymbol 等级符号专题 miThemeDotDensity 点密度专题 miThemeIndividualValue 独立值专题 miThemeAuto 默认专题 miThemeNone 无专题图类型Themes 和 Theme 对象在 MapX 中,Themes 集合和 Theme 对象实现对专题图的支持。每个 DataSet 都有 Themes (DataSet.Themes)集合。Theme 集合有一些方法和属性用来从集合中添加和删除 Theme 对 象。 创建专题图所用的数据来自数据集 DataSet 的 Field 对象或 Field 集合。 这些字段作为 Themes 集合的 Themes.Add 方法的 Fields 参数来传递。 Theme 对象的主要属性 (1)Theme.AutoReCompute 控制专题范围的重新计算。布尔型属性,默认为 TRUE。 (1)Theme.AutoReCompute (2)Theme.ComputeTheme (2)Theme.ComputeTheme 控制专题是否通过来自表中的数据计算。布尔型值,默认为 True。如果为 True 值将通过原 始数据计算专题; 如果为 False,那么将创建不可见的 Theme 对象。25 (3)Theme.DataMax (3)Theme.DataMax (4)Theme.DataMin 确定最大/小值,以便设置专题范围。 (4)Theme.DataMin (5)Theme.ThemeProperties 专题地图的类型 (5)Theme.ThemeProperties **Theme **Theme 对象的主要方法 (1)Theme.ThemeDlg (1)Theme.ThemeDlg 方法 显示存取对话框, 使用户可以调整 Theme 的样式。 所显示的特定对话框与 Theme 对象的类 型相匹配(范围、点密度、饼图、直方图、独立值或等级符号)。 (Boolean=]OBJECT.ThemeDlg([HelpFile),[HelpID]) 单击确定时,ThemeDlg 的返回值为 True;单击取消时,返回值为 False。 (2)Themes.Add (2)Themes.Add 方法 创建专题并将其添加到特定数据集的 Themes 集合中。 Themes.Add([Type],[Field],[Name],[ComputeTheme]) Type――指定要专题地图类型。 ThemeTypeConstants 值。 取 默认为 miThemeAuto, 那么 MapX 将根据接受的 字段数量和已显示的其它专题类型来选择合适的默认类型。 如果 MapX 无法选 择默认专题类型,将产生错误。 Field――指定创建专题地图的 Field 或 Fields。默认使用 DataSet 的第一个数值字段。 Name――指定专题地图名称。 ComputeTheme――布尔型。默认值为 True,计算来自表数据的专题。如果为 False,将创建 不可见的专题对象。 (3)Themes.Remove 从 Themes 集合中移除指定的 Theme 对象。 (3)Themes.Remove 方法 Themes.Remove(indeX) (4)Themes.RemoveAll 从集合中移除所有的 Theme 对象。 (4)Themes.RemoveAll 方法26
用MapX与C#开发地理信息系统_IT/计算机_专业资料。利用C#采用Mapinfo控件开发GIS程序...进行二次封装,实现地理信息系统的大部分功能,从而从整体上把握地理信 息系统的...1) 二次开发工具 MapBasic 2) MapInfo Proserver 3) MapInfo MapX 4) Maplnfo...GIS知识点整理及复习 9页 1下载券
GIS复习资料整理版 15页 3下载券 ©...开发GIS 应用简明教程关于 C#开发 GIS 应用简明教程的说明 Web 上的 GIS,我个人觉得 C#+MAPX 并不是一个好的解决办法,因为有许多的 GIS 工具更适合 于 WEB ...
All rights reserved Powered by
www.tceic.com
copyright &copyright 。文档资料库内容来自网络,如有侵犯请联系客服。

我要回帖

更多关于 oracle数据库基本语句 的文章

 

随机推荐