• linux 共享内存浅析

    要使用共享内存,应该有如下步骤: 1.开辟一块共享内存 shmget() 2.允许本进程使用共某块共享内存 shmat() 3.写入/读出 4.禁止本进程使用这块共享内存 shmdt() 5.删除这块共享内存 shmctl()或者命令行下ipcrm ftok()。它有两个参数,一个是字符串,一个是字符。字符串一般用当前进程的程序名,字符一般用来标记这个标识符所标识的共享内存是这个进程所开辟的第几个共享内存。ftok()会返回一个key_t型的值,也就是计算出来的标识符的值。 shmkey = ftok( "mcut" , 'a' ); // 计算标识符 操作共享内存,我们用到了下面的函数 #include <sys/types.h> #include <sys/ipc.h> #include <sys/shm.h> int shmget( key_t shmkey , int shmsiz , int flag ); void *shmat( int shmid , char *shmaddr , int shmflag ); int shmdt( char *shmaddr ); shmget()是用来开辟/指向一块共享内存的函数。参数定义如下: key_t shmkey 是这块共享内存的标识符。如果是父子关系的进程间通信的话,这个标识符用IPC_PRIVATE来代替。但是刚才我们的两个进程没有任何关系,所以就用ftok()算出来一个标识符使用了。 int shmsiz 是这块内存的大小. int flag 是这块内存的模式(mode)以及权限标识。 模式可取如下值: 新建:IPC_CREAT 使用已开辟的内存:IPC_ALLOC 如果标识符以存在,则返回错误值:IPC_EXCL 然后将“模式” 和“权限标识”进行“或”运算,做为第三个参数。 如: IPC_CREAT | IPC_EXCL | 0666 这个函数成功时返回共享内存的ID,失败时返回-1。 // shmid开辟共享内存 shmid = shmget( shmkey , sizeof(in_data) , IPC_CREAT | 0666 ) ; shmat()是用来允许本进程访问一块共享内存的函数。 int shmid是那块共享内存的ID。 char *shmaddr是共享内存的起始地址 int shmflag是本进程对该内存的操作模式。如果是SHM_RDONLY的话,就是只读模式。其它的是读写模式 成功时,这个函数返回共享内存的起始地址。失败时返回-1。 char *head , *pos , head = pos = shmat( shmid , 0 , 0 ); // 允许本进程使用这块共享内存 shmdt()与shmat()相反,是用来禁止本进程访问一块共享内存的函数。 参数char *shmaddr是那块共享内存的起始地址。 成功时返回0。失败时返回-1。 shmdt( head ); // 禁止本进程使用这块内存 此外,还有一个用来控制共享内存的shmctl()函数如下: #include <sys/types.h> #include <sys/ipc.h> #include <sys/shm.h> int shmctl( int shmid , int cmd , struct shmid_ds *buf ); int shmid是共享内存的ID。 int cmd是控制命令,可取值如下: IPC_STAT 得到共享内存的状态 IPC_SET 改变共享内存的状态 IPC_RMID 删除共享内存 struct shmid_ds *buf是一个结构体指针。IPC_STAT的时候,取得的状态放在这个结构体中。如果要改变共享内存的状态,用这个结构体指定。 返回值: 成功:0 失败:-1 shmctl(shmid,IPC_RMID,NULL); 刚才我们的mpaste.c程序中还可以加入这样几句。 struct shmid_ds buf; ... ... shmctl( shmid , IPC_STAT , &buf ); // 取得共享内存的状态 ... ... shmctl( shmid , IPC_RMID , &buf ); // 删除共享内存 注意:在使用共享内存,结束程序退出后。如果你没在程序中用shmctl()删除共享内存的话,一定要在命令行下用ipcrm命令删除这块共享内存。你要是不管的话,它就一直在那儿放着了。 简单解释一下ipcs命令和ipcrm命令。 取得ipc信息: ipcs [-m|-q|-s] -m 输出有关共享内存(shared memory)的信息 -q 输出有关信息队列(message queue)的信息 -s 输出有关“遮断器”(semaphore)的信息 %ipcs -m 删除ipc ipcrm -m|-q|-s shm_id %ipcrm -m 105 例如,我们在以0x12345678为KEY创建了一个共享内存,可以直接使用ipcrm -M 0x12345678来删除共享内存区域。

    4
    409
    3KB
    2010-09-03
    32
  • Linux /Unix 共享内存

    共享内存是系统出于多个进程之间通讯的考虑,而预留的的一块内存区。在/proc/sys/kernel/目录下,记录着共享内存的一些限制,如一个共享内存区的最大字节数shmmax,系统范围内最大共享内存区标识符数shmmni等,可以手工对其调整,但不推荐这样做。 一、应用 共享内存的使用,主要有以下几个API:ftok()、shmget()、shmat()、shmdt()及shmctl()。 1)用ftok()函数获得一个ID号. 应用说明: 在IPC中,我们经常用用key_t的值来创建或者打开信号量,共享内存和消息队列。 函数原型: key_t ftok(const char *pathname, int proj_id); Keys: 1)pathname一定要在系统中存在并且进程能够访问的 3)proj_id是一个1-255之间的一个整数值,典型的值是一个ASCII值。 当成功执行的时候,一个key_t值将会被返回,否则-1被返回。我们可以使用strerror(errno)来确定具体的错误信息。 考虑到应用系统可能在不同的主机上应用,可以直接定义一个key,而不用ftok获得: #define IPCKEY 0x344378 2)shmget()用来开辟/指向一块共享内存的函数 应用说明: shmget()用来获得共享内存区域的ID,如果不存在指定的共享区域就创建相应的区域。 函数原型: int shmget(key_t key, size_t size, int shmflg); key_t key 是这块共享内存的标识符。如果是父子关系的进程间通信的话,这个标识符用IPC_PRIVATE来代替。如果两个进程没有任何关系,所以就用ftok()算出来一个标识符(或者自己定义一个)使用了。 int size 是这块内存的大小. int flag 是这块内存的模式(mode)以及权限标识。 模式可取如下值: IPC_CREAT 新建(如果已创建则返回目前共享内存的id) IPC_EXCL 与IPC_CREAT结合使用,如果已创建则则返回错误 然后将“模式” 和“权限标识”进行“或”运算,做为第三个参数。 如: IPC_CREAT | IPC_EXCL | 0640 例子中的0666为权限标识,4/2/1 分别表示读/写/执行3种权限,第一个0是UID,第一个6(4+2)表示拥有者的权限,第二个4表示同组权限,第3个0表示他人的权限。 这个函数成功时返回共享内存的ID,失败时返回-1。 关于这个函数,要多说两句。 创建共享内存时,shmflg参数至少需要 IPC_CREAT | 权限标识,如果只有IPC_CREAT 则申请的地址都是k=0xffffffff,不能使用; 获取已创建的共享内存时,shmflg不要用IPC_CREAT(只能用创建共享内存时的权限标识,如0640),否则在某些情况下,比如用ipcrm删除共享内存后,用该函数并用IPC_CREAT参数获取一次共享内存(当然,获取失败),则即使再次创建共享内存也不能成功,此时必须更改key来重建共享内存。 3) shmat()将这个内存区映射到本进程的虚拟地址空间。 函数原型: void *shmat( int shmid , char *shmaddr , int shmflag ); shmat()是用来允许本进程访问一块共享内存的函数。 int shmid是那块共享内存的ID。 char *shmaddr是共享内存的起始地址,如果shmaddr为0,内核会把共享内存映像到调用进程的地址空间中选定位置;如果shmaddr不为0,内核会把共享内存映像到shmaddr指定的位置。所以一般把shmaddr设为0。 int shmflag是本进程对该内存的操作模式。如果是SHM_RDONLY的话,就是只读模式。其它的是读写模式 成功时,这个函数返回共享内存的起始地址。失败时返回-1。 4) shmdt()函数删除本进程对这块内存的使用,shmdt()与shmat()相反,是用来禁止本进程访问一块共享内存的函数。 函数原型: int shmdt( char *shmaddr ); 参数char *shmaddr是那块共享内存的起始地址。 成功时返回0。失败时返回-1。 5) shmctl() 控制对这块共享内存的使用 函数原型: int shmctl( int shmid , int cmd , struct shmid_ds *buf ); int shmid是共享内存的ID。 int cmd是控制命令,可取值如下: IPC_STAT 得到共享内存的状态 IPC_SET 改变共享内存的状态 IPC_RMID 删除共享内存 struct shmid_ds *buf是一个结构体指针。IPC_STAT的时候,取得的状态放在这个结构体中。如果要改变共享内存的状态,用这个结构体指定。 返回值: 成功:0 失败:-1

    5
    440
    22KB
    2010-08-19
    19
  • make和Makefile详解 一起写Makefile

    Make命令   在make命令后不仅可以出现宏定义,还可以跟其他命令行参数,这些参数指定了需要编译的目标文件。其标准形式为:   target1 [target2 …]:[:][dependent1 …][;commands][#…]   [(tab) commands][#…]   方括号中间的部分表示可选项。Targets和dependents当中可以包含字符、数字、句点和"/"符号。除了引用,commands中不能含有"#",也不允许换行。   在通常的情况下命令行参数中只含有一个冒号":",此时command序列通常和makefile文件中某些定义文件间依赖关系的描述行有关。如果与目标相关连的那些描述行指定了相关的command序列,那么就执行这些相关的command命令,即使在分号和(tab)后面的aommand字段甚至有可能是NULL。如果那些与目标相关连的行没有指定command,那么将调用系统默认的目标文件生成规则。   如果命令行参数中含有两个冒号"::",则此时的command序列也许会和makefile中所有描述文件依赖关系的行有关。此时将执行那些与目标相关连的描述行所指向的相关命令。同时还将执行build-in规则。   如果在执行command命令时返回了一个非"0"的出错信号,例如makefile文件中出现了错误的目标文件名或者出现了以连字符打头的命令字符串,make操作一般会就此终止,但如果make后带有"-i"参数,则make将忽略此类出错信号。   Make命本身可带有四种参数:标志、宏定义、描述文件名和目标文件名。其标准形式为:   Make [flags] [macro definitions] [targets]   Unix系统下标志位flags选项及其含义为:   -f file  指定file文件为描述文件,如果file参数为"-"符,那么描述文件指向标准输入。如果没有"-f"参数,则系统将默认当前目录下名为makefile或者名为Makefile的文件为描述文件。在linux中, GNU make 工具在当前工作目录中按照GNUmakefile、makefile、Makefile的顺序搜索 makefile文件。   -i   忽略命令执行返回的出错信息。   -s   沉默模式,在执行之前不输出相应的命令行信息。   -r   禁止使用build-in规则。   -n   非执行模式,输出所有执行命令,但并不执行。   -t   更新目标文件。   -q   make操作将根据目标文件是否已经更新返回"0"或非"0"的状态信息。   -p   输出所有宏定义和目标文件描述。   -d   Debug模式,输出有关文件和检测时间的详细信息。   linux下make标志位的常用选项与Unix系统中稍有不同,下面我们只列出了不同部分:   -c dir   在读取 makefile 之前改变到指定的目录dir。   -I dir   当包含其他 makefile文件时,利用该选项指定搜索目录。   -h   help文挡,显示所有的make选项。   -w   在处理 makefile 之前和之后,都显示工作目录。   通过命令行参数中的target ,可指定make要编译的目标,并且允许同时定义编译多个目标,操作时按照从左向右的顺序依次编译target选项中指定的目标文件。如果命令行中没有指定目标,则系统默认target指向描述文件中第一个目标文件。

    4
    1313
    191KB
    2010-07-23
    48
  • OCCI接口和SQL语句的组装.pdf

    OCCI 接口 SQL语句 组装 OCCI接口和SQL语句的组装 .pdf

    4
    53
    996KB
    2010-06-09
    10
  • OCCI开发Oracle9i数据库应用程序.pdf

    OCCI开发Oracle9i数据库应用程序.pdf

    3
    69
    650KB
    2010-06-04
    2
  • Orcle的SQLplus语句详解.doc

    目 录 运行环境SQL*Plus 常用命令 通过查询检索数据 插入、更新和删除数据库记录 提交和回退事务处理 运行环境SQL*Plus

    5
    115
    7.14MB
    2010-06-04
    9
  • JQUERY 中文API

    jQuery 核心函数 jQuery(expr, [context]) jQuery(html, [ownerDoc]) jQuery(html, props) jQuery(elements) jQuery() jQuery(callback) jQuery 对象访问 each(callback) size() length selector context get() get(index) index(subject) 数据缓存 data([name] , [value]) data(obj) removeData(name) $.data([el], [key], [val]) 队列控制 queue(name ,[cb|queue]) dequeue(name) clearQueue([queueName]) 插件机制 jQuery.fn.extend(object) jQuery.extend(object) 多库共存 jQuery.noConflict([ex]) 属性 属性 attr(name) attr(properties) attr(key, value) attr(key, fn) removeAttr(name) CSS 类 addClass(class | fn) removeClass([class | fn]) toggleClass(class|fn [, sw]) HTML代码/文本/值 html( [val | fn] ) text( [val | fn] ) val( [val | fn | arr] ) CSS CSS css(name) css(properties) css(name, value | fn) 位置 offset([coordinates]) position() scrollTop( [val] ) scrollLeft( [val] ) 尺寸 height( [val] ) width( [val] ) innerHeight() innerWidth() outerHeight(options) outerWidth(options) 选择器 基本 #id element .class * selector1,selector2,selectorN 层级 ancestor descendant parent > child prev + next prev ~ siblings 基本 :first :last :not :even :odd :eq :gt :lt :header :animated 内容 :contains :empty :has :parent 可见性 :hidden :visible 属性 [attribute] [attribute=value] [attribute!=value] [attribute^=value] [attribute$=value] [attribute*=value] [attrSel1][attrSel2][attrSelN] 子元素 :nth-child :first-child :last-child :only-child 表单 :input :text :password :radio :checkbox :submit :image :reset :button :file :hidden 表单对象属性 :enabled :disabled :checked :selected 文档处理 内部插入 append(content | fn) appendTo(content) prepend(content | fn) prependTo(content) 外部插入 after(content | fn) before(content | fn) insertAfter(content) insertBefore(content) 包裹 wrap(html) wrap(elem) wrap(fn) unwrap() wrapAll(html) wrapAll(elem) wrapInner(html) wrapInner(elem) wrapInner(fn) 替换 replaceWith(content) replaceAll(selector) 删除 empty() remove([expr]) detach([expr]) 复制 clone() clone(true) 筛选 过滤 eq(index) first() last() hasClass(class) filter(expr | fn) is(expr) map(callback) has(expr) not(expr) slice(start, [end]) 查找 children([expr]) closest([expr]) find(expr) next([expr]) nextAll([expr]) nextUntil([expr]) offsetParent() parent([expr]) parents([expr]) parentsUntil([expr]) prev([expr]) prevAll([expr]) prevUntil([expr]) siblings([expr]) 串联 add(expr, [context]) andSelf() contents() end() 事件 页面载入 ready(fn) 事件处理 bind(type, [data], fn) one(type, [data], fn) trigger(type, [data]) triggerHandler(type, [data]) unbind([type], [data]) 事件委派 live(type, [data], fn) die([type], [fn]) 事件切换 hover(over, out) toggle(fn, fn2, [fn3, fn4, ...]) 事件 blur( [fn] ) change( [fn] ) click( [fn] ) dblclick( [fn] ) error( [fn] ) focus( [fn] ) focusin( [fn] ) focusout( [fn] ) keydown( [fn] ) keypress( [fn] ) keyup( [fn] ) mousedown(fn) mousemove(fn) mouseout(fn) mouseover(fn) mouseup(fn) resize(fn) scroll(fn) select( [fn] ) submit( [fn] ) unload(fn) 效果 基本 show() show(speed, [callback]) hide() hide(speed, [callback]) toggle() toggle(switch) toggle(speed, [callback]) 滑动 slideDown(speed, [callback]) slideUp(speed, [callback]) slideToggle(speed, [callback]) 淡入淡出 fadeIn(speed, [callback]) fadeOut(speed, [callback]) fadeTo(speed, opacity, [fn]) 自定义 animate(param,[dur],[e],[fn]) animate(params, options) stop([clearQueue], [gotoEnd]) delay(duration, [queueName]) 设置 jQuery.fx.off Ajax Ajax 请求 $.ajax([options]) load(url, [data], [callback]) $.get(url, [data], [fn], [type]) $.getJSON(url, [data], [fn]) $.getScript(url, [callback]) $.post(url, [data], [fn], [type]) Ajax 事件 ajaxComplete(callback) ajaxError(callback) ajaxSend(callback) ajaxStart(callback) ajaxStop(callback) ajaxSuccess(callback) 其它 $.ajaxSetup([options]) serialize() serializeArray() 工具 浏览器及特性检测 $.support $.browser $.browser.version $.boxModel 数组和对象操作 $.each(object, [callback]) $.extend([d],tgt,obj1,[objN]) $.grep(array, fn, [invert]) $.makeArray(obj) $.map(array, callback) $.inArray(value, array) $.toArray() $.merge(first, second) $.unique(array) $.parseJSON(json) 函数操作 $.noop $.proxy(function, scope) 测试操作 $.contains(container, contained) $.isArray(obj) $.isFunction(obj) $.isEmptyObject(obj) $.isPlainObject(obj) 字符串操作 $.trim(str) URL $.param(obj, [traditional]) 插件编写 $.error(message) 关于 关于jQuery 1.3 版翻译 关于jQuery 1.2 版翻译 提交bug及获取更新

    0
    84
    234KB
    2010-04-19
    3
  • ADO.net中文手册很详细,很好

    通过 ADO.NET 访问数据 ADO.NET 概述 ADO.NET 的设计目标:讨论创建 ADO.NET 的动机和设计目标。 ADO.NET 结构:提供 ADO.NET 结构和组件的概述。 .NET 数据提供程序:提供有关随 ADO.NET 提供的 .NET 数据提供程序和 .NET 数据提供程序的设计的概述。 ADO.NET DataSet:提供有关 DataSet 设计和组件的概述。 为 .NET 数据提供程序编写通用代码:提供有关如何使用 ADO.NET 所提供的通用接口来编写一组对于任何 .NET 数据提供程序都将运行的代码的信息。 ADO.NET 示例应用程序:提供 ADO.NET 应用程序的示例,该示例从数据库中检索数据并将其返回到控制台。   使用 .NET 数据提供程序访问数据 使用 ADO.NET 连接到数据源:描述 ADO.NET Connection 对象,并说明如何使用它来连接到数据源。 执行命令:描述 ADO.NET Command 对象,并说明如何使用它来对数据源执行查询和命令。 使用 DataReader 检索数据:描述 ADO.NET DataReader 对象,并说明如何使用它从数据源返回结果流。 将存储过程用于命令:描述如何使用 Command 对象来调用存储过程,并提供有关发送和检索参数值的信息。 从数据库中获取单个值:描述如何使用 Command 从数据库查询中返回单个值。 从数据库中获取 BLOB 值:描述如何使用 DataReader 从数据库中返回二进制大对象 (BLOB)。 执行数据库操作和修改数据:描述如何使用 Command 对数据源发出 INSERT、UPDATE 和 DELETE 命令,以及如何执行目录操作(如创建或更改表)。 从 SQL Server 中以 XML 形式获取数据:描述如何使用 Command 以 XmlReader 形式返回 SQL Server FOR XML 查询的结果。 从 DataAdapter 填充 DataSet:描述如何通过 DataAdapter 来使用表、列和行填充 DataSet。 使用 DataAdapter 和 DataSet 更新数据库:描述如何使用 DataAdapter 将对 DataSet 中数据的更改解析回数据源。 向 DataSet 添加现有约束:描述如何从数据源填充 DataSet 的约束(如主键列的唯一约束)。 设置 DataTable 和 DataColumn 映射:描述如何使用表和列映射来提供从数据源中返回的列的应用程序特定名称。 将参数用于 DataAdapter:描述如何将参数用于 DataAdapter 的命令属性(包括如何将 DataSet 中列的内容映射到命令参数)。 输入和输出参数及返回值:描述如何将 DataSet 表中列的内容映射到 DataAdapter 命令属性的输入和输出参数(包括如何从存储过程中检索返回值)。 自动生成的命令:描述如何使用 CommandBuilder 为具有单个表 SELECT 命令的 DataAdapter 自动生成 INSERT、UPDATE 和 DELETE 命令。 使用 DataAdapter 事件:描述 DataAdapter 事件并说明如何使用这些事件。 从数据库中获取架构信息:解释如何从数据源中获取架构信息,如数据库或目录中表的列表。 执行事务:解释如何使用 Connection 和 Transaction 对象对数据源执行事务。 .NET 数据提供程序的代码访问安全性:描述随 .NET 框架提供的 .NET 数据提供程序的可用附加代码访问安全权限,并说明如何确定特定权限是否可用于所运行的代码。   创建和使用 DataSet 创建 DataSet:描述创建 DataSet 实例的语法。 向 DataSet 添加 DataTable:描述如何创建表和列并将其添加到 DataSet 中。 添加表间关系:描述如何创建 DataSet 中表之间的关系。

    4
    42
    336KB
    2010-03-06
    4
  • ado[1].net中文手册 学习 ado.net的重要资料

    通过 ADO.NET 访问数据 ADO.NET 概述 ADO.NET 的设计目标:讨论创建 ADO.NET 的动机和设计目标。 ADO.NET 结构:提供 ADO.NET 结构和组件的概述。 .NET 数据提供程序:提供有关随 ADO.NET 提供的 .NET 数据提供程序和 .NET 数据提供程序的设计的概述。 ADO.NET DataSet:提供有关 DataSet 设计和组件的概述。 为 .NET 数据提供程序编写通用代码:提供有关如何使用 ADO.NET 所提供的通用接口来编写一组对于任何 .NET 数据提供程序都将运行的代码的信息。 ADO.NET 示例应用程序:提供 ADO.NET 应用程序的示例,该示例从数据库中检索数据并将其返回到控制台。   使用 .NET 数据提供程序访问数据 使用 ADO.NET 连接到数据源:描述 ADO.NET Connection 对象,并说明如何使用它来连接到数据源。 执行命令:描述 ADO.NET Command 对象,并说明如何使用它来对数据源执行查询和命令。 使用 DataReader 检索数据:描述 ADO.NET DataReader 对象,并说明如何使用它从数据源返回结果流。 将存储过程用于命令:描述如何使用 Command 对象来调用存储过程,并提供有关发送和检索参数值的信息。 从数据库中获取单个值:描述如何使用 Command 从数据库查询中返回单个值。 从数据库中获取 BLOB 值:描述如何使用 DataReader 从数据库中返回二进制大对象 (BLOB)。 执行数据库操作和修改数据:描述如何使用 Command 对数据源发出 INSERT、UPDATE 和 DELETE 命令,以及如何执行目录操作(如创建或更改表)。 从 SQL Server 中以 XML 形式获取数据:描述如何使用 Command 以 XmlReader 形式返回 SQL Server FOR XML 查询的结果。 从 DataAdapter 填充 DataSet:描述如何通过 DataAdapter 来使用表、列和行填充 DataSet。 使用 DataAdapter 和 DataSet 更新数据库:描述如何使用 DataAdapter 将对 DataSet 中数据的更改解析回数据源。 向 DataSet 添加现有约束:描述如何从数据源填充 DataSet 的约束(如主键列的唯一约束)。 设置 DataTable 和 DataColumn 映射:描述如何使用表和列映射来提供从数据源中返回的列的应用程序特定名称。 将参数用于 DataAdapter:描述如何将参数用于 DataAdapter 的命令属性(包括如何将 DataSet 中列的内容映射到命令参数)。 输入和输出参数及返回值:描述如何将 DataSet 表中列的内容映射到 DataAdapter 命令属性的输入和输出参数(包括如何从存储过程中检索返回值)。 自动生成的命令:描述如何使用 CommandBuilder 为具有单个表 SELECT 命令的 DataAdapter 自动生成 INSERT、UPDATE 和 DELETE 命令。 使用 DataAdapter 事件:描述 DataAdapter 事件并说明如何使用这些事件。 从数据库中获取架构信息:解释如何从数据源中获取架构信息,如数据库或目录中表的列表。 执行事务:解释如何使用 Connection 和 Transaction 对象对数据源执行事务。 .NET 数据提供程序的代码访问安全性:描述随 .NET 框架提供的 .NET 数据提供程序的可用附加代码访问安全权限,并说明如何确定特定权限是否可用于所运行的代码。   创建和使用 DataSet 创建 DataSet:描述创建 DataSet 实例的语法。 向 DataSet 添加 DataTable:描述如何创建表和列并将其添加到 DataSet 中。 添加表间关系:描述如何创建 DataSet 中表之间的关系。 导航表间关系:描述如何使用 DataSet 中表之间的关系来返回具有父子关系的子行或父行。 将 DataSet 与现有数据一起使用"描述如何使用 DataAdapter 将 DataSet 中的更改解析回数据源。 合并 DataSet 内容:描述如何将一个 DataSet、DataTable 或 DataRow 数组的内容并入另一个 DataSet。 复制 DataSet 内容:描述如何创建可包含架构和指定数据的 DataSet 副本。 使用 DataSet 事件:描述 DataSet 的事件并说明如何使用这些事件。 使用类型化的 DataSet:描述类型化 DataSet 并说明如何创建和使用类型化 DataSet。   XML 和 DataSet:描述 DataSet 如何与作为数据源的 XML 进行交互(包括以 XML 数据的形式加载和保持 DataSet 的内容)。 DiffGram:提供有关 DiffGram 的详细信息,DiffGram 是一种用于读写 DataSet 内容的 XML 格式。 从 XML 中加载 DataSet:讨论在从 XML 文档中加载 DataSet 内容时需考虑的不同选项。 以 XML 数据形式编写 DataSet:讨论如何以 XML 数据的形式生成 DataSet 的内容以及可使用的不同 XML 格式选项。 从 XML 中加载 DataSet 架构信息:讨论用于从 XML 中加载 DataSet 架构的 DataSet 方法。 以 XML 架构 (XSD) 形式编写 DataSet 架构信息:讨论 XML 架构的用途以及如何从 DataSet 生成 XML 架构。 使 DataSet 与 XmlDataDocument 同步:讨论同步访问单个数据集的关系和分层视图的 .NET 框架中的可用功能,并解释如何在 DataSet 和 XmlDataDocument 之间创建同步关系。 嵌套的 DataRelation:讨论嵌套 DataRelation 对象在以 XML 数据形式表示 DataSet 内容时的重要性,并描述如何创建这些对象。 从 XML 架构 (XSD) 生成 DataSet 关系结构:描述从 XML 架构定义语言 (XSD) 架构创建的 DataSet 的关系结构(即架构)。 将 XML 架构 (XSD) 约束映射到 DataSet 约束:描述用于在 DataSet 中创建唯一和外键约束的 XML 架构元素。 从 XML 架构 (XSD) 生成 DataSet 关系:描述用于在 DataSet 中各表列间创建关系的 XML 架构元素。 了解约束和关系之间的相互关系:描述当使用 XML 架构元素在 DataSet 中创建约束时如何隐式地创建关系。   从 XML 推断 DataSet 关系结构:描述在从 XML 元素进行推断时所创建的 DataSet 的结果关系结构(即架构)。   创建和使用数据表:描述如何创建和自定义 DataTable 对象。 创建数据表:说明如何创建 DataTable 并将其添至 DataSet。 定义数据表的架构:提供有关创建和使用 DataColumn 对象和约束的信息。 在数据表中操作数据:说明如何添加、修改和删除表中的数据。说明如何使用 DataTable 事件来检查对表中数据的更改。   创建和使用 DataView:描述如何创建 DataTable 中数据的动态视图,这些视图通常用于数据绑定应用程序。 创建 DataView:描述如何为 DataTable 创建 DataView。 使用 DataView 对数据排序和筛选:描述如何设置 DataView 的属性,以按照特定筛选条件返回数据行的子集或以特定排序顺序返回数据。 使用 DataView 查看数据:描述如何访问 DataView 的内容,在 DataView 中查找特定的数据行,以及基于父子关系创建数据的视图。 使用 DataView 修改数据:描述如何通过 DataView 修改基础 DataTable 中的数据(包括启用或禁用更新)。 使用 DataView 事件:描述如何使用 ListChanged 事件接收在 DataView 的内容或顺序得到更新时发出的通知。 使用 DataViewManager 设置默认表视图:描述如何使用 DataViewManager 来管理 DataSet 中每个表的 DataView 设置。   从 ADO.NET 访问 ADO 记录集或记录:描述如何使用 OleDbDataAdapter 从 ADO 记录或记录集填充 DataSet。 ADO.NET 方案示例:提供数据识别应用程序的常见编程方案的示例,并使用 ADO.NET 提供这些方案的解决方案。 检索“标识”或“自动编号”值:提供一个特定示例,它将为 Microsoft SQL Server 表中的“标识”(Identity) 字段所生成的值以及 Microsoft Access 表中的“自动编号”(Autonumber) 字段映射到表中插入行的列。 开放式并发:描述开放式并发模型,并提供有关如何使用 ADO.NET 测试是否存在开放式并发冲突的示例。 从 XML Web services 使用 DataSet:提供一个 XML Web services 的示例,该示例以 DataSet 的形式返回数据源中的数据,另外还接收更新的 DataSet 并将更改解析回数据源。 查询结果分页:提供有关以数据页的形式查看查询结果的示例。   实现 .NET 数据提供程序:描述如何为数据存储区创建自定义 .NET 数据提供程序,并为您提供模板代码。 .NET 数据提供程序实现入门:为定义 .NET 数据提供程序提供信息和建议,其中包括有关可用于实现的接口的说明和有关为提供程序创建命名空间的信息。 实现连接:描述连接的特性,并说明如何为 .NET 数据提供程序实现您自己的连接。 实现命令:描述命令的特性,并说明如何为 .NET 数据提供程序实现您自己的命令。 实现 DataReader:描述 DataReader 的特性,并说明如何为 .NET 数据提供程序实现您自己的 DataReader。 实现 DataAdapter:描述 DataAdapter 的特性,并说明如何为 .NET 数据提供程序实现您自己的 DataAdapter。 示例 .NET 数据提供程序:包含 .NET 数据提供程序的示例实现。   数据集 数据集介绍:提供什么是 ADO.NET 数据集、如何对它们进行类型化或非类型化、它们的用途及结构的概述。 用于创建数据集的 Visual Studio 工具:描述 Visual Studio 提供了哪些允许创建数据集的功能,以及在何时选用什么样的工具。 用组件设计器创建类型化数据集:描述在窗体或组件中工作时如何创建数据集。 用表达式创建数据集列:描述如何在数据集表中定义基于计算或其他表达式(而不是直接基于数据源中的数据)的列。 将表添加到现有数据集:描述如何在以前创建的类型化数据集中创建新数据表。 将现有类型化数据集添加到窗体或组件:描述如何在窗体或组件上创建数据集的实例。 将非类型化数据集添加到窗体或组件:描述如何创建无关联架构的数据集。 演练:将数据源表映射到数据集表:描述如何基于另一个架构,使用数据适配器表和列映射从数据库将数据加载到数据集。 数据适配器 数据适配器介绍:提供有关数据适配器的定义、用途和结构的概述。 数据适配器命令中的参数:描述适配器在运行时传递给 SQL 语句或存储过程的参数的结构和用途。 数据适配器中的表映射:描述如何在源表和数据集表之间映射列名的选项。 创建数据适配器:列出在 Visual Studio 中创建数据适配器的各种方法。 为数据适配器配置参数:解释如何创建将在运行时传递给数据适配器命令的参数并设置其属性。 将数据源列映射到数据集数据表列:提供有关如何建立和修改源表和数据集表的列名之间映射的说明。 预览数据适配器的结果:提供有关测试数据适配器填充数据集的方式的说明。 数据连接 与 ADO 的早期版本和其他数据访问组件相比,ADO.NET 提供了若干好处。这些好处分成以下几个类别: 互操作性 ADO.NET 应用程序可以利用 XML 的灵活性和广泛接受性。由于 XML 是用于在网络中传输数据集的格式,因此可以读取 XML 格式的任何组件都可以处理数据。实际上,接收组件根本不必是 ADO.NET 组件:传输组件可以只是将数据集传输给其目标,而不考虑接收组件的实现方式。目标组件可以是 Visual Studio 应用程序或无论用什么工具实现的其他任何应用程序。唯一的要求是接收组件能够读取 XML。作为一项工业标准,XML 正是在谨记这种互操作性的情况下设计的。 可维护性 在已部署系统的生存期中,适度的更改是可能的,但由于十分困难,所以很少尝试进行实质的结构更改。这是很遗憾的,因为在事件的自然过程中,这种实质上的更改会变得很有必要。例如,当已部署的应用程序越来越受用户欢迎时,增加的性能负荷可能需要进行结构更改。随着已部署的应用程序服务器上的性能负荷的增长,系统资源会变得不足,并且响应时间或吞吐量会受到影响。面对该问题,软件设计者可以选择将服务器的业务逻辑处理和用户界面处理划分到单独计算机上的单独层上。实际上,应用程序服务器层将替换为两层,缓解了系统资源缺乏。 该问题并不是要设计三层应用程序。相反,它是要在应用程序部署以后增加层数。如果原始应用程序使用数据集以 ADO.NET 实现,则该转换很容易进行。请记住,当用两层替换单个层时,将安排这两层交换信息。由于这些层可以通过 XML 格式的数据集传输数据,所以通讯相对较容易。 可编程性 Visual Studio 中的 ADO.NET 数据组件以不同方式封装数据访问功能,帮助您加快编程速度并减少犯错几率。例如,数据命令提取生成和执行 SQL 语句或存储过程的任务。 同样,由这些工具生成的 ADO.NET 数据类导致类型化数据集。这又使您可以通过已声明类型的编程访问数据。例如,请考虑下面这行代码(它访问未声明类型的数据集内的数据成员): ' Visual Basic If TotalCost > DataSet1.Tables("Customers").Rows(i)("AvailableCredit") Then // C# if (TotalCost > DataSet1.Tables["Customers"].Rows[i]["AvailableCredit"]) { } 访问已声明类型的数据集内的数据成员的等效代码行如下所示: ' Visual Basic If TotalCost > DataSet1.Customers("Jones").AvailableCredit Then // C# if(TotalCost > DataSet1.Customers("Jones").AvailableCredit) { } 已声明类型的数据集的代码更易阅读。因为提供了语句结束,所以它还便于编写。例如,“AvailableCredit”在完成以下语句的选择列表中: IF TotalCost > Customer. 最后,已声明类型的数据集的代码更安全,原因在于它提供对类型的编译时检查。例如,假定 AvailableCredit 表达为货币值。如果程序员误向 AvailableCredit 分配了字符串值,则环境会在编译时向程序员报告该错误。当使用未声明类型的数据集时,程序员直到运行时才会知道该错误。 有关类型化数据集和非类型化数据集的更多信息,请参阅数据集介绍。 性能 对于不连接的应用程序,ADO.NET 数据库提供的性能优于 ADO 不连接的记录集。当使用 COM 封送在层间传输不连接的记录集时,会因将记录集内的值转换为 COM 可识别的数据类型而导致显著的处理开销。在 ADO.NET 中,这种数据类型转换则没有必要。 可伸缩性 因为 Web 可以极大增加对数据的需求,所以可缩放性变得很关键。Internet 应用程序具有无限的潜在用户供应。尽管应用程序可以很好地为十几个用户服务,但它可能不能向成百上千个(或几百万个)用户提供同样好的服务。使用数据库锁和数据库连接之类资源的应用程序不能很好地为大量用户服务,因为用户对这些有限资源的需求最终将超出其供应。 ADO.NET 通过鼓励程序员节省有限资源来实现可缩放性。由于所有 ADO.NET 应用程序都使用对数据的不连接访问,因此它不会在较长持续时间内保留数据库锁或活动数据库连接。

    2
    343
    794KB
    2010-03-05
    12
关注 私信
上传资源赚积分or赚钱