绑定技术范文
绑定技术范文(精选11篇)
绑定技术 第1篇
在一些应用中, 可能会需要将一些可执行代码插入到PE文件当中, 比如给PE文件加密码。在此介绍利用扩充最后节的方法, 实现代码插入功能, 在对PE结构熟悉之后, 还可以做其他工作, 比如给PE删除功能、添加功能、修改图标为大图标、附加更多信息进去等等。
PE意为可移植的执行体 (Portable Executable), 是一种用于可执行文件、目标文件和动态链接库的文件格式, 主要使用在32位和64位的Windows操作系统上。PE文件格式封装了Windows操作系统加载可执行程序代码时所必需的一些信息。这些信息包括动态链接库、API导入和导出表、资源管理数据和线程局部存储数据。在PE文件中, 可执行代码、已初始化的数据、文件资源和重定位信息等数据被按照属性的不同而放到不同的节中。掌握了PE文件的结构就可以根据需要来实现对PE文件数据的修改, 比如, 根据需要向可执行文件中加进特定的可执行代码来实现自己的目的。
2 具体实现
对于PE中插入可执行代码, 主要分以下3大步: 增补新代码所用动态链接库及API、修正机器码、PE合法化。下面介绍一下实现方法。
2.1 先获得 PE 的 DLL 以及 API
由于后面涉及到内存地址物理地址转换的问题, 这里先简单介绍一下: 内存地址和物理地址的转换 (RVA和FOA), 由于节在内存中是线性排列的, 内存中顺序是文件头、节1、节2、节3。文件中的排列顺序也是文件头、节1、节2、节3,如图1所示。
由于一个地址位于节内的相对偏移是一样的, 所以可以先求出举例节首的偏移, 然后再加上文件中节的起始地址即可。
根据PE结构, 总结获得导入函数的方法如图2所示。
参照PE的结构图: 根据DOS MZ头的e_lfanew字段 (偏移0x3C) 定位到标准PE头的起始, 本例中以freecell.exe为例 , 首先在MZ头偏移3C处 , 获得PE头的起始 地址 ,000000E0。E0后面偏移6个字节表示PE中节的数量0003,在后面获取节的时候用到。
相对于PE头偏移78h字节, 为数据目录的起始地址, 由于导入表位于数据目录的第二大表项, 所以E0+78+8=160, 如图3所示, 导入表的内存起始地址00005780, 导入表长度000000B4。
根据RVA和FOA的转换, 所以导入表起始地址的文件偏移为5780-1000+400=4B80。
来到0x4B80位置, 如图4所示。
导入表数据中, 每一组为20个字节, 最后以全0的20个字节作为结尾。可以看到共有8组非全0的 (不同颜色), 1组全0的结构, 所以导入表总长为, (8+1) *20=B4, 与上面相符。以第一组为例, 对于我们来说, 有用的就3个字段, 桥1起始地址000059D8; 桥2 000011A4; DLL字符串地址 :00005AF6。
桥1: 该字段指向一个包含了一系列结构的数组, 指向的数组中每一项为一个结构, 该结构是一个双字。该字段双字高位为0时, 是一个RVA, 指明了INT的起始地址。
桥2: 指向的链表定义了针对当前DLL引入的所有导入函数。首先处理DLL字符串地址, 这里也是一个RVA, 它指向所对应的DLL文件名称, 而这个名称是以“�”结尾的Ansi字符串。如图5所示, msvcrt.dll转换成文件偏移 (5AF61000+400) =4EF6, 来到4EF6处, 看到DLL名为msvcrt.dll。
对于桥1的RVA, 首先转换成文件偏移4DD8, 从文件的该位置开始取双字, 每一个API对应一个双字, 此双字是API名字的RVA。直到取出的双字为“00000000”结束, 如图6所示, 共调用了此DLL中的19个API函数。
对于第一个API的RVA 00005B10, 转成FOA为4F10,如图7所示, 第一个API为 _except_handleer3。
通过以上方法, 即可获得指定PE文件中的所有导入函数。程序运行过程中的效果如图8, 图9所示。
根据图10中可以看到, 本例中的宿主PE共包含8个DLL, 每个DLL分别被调用的API为19个, 8个 , 8个1个。同理, 获得补丁的DLL以及相关API。
2.2 比对需要处理的 DLL
根据所有取出的结果, 比对出需要进行处理的两类, 一类是补丁包含的DLL, 宿主中没有, 需要添加。另外一类是补丁DLL中涉及的API, 宿主不包含的也需要添加。
比对结果如图11所示。
从图12中看出, 需要做API相关处理的4个DLL, 每个DLL分别有1、7、4、11个api需要处理。但是在本例中, 为0的也做了相关处理。
从图13和图14中可以看出, 需要加到宿主中的DLL为一个, 包含的API也是一个。
2.3 调整宿主以及补丁 DLL
在本例中, 最终PE的结构如图15所示, 主要分为两大部分: DLL部分、代码部分, 其中分别又包含几小部分。下面先介绍DLL部分。
计划将所有需要处理的项目放在宿主PE的末尾。首先是每个需要移动的DLL, 因为对于每个DLL来说, INT和IAT是连续的, 在原宿主中, 是没有位置供INT及IAT扩充的, 所以需要将涉及的宿主INT移动到后面, 并做好相应地址指向。在本例中, 第一个处理的是msvcrt.dll, 由于是新增0个API, 因此只是把它挪移过来, 本程序为了保持数据完整, 对于涉及但未增加API的DLL, 也做了相关处理。
根据最终的PE结构图来看, 为了能够准确定位写入需要的东西, 需要提前确定各个位置的起始, 具体为: INT起始、IAT起始、字符串起始、字符串总长。
以第一个DLL为例,
(1) INT起始, 就是宿主PE的结尾, 本例是0xD800。
(2) IAT起始, 即是INT起始加上INT的长度 (包含宿主挪移的INT和补丁INT的长度以及结束标志, 本例中为 (19+0) *4+4), 所以IAT起始为0xD800+0x50, 上述括号中0为补丁INT, +4为全0的结束标志4个字节。
(3) 字符串起始 , 即是IAT起始加上IAT的长度 , 其中IAT长度和INT的是相同的。本例字符串起始为0xD800 +0x50+0x50。
(4) 字符串总长, 是指补丁所有API名称的字符串总长,其中包括每个API的结尾字符“�”和序号 (占两字节)。
根据上面分析, 只需维护一个N行5列的2维数组, 提前生成好, 用于程序后续写入工作的各种定位。注意, 这里提到的都是物理偏移, 如表1所示。
确定好各个部分的起始地址之后, 就是确定各个部分的内容了。对于每个DLL, 有4部分需要确定。
(1) 宿主INT, 直接去宿主INT原位置读取, 因为宿主的API未动, 所以API的内存地址INT也不需要修改, 直接读取过来即可。
(2) 补丁INT, 为补丁API名称的内存偏移地址。如图16中 , 蓝色为需 要移动的 补丁INT, 本例中APIname: RegCreateKeyExw的物理地址是D8F0, 所以D8F0-5800+9000=000110F0。蓝框为F0100100, 一个API占用4个字节 , 挨个写, 直到所有API写完, 加上结尾全0的标志, 图16中绿框。
(3) 宿主IAT、补丁IAT。此步工作相对简单, 只需开辟出指定长度的空间就行, 用0填充。或者不开辟也可以, 只需下一步的起始位置之前留出IAT的大小即可, 因为PE加载之后此部分会被覆盖, 只需要有写入权限即可, 具体内容我们并不关心。
(4) 补丁APIName, 只需要写入补丁的API名字, 方法就是根据补丁包含的API, 循环挨个往上面写, 每个分别前面增加两字节序号以及末尾增加结束标志“�” (不含引号)。
通过上述方法, 写好每一个DLL的INT和IAT, 需要处理的第一部分就完成了, 此时使用PEID等工具查看生成的PE,就可以看到新增加的API了。如图17所示。
2.4 导入表
导入表中记录了本PE涉及的所有动态链接库 (DLL) 的信息。导入表数据的起始是一组导入表描述符结构。该结构的具体定义如下:
每组为20字节, 每组对应一个DLL, 最后以20字节的全0结构结尾。由于导入表描述符是连续的, 所以需要将宿主导入表挪移到后面才能在其后面扩充新的导入表描述符, 本例只需扩充一个20字节, 即一个DLL。如图18所示。
在每组的20个字节中, 需要处理的是前4个和后8个字节。
0-4字节, 是该DLL的INT起始地址的内存偏移。本例中第一个DLL为D800 (查上述N行5列的二维数组), 所以D800 -5800 +9000 =11000, 前4个字节为00100100。第二个DLL为D8A0, D8A0 -5800 +9000 =110A0, 前4个字节A0100100, 与图18相符。
12-16字节, 是该DLL名称字符串的内存偏移。只需要处理新增的, 因为原来的都在原位, 无需处理。如图19所示。
本例中, 新增DLL的名字起始物理地址是DEB7, 内存偏移为DEB7-5800+9000=116B7, 与图19中相符。
17-20字节, 是该DLL的IAT起始地址的内存偏移, 本例中为D850 (见二维数组中), 所以D850-5800+9000=11050。
2.5 补丁中新增 DLL
新增DLL的INT IAT, 处理方法同第一部分, 不再赘述。
2.6 补丁机器码
对于补丁代码处理分为两步, 首先是将补丁代码写入到宿主中, 其次, 替换掉所有涉及DLL的调用地址。
因为IAT都移位了, 所以代码中调用API的机器码需要修改, 用OD加载调用API的机器码如图20所示。
比如调用msvcrt.dll里面的 _p_commode函数, 首先确定是导入表中的第一个API的第5个函数, 如图21所示。
导入表中第一个函数桥2 (即17-20字节的IAT) 的RVA为000011A4, 如图22所示。
所以第5个函数为000011A4+4*4=000011B4, 加上基地址0x01000000后为010011B4, 所以操作数的机器码为B4110001。
根据上面的原理, 将被移动API涉及的机器码以及新增DLL涉及的机器码全部修改。两者之间的对应关系依靠API的名字确定。举例如下:
此例中, 宿主代码共需修改的为35处, 如图23, 图24所示。
用OD加载修改好后, 可以看到函数已经可以正常调用,如图25所示。
对于补丁的代码, 用同样方法处理。
2.7 PE 合法化
(1) PE头 : PE头中需要修改的是ImageSize和程序挂起点。ImageSize修改方法也为原数值加上新增加的长度即可;程序挂起点一般选择宿主关闭的时候, 或者是其中某个具体功能之后, 根据实际逆向结果进行选择。
( 2) 节属性 : 节属性主要是最后一个节的两个参数VirtSize、raw data size的修改, 此两个参数的含义分别表示此节加载到内存中的大小以及位于文件中的大小, 所以修正方法只需加上新增的大小即可。另外最后一节还要修改属性, 增加写入权限的属性。
3 结语
通过上述的方法实现了将可执行代码插入到PE文件中,由于补丁的代码长度不定, 所以尾节插入比较适合此种情况,今后的工作中如果补丁代码比较短, 则可以插入到PE节的空闲空间中, 对于导入表的重建, 方法是一样的。另外本文还有很大的不足, 主要体现在以下几个方面:
(1) 补丁代码的获取上: 只是简单地将text节的东西全部搬过来后做机器码修正, 有用没用的代码全部包含在内, 必然增加了结果文件的体积。
(2) 补丁代码段中如果涉及全局变量, 也需要修改。大致方法为, 在尾端扩充一部分, 用于补丁程序的数据段用。也可以在原位扩充数据段, 这样会涉及资源段重写。
(3) 有可能被杀毒软件查杀, 因为修改了入口地址等因素。
今后研究方向:
(1) 主要是学习opcode, 通过逆向弄明白程序的流程, 筛选出有用的代码。
(2) 通过免杀技术, 伪装入口地址修改。
(3) 代码段原位扩充 , 涉及到数据段、资源段搬移的问题, 已经基本实现, 需要搬移代码段之后各段, 并修改相关落入其中的偏移。
摘要:根据Win32PE文件的结构特征,通过扩充资源段的方法实现向PE文件中插入可执行代码,解决插入代码变量地址的重定位和代码返回改动态获取API入口地址等问题。
博通绑定科技巨头 第2篇
博通大中华区总裁李廷伟向《英才》记者介绍,公司目前拥有两大业务单元:BCG和ING。前者是负责各种有线及无线的连接技术,比如手机Wifi、GPS、家庭宽带等;ING业务则是对前者所产生的大数据进行处理,比如每一个网页的后台处理云计算、服务器等。
由于在所处市场,博通拥有极高的占有率,因此,多数科技公司的底层技术及设备都由博通供应。因此博通与各类科技厂商存在着共生的关系。
“今年这些热门的电子产品都使用了博通的芯片”——李廷伟展示了博通的用户,诸如三星、苹果、华为、中兴、小米等国内外耳熟能详的科技公司。
在国内互联网市场中,“生态”与“入口”正在成为各家互联网公司不遗余力搭建和抢占的风口。终端数量、类型的增加以及数据流量的不断扩大将成为博通的业务增长点。
因此,在博通看来,随着中国互联网+大潮的袭来,机遇也随之而来。
“过去20多年间,博通收购了超过50家公司,”通过并购,博通不断进驻着不同领域。
然而去年博通却选择放弃了曾经坚守的手机阵地。对此李廷伟表示,博通并未退出手机行业。他告诉《英才》记者,随着手机和平板巨大的普及,传统电话的语音通话功能正在被弱化,因此基带芯片重要的时代已经过去。
相反,手机上除了基带以外还有很多不同的应用可以通过数据传输实现,比如WiFi、Bluetooth、NFC等各种连接技术。这正是博通的强项,几乎Apple的每一款产品中都有博通的技术。“基带芯片并不是博通的强项,我们今后要更好地专注发展自己的优势和强项,如WiFi,Bluetooth。”
万物互联自然带来更多的商业模式,而商业互通的开始则始于终端。博通已经在可穿戴设备、智能家电、汽车等领域发力。
李廷伟向《英才》记者介绍,在可穿戴设备领域,博通关注连接和功耗。我们可以提供多种连接技术,比如手机WiFi,人们希望下载速度快一点即带宽快一点,所以大家更喜欢用WiFi。而有些可穿戴产品,很可能功耗低一点,因为数据包小,对速度要求不高。那么这就有不同的需求。
另外,国内一些家电品牌开始规定30%的白色家电要有互联网接口。智能家居的发展意味着任何一个传统的企业都有可能很快与互联网融合形成新的商业模式。比如小米与美的的牵手也是很好的例证。
绑定技术 第3篇
上述通过WEB信息化技术的手段,在一定程度上改善了业务活动的效率,但业务流程却始终未能得到有效的优化和改善。例如,大多数企事业单位在自身信息化建设过程中,较为注重业务流程的规范和整合,却忽视了业务流程的在WEB应用上的优化和重组,致使业务流程逻辑的处理始终停留在实际的业务活动流程范畴。鉴于此,为改进和提升业务流程的重组优化能力,本文从基于WEB的角度,以此展开工作流建模技术的研究。
1 基于 WEB 的工作流模型分析
工作流是对软件系统业务过程的抽象化描述,其主要目的是实现软件业务流程的计算机形式化建模。随着大多数软件架构从C/S架构纷纷向B/S架构的逐步演化,企业对动态调用WEB服务的需求也越来越迫切。为满足企业业务流程的动态可变性与灵活性,将基于WEB服务的技术构建于工作流模型上,能灵活、柔性地完成流程事件的动态重组与配置。
在基于WEB的工作流建模过程中,系统的组件和接口是工作流模型动态转化的软件载体。然而,对于软件系统的公共组件和特定组件,在流程协作过程中会表现出不同的处理模式。不同组件提供了相异的接口和数据交换格式,加大了基于WEB的流程协同难度。为此,这里从不同层次架构角度出发,由此设计出基于WEB的工作流控制模型,如图1所示。
针对上述控制模型,采用图形化的过程模型定义工具对流程进行分析、定义,输入对应工作流源信息给工作流引擎。工作流引擎是该控制模型的核心,负责WEB工作流的动态调用执行及流程绑定。由该设计方案可知,工作流引擎与五类接口存在着紧密交互关系。分别为工作流定义转换接口、监控服务接口、应用程序调用接口、客户端API接口和协作通信接口,支持系统注册数据、工作流数据、日志数据的分布式处理。
流程管理者通过统一的工作流服务平台调用功能接口和软件系统应用,实现工作流的绑定与管理,通过基于WEB的工作流体系对系统注册服务与功能接口进行使用。在工作流引擎执行过程中,工作流监控服务负责流程的实例化,启动、挂起、恢复与终止。与此同时,并由工作流执行服务为流程执行进行导航,完成与业务系统、应用数据库系统之间的注册数据、工作流数据、日志数据等的通信。在工作流引擎控制的核心环节,重点是对多流程的工作流进行处理,为此下面将着重对多流程控制进行建模研究。
2 基于 WEB 的工作流控制建模
为实现异构软件系统的WEB工作流控制,本文采用基于XML的控制技术进行工作流集成建模。如图2所示,此处以三项不同的审批环节工作流A、B、C为例进行研究,对于常见流程采用定义为内容类型、列表和文档库统一编译为其自身的动态链接库 (.dll)存储在服务器数据库中。通过将A、B、C工作流转化为程序集,并以XML表单文件作为工作流程程序集的标识。工作流引擎首先动态调出工作流程程序集,通过编辑工作流程程序集对应的表单文件,来实现对工作流程的更新,然后再将工作流程程序集存储于服务器数据库中。工作流引擎调用系统数据库的业务应用,实现流程的动态调整与绑定。
基于XML的流程初始化定义
针对上述三项不同的审批环节工作流A、B、C,在处理的过程中,该审批流程的工作流模型构建为某静态绑定的工作流程程序集。然而针对不同的审批事项,存在着不同的审批流程,这就要求对工作流进行初始化定义。这里采用XML配置文件的格式,对多流程进行如图3所示的定义选择。
该配置文件定义了表单的表名、字段及字段描述。然后对流程进行了初始化定义,即利用id属性来定义流程节点,而action属性则触发了发生在step内或step间的流转,通过step属性来指定流程流向,对应name指定了流程的具体执行动作,动作执行完后又转向下一标签节点。action由执行此action的(条件),以及执行此动作后的result(结果)组成。例如,编号为"3225" 的节点,在流程执行完毕后,将根据属性定义step="916" 转向编号为 "916" 的后续节点,以执行相应的操作。
3 基于 XML 的多流程绑定
经过上节多流程的初始化定义,工作流A、B、C必须进行动态绑定,为了实现远程调用,就必须采用基于WEB的服务模式和基于XML的通用格式,才能使工作流引擎进行流程API接口的识别。如图4所示为基于XML的动态工作流配置文件,为进行WEB服务的发布,该配置文件存储为WSDL格式。
在Flow Set.wsdl工作流配置文件中,Flow Set合作伙伴链接 是在Flow Set.wsdl文件中定 义的。实 际Flow Set只是一个流程配置模板,需要选择对应流程(Audit-A、Audit-B、Audit-C)。Flow Set的XML文件支持工作流配置绝对路径或服务器相对路径,所有表单路径URL必须按照绝对路径或服务器相对路径的标准格式来选择一种格式进行表示,例如,绝对路径("http//localhost:9700/Audit/default/Audit-A.aspx")。通过上述动态绑定的方式,实现了固定工作流与动态业务需求变更的分离,工作流引擎只负责调用对应服务进行绑定,便可实现动态重组与变更流程服务。
4 工作流流向控制实现
工作流的流向统一由工作流引擎进行控制,即由工作流引擎扫描已定义好的流程控制任务表,调用任务表中定义好的WEB流程服务,任务表中所有待执行的流程任务分发给相应流程中的相应节点,并按节点路线来执行具体的软件操作。
定义流程控制任务表的API功能接口为:Task List(TasklnstanceI D,TasklD ,Task Step,Task Handle Time,ProceeI D,SUBNodelD ,lsH andled,Commmit Man)。该接口各参数所代表含义描述见表1。
下面描述工作流流向控制算法:
上述算法通过API实现了流程的流向控制绑定,算法过程执行完毕,将根据分配给工作流程任务列表的指定节点ID对流程执行对应的Action操作。
5 结束语
阿里旺旺如何绑定手机 第4篇
幸好张女士之前就把手机和旺旺绑定在一起了,所以,这笔生意虽然客户是从旺旺联系过来的,但由于张女士的提前设置,事后的及时沟通,最后张女士和客户达成了2万订单。
您可以让您和张女士一样,利用移动旺旺功能,方便的让客户及时联系你,即使关掉电脑,也不让您错过生意机会。
旺旺绑定手机的设置步骤
旺旺绑定手机后怎么发短信、取消绑定
阿里旺旺可以发多少条手机短信?
阿里旺旺可以给非阿里会员发短信吗?
阿里旺旺发短信每条可输多少字?
阿里旺旺可以群发短信吗?
旺旺一次性可以群发多少短信?
阿里旺旺绑定手机是否收费的?
离线后旺旺消息发到手机,功能如何启用
【旺旺绑定手机的功能,可以通过以下方法设置】
1、点击阿里旺旺上方的菜单,选择“移动旺旺”--“绑定手机”;
手机旺旺设置页面-1
2 、首先请查看“服务协议”,若可以接受,请勾选下方的“我已经阅读并同意用户协议”,然后点击“下一步”(绑定手机的过程不产生任何费用);
手机旺旺设置页面-2
3、输入您要绑定的手机号码,等待系统发送验证码;
手机旺旺设置页面-3
4、按照系统提示,将您手机收到的验证码输入到对应框中;点击“下一步”,即可完成手机绑定。
【旺旺怎么发短信?】
您登录旺旺后,左上角头像的旁边有个手机的小图标,点开后选择人员或者直接输入号码就可以发送了,
手机旺旺设置页面-4
【怎么给移动旺旺账户充值、取消绑定】
1、利用上图的步骤,点击旺旺上的手机小图标,进入如下页面,选择点击“账户查询”按钮,打开进入新的窗口;
手机旺旺设置页面-5
2、在移动旺旺的查询平台上,选择立即充值按钮,按照提示充值。另外如果想取消手机的绑定,您也可以按照以上步骤,在此页面上取消。
手机旺旺设置页面-6
【阿里旺旺可以发多少条手机短信?】
通过移动旺旺发送短信,每天最多可以发送1000条,单次最多可发送500条。只要您的移动旺旺帐户内有余额,发送总量没有限制。
【阿里旺旺可以给非阿里会员发短信吗?】
阿里旺旺可以给任何号码发送短信,只要直接输入对方的手机号码即可,不需要对方是阿里巴巴的注册会员。
【阿里旺旺发短信每条可输多少字?】
单条短信是60字,包括您的默认签名(您的姓名)在内。例如:默认签名占用3个字,那么剩余可写57个字。在输入内容过长,最多可以接受296个字的输入,然后会自动进行拆分,最多可以拆分5条。(1个字=1个字符)
【阿里旺旺可以群发短信吗?】
阿里旺旺可以群发短信哦。
【旺旺一次性可以群发多少短信?】
通过移动旺旺发送短信,每天最多可以发送1000条,单次最多可发送500条。只要您的移动旺旺帐户内有余额,发送总量没有限制。
【阿里旺旺绑定手机是否收费?】
移动旺旺以下两种情况是要收费的,其余都是免费使用:
1、使用移动旺旺(客户端)给其他用户发送短信,从我的短信帐户中扣费,0.1元/条;
2、当我离线时,用手机接收阿里旺旺(客户端)留言,从我的短信帐户中扣费,0.1元/条。
【离线后旺旺消息发到手机,功能如何启用】
参照如下,在移动旺旺的查询平台上,选择业务设置,勾选其中最后两个方框。
我被儿子“绑定”了 第5篇
过度补偿,
溺爱孩子引发家庭战争
我和老公闻强是高中同学,高二时开始恋爱,高三时我俩辍学私奔,到南方打工4年,之后回家乡举办了婚礼。婚后,我在市里租门面房开了一家女装店。
第二年,儿子涛涛出生了。那时我的服装店正处于创业的关键时期,我忙得分身乏术,根本没精力照顾孩子。
我是个非常要强的人,孩子刚刚满月我就去店里了,婆婆帮我照料孩子。孩子8个月时,婆婆执意要把孩子带回老家抚养。为了能够全身心经营服装生意,我只好同意了婆婆的安排。经过3年苦心经营,我的服装店生意红火,我很快又在商场租了专柜。闻强喜欢开车,在他的再三恳求下,我抽出资金,给他买了一辆出租车。
我和老公各有事业,儿子被婆婆照料得很好,我们的生活过得也算平静。可是涛涛3岁到市里上幼儿园后,我和老公就开始不断发生口角。原因是我给儿子买衣服、玩具都挑最好的,对儿子有求必应,使得儿子就像小皇帝,在家里说一不二。我觉得儿子那么小就把他送到了农村,现在回来了应该好好补偿他,不想让他再受一点委屈。而闻强则说,涛涛被奶奶照顾得挺好的,应该让他保持在农村的质朴本色,不能从小养成大手大脚花钱和任性的坏习惯。我们意见相左,就会发生争执,而且在行动上也开始较劲。儿子过生日时,闻强给儿子买了塑料小汽车,我则给儿子买了先进的遥控飞机。儿子刚开始非常喜欢玩爸爸送的小汽车,可当我按动遥控器让飞机上下翻飞时,儿子立即丢了小汽车,跑过来玩飞机。结果闻强悻悻地转身走了,两天都不和我说话。
随着我生意规模的不断扩大,我的自信心爆棚,在店里说一不二,在家里也容不得闻强提意见。而闻强每天开出租车,累死累活也挣不了几个钱,投资其他生意,每次都是赔钱。他不仅在事业上帮不了我,在教育孩子方面还与我事事顶牛。我对他越来越失望,也越来越懒得跟他说话。
我把希望都寄托在涛涛身上,发誓要把儿子培养成才。在涛涛5岁时,我就给他报了跆拳道班、美术班、英语班。我风雨无阻地接送他,无微不至地照顾他,走到哪儿带到哪儿,利用一切时间教他看图识字、记英语单词。涛涛很快成了我的“小尾巴”。
夫妻争吵,
儿子成了家庭“调解员”
因为把孩子作为生活的重心,我对闻强越来越忽视、冷淡。我们彼此忙着各自的事,甚至三五天见不着一面,即使见面也感觉无话可说,我说的他不感兴趣,他说的我不认同,生活平淡乏味。但是一想到儿子,我就感觉拥有了一切。
儿子12岁那年,我发现闻强经常夜不归宿,我问他时,他都说“拉长途了,当天赶不回来”。我知道他以前从来不接长途活儿的。女人的敏感让我警惕起来,我开始留心他的行踪。结果,我悲哀地发现,老公出轨了,那个女子比他小5岁,是加油站超市的营业员。
我和闻强的冲突骤然升级。我骂他没良心,当初为了他,我断送了学业、疏远了亲情,10多年辛苦打拼挣钱,都是为了这个家。而他不仅不往家里拿一分钱,反而在外面养女人。此后,争吵哭闹成了家常便饭。每当这时,闻强要么冷漠地说:“想过就过,不想过就离。”要么就一句话不说,摔门走人。涛涛每次都坚决地站在我这边,指责爸爸背信弃义,甚至给爸爸撂下狠话:“你敢跟我妈离婚,我就一辈子都不认你这个爸爸!”他还给奶奶打电话替我抱屈。
儿子是我的依靠,他给了我生活下去的希望和勇气。每当我和闻强陷入冷战,心情烦闷时,儿子就成了我最好的倾诉对象。他接纳我的艰辛、委屈,而且像个小男汉似的劝慰我说:“妈,别伤心,有我呢,别和我爸计较太多。”
有一段时间,闻强采取各种办法拉拢涛涛,想和儿子建立统一战线。比如,平时花钱非常节俭的他,居然花2000多元给儿子买了一套名牌运动衣;平时根本不喜欢足球的他,居然托关系给儿子买了省体育馆足球赛的门票,并且开车陪儿子去看。当我们发生冲突、双方各执一词时,闻强就会找儿子评理。这时儿子会像个调解员似的这边说、那边劝,居然也让战火熄灭了。涛涛感觉自己像家庭的保护神,有时他看我独自伤心,还会主动找理由让爸爸回来,调和我们的关系。闻强和我都是爱孩子的,为了不让涛涛失望,我们会暂时表面上和好一段时间。
然而孩子的约束作用毕竟有限,闻强的心早已不在这个家里了,我对他的怨恨也更是难以消解。在涛涛上初二那年,我和闻强办了离婚手续。闻强开着他的出租车净身出户,四室两厅的房子只剩下我和涛涛了。
婚姻失败了,儿子成了我全部的希望和寄托。为了涛涛我可以不惜一切代价,吃穿用居都是最好的。在他上初三那年,因为我忙于生意,怕他营养跟不上,我还专门请了保姆给他做饭。让我欣慰的是,涛涛的成绩非常好,一直稳居全班前5名。有这样懂事、上进的儿子,我感到所有的付出都是值得的。
被儿绑定,
我失去了再嫁的自由
去年,涛涛考上了市重点高中,学校要求进行为期一周的封闭式军训。我兴冲冲把儿子的被褥和洗漱用品送到学校,帮他找到寝室床位、铺好床铺才走。这是儿子从上幼儿园以来第一次离开家住,虽然有点不舍,但毕竟是儿子独立生活的开始,我希望他尽快适应新环境。
第三天上午,儿子打来电话,说他不想住寝室了,想回家住,让我给班主任沟通一下。我劝他别搞特殊,军训之后再回家住。他立即情绪激动地说:“你要不去给老师说,我就不上学了。”还没等我反应过来,他就挂了电话。我知道他冲动起来会不计后果,只好找班主任沟通。班主任说这是学校的硬规定,他也做不了主,要给年级主任说。我又找到年级主任,好说歹说,主任才同意涛涛以有病需要按时服药的理由回家住。
涛涛回来之后,给我一个拥抱说:“老妈,我就知道你舍不得让儿子受罪。我终于可以不用自己洗袜子、不用闻同学的臭脚味了,还是家里好啊!”我虽然有一丝隐忧,但是难得儿子如此高兴,便不再多说。儿子在家过着衣来伸手、饭来张口的生活,他只需要管好自己的学习就行了。我自我安慰说,现在尽量为儿子提供方便吧,等他考上大学之后,自然就好了。
半年之后,又一件事引发我对儿子的担忧。我离婚两年多了,不断有朋友劝我再婚,其中商场里一位卖男装的姚先生对我早有意思。我怕影响涛涛一直没敢和他过多接触。过完春节,他把话挑明了,并表示将来会对涛涛视如己出。回家之后,我把这件事给涛涛说了,问他是否同意。没想到他坚决反对,还愤愤地说:“如果你再嫁人,我就离家出走!”这简直太出乎我意料了,我以为儿子会非常体谅我并欣然同意的。看着儿子生气的样子,我只好对他保证以后不跟姚先生来往了。
虽然这样说,但是有些应酬是没法推托的。一天晚上,商场服装部经理召集服装店老板聚会,我和姚先生都去了,并且都喝了点酒,他的司机送我们各自回家。我到家时已经快11点了,刚走到小区门口,就看到儿子在等我。当时我挺感动的,以为儿子来接我呢。没想到儿子看到我从姚先生的车上下来,还带着一身的酒气,扭头就走了。回到家,他给他爸爸打电话,说我在外面找了野男人。如此难听的话从儿子嘴里说出来,我气得浑身哆嗦,第一次动手打了他一记耳光。没想到,他忽地站起来,把我推倒在地上,拿起书包就跑出去了。我愣了片刻,酒醒了许多,急忙起身去追,可是儿子早已消失在夜色里不见了踪影。那夜,我找遍附近的网吧,打遍了他同学朋友的电话,都没有找到他。直到第二天上午,我得知他在教室上课,才放下心来。
从这件事之后,儿子对我回家晚非常敏感,总是问我是不是又去约会了,他还劝我和闻强复婚。我给他解释说:“你爸已经结婚了,不可能再和我复婚的。”他说:“爸爸还可以离婚再娶你的,如果爸爸不回来,还有我陪你,反正你不能找另外的男人。”我真是有口难言。为了不影响儿子的学业,我只好忍耐寂寞。
我心里一直不解儿子怎么会这样对待我,直到心理咨询师对我说,这是我不恰当的教育方式造成的。在一家三口人的关系中,由于我过分地关注儿子,造成母子关系过分亲密,夫妻关系疏远。当我和老公产生冲突时,我与儿子建立联盟来对付老公,让儿子学会了控制别人。离婚后,我从夫妻两人世界中退出,更加专注母子关系。儿子感觉到,是他和我联手赶走爸爸的,所以心怀愧意,心里始终留着爸爸的位置,不允许别人取代。因此他会想方设法干扰我再婚。而且儿子从我与老公的争斗中看到了自己的价值,慢慢地学会运用自己的方法有效地控制我,争取到自己最大的利益,尽最大可能地享受我的照顾。而我只能和他“绑定”在一起,成为被他“驱使的仆人”。
听了心理咨询师的分析,我后悔万分。过度补偿儿子,不仅让我失去了爱情和家庭,而且也毁了我和儿子的生活。如果可以重来,我愿意做一个让儿子独立自强的妈妈。
绑定技术 第6篇
我台音频工作站网络建于1999年, 已运行了十三年。这十三年期间随着电台业务的扩大, 播出频率由过去的3套增加到现在的5套, 网络功能站点也增加了, 此间对系统也进行了几次较大的技术改造, 比如更换主服务器, 升级录制播出软件。随着主服务器中音频文件和数据库中数据的不断增加, 对主服务器的稳定运行和所有播出站数据的快速读取造成了很大压力, 播出站播放音频文件时会出现网络反映慢或卡的现象, 严重影响了安全播出。网络性能下降问题日渐突出, 是我们技术部门需要迫切解决的问题。
1 存在问题的分析
我台音频工作站网络系统构成情况如下:1台主服务器, 1台备服务器, 1台交换机, 5个播出工作站, 1个备份播出站, 7个录制站, 2个慢录站, 1个管理站, 1个广告编排站, 7个审听站。网络系统连接情况如图1。
由图可见网络存在的问题:
(1) 网络结构简单, 采用集中式架构, 所谓的集中式就是在服务器上设置一个总的数据库和存储, 将所有频率的录制和播出的音频资料均存放在一起, 所有工作站的操作 (包括音频文传递和数据库的检索) 均通过主干网在服务器中进行存取, 在网络数据流量大的情况下, 网络就会出现阻塞或反映慢的问题。
(2) 主服务器到交换机实际上是单链路传输数据 (图中实线部分) , 虽然作了备份链路 (图中虚线部分) , 但是主链路出现问题时需要手动设置备份链路后才能使用, 无法自动接管。交换机到各工作站也是单链路数据传输, 没有链路上的冗余。网络核心部件交换机无热备, 万一出问题, 整个网络瘫痪。
(3) 工作站网卡接头日久氧化、性能下降和接触不良都会成为数据传输的障碍。我们对发生故障的播出站的所有日志记录进行分析, 发现网卡工作情况不稳定, 连接状态会出现瞬间down的情况。
2 解决方案和实施
2.1 问题的解决
面对存在的问题, 我们技术部门本着低成本、高效率的原则, 在现有条件下着手对网络进行改造。经过了解和实践, 网卡绑定技术能解决存在的问题。一方面能解决单链路数据传输的风险, 为数据传输提供冗余链路;另一面可以在网络通道或网卡正常状态下增加安全系数, 实现网卡负载均衡和任务分担, 当其中有网卡发生问题时冗余网卡能够实现自动无缝转接, 不影响正常音频数据的传输, 网卡绑定技术的运用是实现安全播出的一种切实可行的好方法。
2.2 网卡绑定技术的介绍
网卡绑定, 就是通过软硬件设置将两块或多块网卡虚拟成一块网卡, 使用一个IP地址。使用网卡绑定可以增大带宽, 理论上如果一块网卡带宽是100M, 两块网卡就是200M。多块网卡绑成一块网卡后一起同步工作, 对服务器的访问流量均衡到每块网卡上, 这样每块网卡负载压力减小, 抗并发访问能力提高, 保证服务器访问的畅快。同时网卡绑成一块网卡后, 当其中一块网卡发生故障时, 其它网卡自动无缝接管, 保证网络服务不中断, 实现了冗余容错。
2.3 硬件的配置
在主服务器上再增加一块网卡, 在播出站上增加一块网卡, 增加一台交换机, 与原交换机进行级联, 主服务器上原有的集成网卡和光纤网卡接交换机1, 新增网卡接新增的交换机2, 这样主服务器到交换机有三条传输链路, 两条链路承担数据流, 另一条链路作为备份链路。播出站上两块网卡分别接在两台交换机上, 这样的网络结构实现了双链路数据传输和链路的冗余, 可以扩展网络带宽, 减少响应时间, 实现网络负载均衡和容错, 提高网络的数据传输能力。改造后的网络系统连接情况如图2。
2.4 安装与设置
(1) 服务器端网卡绑定的配置
主服务器上原来有两块网卡 (一集成网卡一光纤网卡) , 再增加一块D-LINK网卡, 安装好驱动程序和Broadcom Advanced Control Suite3软件, 利用该软件将三块网卡集中在一起作为一个组, 对网卡进行合理配置来实现负载均衡、容错。因为“broadcom分组向导”建立组的类型有几种, 比如智能负载均衡和故障转移和SLB禁用自动回归。我们在创建组Team时选择禁用自动回归SLB。禁用自动回归SLB和智能负载均衡和故障转移类型一样, 就是所有负载平衡成员均出现故障时, 由备用成员处理通信量 (即故障转移事件) 。值得一提的是, 必须是在所有负载平衡成员均出现故障之后, 备用成员才会接管。当一个或多个负载平衡成员重新恢复 (即回归) 时, 通过手动设置, 由已恢复的组成员重新接管通信量的处理。具体创建过程只需按提示操作即可。配置完成后如图3。
我们将Broadcom Netxtreme Gigabit Ethernet集成网卡和Intel (R) PRO/1000MF Server Adapter光网卡作为负载均衡的成员, 处在活动状态, 共同承担数据流。新增的D-Link Dge-530t Gigabit Ethernet Adapter网卡作为备用成员, 处于非活动状态, 不会主动接收发网络通信量, 但是由它侦测负载均衡成员是否有失效, 当侦测到集成网卡和光网卡同时失效时, 新增网卡就会自动接管处理通信。这样的配置实现了传输链路的“双保险”。然后点“网上邻居”打开属性会发现多了一个team连接, 再点击team连接设置好IP地址。
(2) 播出站上双网卡绑定的配置
在播出站上做双网卡绑定。再增加一D-LINK网卡, 装好驱动程序, 再安装NIC Express软件, NIC Express安装时要注意开启LOAD Balancing功能, 要选择“Enabled。绑定后的网卡组如图4所示, 虚拟网卡名为“bc”, 和单一的网卡使用完全一样。打开“网上领居”属性, 多出一个bc连接, 点bc连接属性, 为bc虚拟网卡设置IP地址。这样播出站就是一个双网卡冗余的播出站了。
3 网络测试
整个系统设置完成, 对网络性能进行测试。
(1) 使用播出软件测试
因为启动播出软件时需要读取服务器数据库, 能真实反映问题。测试结果:软件启动过程只用了3秒, 比改造前启动播出需11秒明显改善。
(2) 在节目播出过程中是否会中断进行测试
首先播放一个音频节目, 再运行ping 192.168.0.188/t命令, 然后拔掉其中一个与交换机1相连的网线头, ping命令结果如图5所示, 网络连接正常, 无中断现象, 另一网卡自动接管工作, 承担了数据传输任务如图6所示, 节目播放正常无中断现象, 再拔掉另一个与交换机2连接的网线头, 网络连接也正常。用同样方法对主服务器进行测试, 播出也正常。
4 结束语
自从网卡绑定技术在音频工作站网络中应用以来, 播出站读取音频资料慢或卡的现象得到明显的改善, 是保障安全播出的又一强有力措施, 为电台完善安全播出提供了新途径。
浅谈弹性骨骼绑定的优势 第7篇
关键词:弹性骨骼绑定,骨骼形变,测量距离写表达法,节点乘除法
一、弹性骨骼绑定的概念
骨骼绑定环节涉及骨骼创建、控制器创建、约束和蒙皮, 目的是让角色能跟随骨骼运动, 完成动作和表情表演。弹性骨骼绑定就是在常规骨骼绑定的基础上, 通过MEL和其他技巧的应用, 完成骨骼绑定的高级设定, 使骨骼能够拉伸变形, 以便完成更丰富的动画表演。
二、实现弹性骨骼绑定的方法
骨骼的拉伸控制一般运用在四肢和脊柱, 实现骨骼弹性的原理几乎一致, 但有不同的实现方式。大部分情况下, 脊柱是通过spline IK来连接的, 有一条样条曲线, 我们用节点乘除法来完成骨骼的弹性设置。手臂和腿大部分是用旋转平面IK来做的, 要用测量工具来得到骨骼长度, 然后通过表达式来完成骨骼的弹性设置, 也就是测量距离写表达式法。
(一) 运用测量距离写表达式法对骨骼绑定进行弹性化处理
在两骨骼间创建distance tool, 我们会得到两个locator和一个distance Dimension Shape (测量器的名称) 。将首尾两个locator分别点约束到相应的骨骼和控制器上, 我们就得到了两个骨骼间的距离值。我们将控制器向下拉至关节被拉直, 再查看测量器的数值, 这个数字便是骨骼要拉伸的起点值。假设起点值为10。选择骨骼测试它的变化方向, 假设它是在X轴方向上发生伸缩变化的。打开Expression Editor编写Expression,
意思是:如果测量器的当前距离大于等于10, 大腿骨和膝盖骨的X轴缩放值就是测量器当前距离与起始值10的比值, 否则, 骨骼的缩放值就为1, 即骨骼不产生拉伸。这样腿骨就可以有弹性了。
(二) 运用节点乘除法对骨骼绑定进行弹性化处理
脊柱骨骼在完成IK Spline Handle Tool操作后会自动出现一条曲线, 此时我们通过控制样条曲线来控制骨骼。但此时的曲线并没有有关长度的输出信息, 所以我们用arc Len maker命令为脊柱曲线创建curve Info节点, 该节点体现的是脊柱曲线的当前长度信息。为脊柱曲线添加Multiply Divide节点, 将operation改为divide并将样条曲线的长度值复制给该节点的input1和input2的X轴参数值。将样条曲线的当前长度值 (arc Length) 与节点的input1的X轴参数相关联, 再将该节点的X轴输出参数 (output X) 与其属性arc_scale相连接。因为output X是input1与input2X的比值, 所以arc_scale表示的就是样条曲线当前长度与原始长度的比值, 也就是骨骼的缩放值。这样, 脊柱就可拉伸了。
经过节点乘除法的操作, 脊柱已能进行整体的拉伸, 我们再为每节脊柱骨骼进行单独地设置, 使每节骨骼都能单独形变, 从而为动画师的操作提供更多的选择。首先我们为脊椎骨创建单独的控制器, 然后编写脚本, 完成后, 随着控制器的移动, 脊柱骨在Y轴与Z轴的缩放值也产生相应的变化。这样脊柱骨骼不仅可以整体拉伸还可以单独缩放, 细化了弹性骨骼绑定。
三、浅谈弹性骨骼绑定的优势
(一) 弹性骨骼绑定使骨骼能拉伸形变
在普通的绑定中, 被赋予IK手柄的骨骼, 骨骼长度被固定, 那它的活动范围就是以骨骼长度为半径的球形空间。但当骨骼经过弹性化设置后, 控制骨骼的IK手柄能自由延伸, 骨骼的长度也可自由地延伸, 它的活动范围也不再受局限。
弹性骨骼绑定使骨骼能拉伸, 还能使骨骼发生粗细变化。在上文提到的脊柱绑定中, 脊柱骨骼不但能伸缩, 且骨骼的粗细会随着长度的变化而变化。这样的绑定相较普通的绑定而言已有了丰富。除此之外, 我们还用单独的控制器控制脊柱的单骨骼, 使每一节的骨骼单独发生变化。从此我们看出弹性骨骼绑定丰富了骨骼的形变, 使角色的表演有了更大的空间。
(二) 弹性骨骼绑定增加角色表演的真实性
一个角色是否真实不仅在于它的外表给人带来的视觉感知, 还在于它的运动状态。角色的动作是否自然, 将给观众直接的感受去判断角色表演的真实性。如要表现女孩深吸一口气说话, 当女孩吸气时会挺胸抬头, 脊柱要略向后仰, 胸骨也略微抬高, 而且吸气时腹部也会收缩变细一点。因为我们的骨骼可以伸缩, 骨骼的粗细也会随着骨骼长度的改变而改变, 并且有单独的控制器加以扩充效果, 所以我们可以很轻松地表现女孩的深吸气。而在一般的绑定中, 因为骨骼无法拉伸收缩, 所以虽然可以表现女孩的动态, 但无法表现女孩吸气时肢体出现的细微形变, 而正是这些细节增加了角色表演的真实性。物体在受到力时, 形态和体积会发生改变, 只是由于物体质地和受力大小的不同, 形变程度也不同。在动画中, 动画师会把这一现象适当夸大, 使角色动作在保持真实性的同时, 还充满弹性与张力, 给观众更强烈的视觉感受。
(三) 弹性骨骼绑定方便动画师操作
普通的骨骼绑定限制了角色肢体的活动范围, 也因肢体活动范围的限制让动画师放弃了一些好的想法。弹性骨骼绑定为动画师提供了更多的选择, 让他们可以随心所欲地调动画。在弹性绑定中, 角色的四肢可随意地直接地拉长, 而且我们为它设置了弹性开关, 即打开开关时, 骨骼可以随意拉伸, 关掉开关时, 骨骼便不能拉伸。且脊柱可整体伸缩形变, 也可由单独控制器调节单骨骼的形变。这样的骨骼绑定提供了细致丰富的控制, 让动画师可更好地控制表演。
在一些弹性骨骼绑定中, 骨骼拉伸的效果是通过滑动中建调整或直接填写相关属性的数值来实现的, 这样的操作不够直接方便。当骨骼的拉伸直接与控制器的位移关联, 我们只要移动控制器就可以决定骨骼是否拉伸以及拉伸的程度, 这种操作更加的直接灵活, 也更加的准确。
四、结语
动画是一个团体的工作, 它的每一个环节都相互关联, 做好一部动画需要各环节不停地交流更改。绑定也是其中重要的一环, 它直接影响动作表演, 所以好的绑定至关重要。我们在实践中体会了弹性骨骼绑定的优势, 它使骨骼能自由拉伸, 使角色能发生形变, 易于角色表演真实性, 趣味性的表达。同时它操作的便捷和丰富的效果也让动画师能更轻松的工作。
参考文献
[1]理查德·威廉姆斯, 黄木村.《原动画基础教程——动画人的生存手册》.中国青年出版社《现代动画艺术》.北京师范大学出版社.
[2]孙立军, 马华.《影视动画影片分析》.海洋出版社.
绑定技术 第8篇
为了能够让SQL语句共享执行计划, Oracle始终都是强调在进行应用系统的设计时, 必须使用绑定变量, 也就是用一个变量来代替原来出现在SQL语句里的字面值。比如, Se- lect col1 From t Where col2 = ?, Oracle在shared pool里进行硬解析, 并生成最终的执行计划。以后直接把执行计划拿来使用即可, 不需要再次生成执行计划。但是, 生成执行计划本身是基于概率的理论, 在不访问具体表里的数据的前提下, 根据where条件, 来猜测返回的记录数大概是多少, 从而判断应该采用怎样的访问路径。很明显, 这是一定要参照具体where条件里的值才能进行猜测的。这样就与节省CPU的初衷产生了矛盾, 因为节省CPU的关键是使用绑定变量, 一旦使用了绑定变量, 则Oracle就不知道具体的字面值了吗。
为了解决这一问题, Oracle引入了绑定变量窥视。所谓绑定变量窥视, 就是指Oracle在第一次解析SQL语句的时候, 会将输入的绑定变量的值带入SQL语句里, 从而参考字面值来猜测该SQL大概会返回多少条记录, 从而得到优化的执行计划。以后再次执行相同的SQL语句时, 不再考虑所输入的绑定变量的值, 直接取出第一次生成的绑定变量。
但是很可惜, 使用绑定变量从而共享游标与SQL优化是两个矛盾的目标。Oracle使用绑定变量的前提, 是Oracle认为大部分的列的数据都是分布比较均匀的。从而使用第一次的绑定变量的值所得到的执行计划, 大多数情况下都能适用于该绑定变量的其他的值。很明显, 如果第一次传入的绑定变量的值恰好占整个数据量的百分比较高, 从而导致全表扫描的执行计划。而后来传入的绑定变量的值都占整个数据量的百分比都很低, 则应该走索引扫描会更好, 但是由于使用了绑定变量, 从而Oracle并不会再去看绑定变量的值, 而是直接拿全表扫描的执行计划来用。这时, 由于使用了绑定变量, 虽然达到了游标共享, 从而节省CPU的目的, 但是SQL的执行计划却不够优化。
那么如何在绑定变量和SQL优化之间进行取舍呢? 在OLTP应用中 , 由于并发性较高 , CPU上的争用会比较严重 , 同时SQL本身执行时间较短, 涉及到的数据量较少, 解析所占的时间在整个SQL执行时间中占的比例较高, 而花在I/O上的时间占的比例较低。因此尽管绑定变量会有SQL不够优化的问题, 还是建议使用绑定变量。但是在DSS应用和数据仓库应用中, 由于并发性较低, CPU上的争用较轻, 同时SQL语句的执行时间都很长 , 而且主要时间花在等待I/O上 , 而解析占的比重较低, 这时优化SQL执行计划的重要性就体现出来了。因此, 建议不要使用绑定变量, 而直接使用字面值。但是大多数的情况都是混合应用, 既有OLTP又有数据仓库, 这时就很难完美地解决该问题了。
2 Oracle11g 之后的动态绑定变量窥视
而从11g开始, 这个尴尬的问题开始得到了改善。因此从11g开始, 引入了所谓的自适应游标共享 (Adaptive Cursor Sharing)。该特性是一个非常复杂的技术 , 用来平衡游标共享和SQL优化这两个矛盾的目标。11g里不会盲目地共享游标, 而是会去查看每个绑定变量, 并为不同的绑定变量来产生不同的执行计划。而Oracle这么做的前提是, 使用多个执行计划的所带来的收益, 要比产生多个执行计划所引起的CPU开销要更大。
使用自适应游标共享时, 会遵循下面的步骤:
(1) 一条新的SQL语句第一次传入shared pool时 , 还是和以前一样, 进行硬解析。而且进行绑定变量窥视, 计算where条件各个列的selectivity, 同时如果绑定变量所在的列上存在直方图的话, 也会去参考该直方图来计算selectivity。该游标会被标记为是一个绑定敏感的游标 (bind-sensitive cur- sor)。同时 , Oracle还会保留包含绑定变量的where条件的其他信息, 比如selectivity等。Oracle会为该谓词的selectivity维持一个范围, Oracle叫做立方体 (cube)。只要传入的绑定变量所产生的selectivity落在该范围里面, 也就是落在该cube里面, 就不产生新的执行计划, 而直接拿该cube所对应的执行计划来用。
(2) 下次再次执行相同的SQL时, 传入了新的绑定变量, 假设使用新的绑定变量的谓词的selectivity落在已经存在的cube范围里, 于是这次SQL的执行会使用该cube所对应的执行计划。
(3) 相同的查询再次执行时 , 假设所使用的新的绑定变量导致这时候的selectivity不再落在已经存在的cube里了, 于是也就找不到对应的执行计划。于是系统会进行一个硬解析, 这将产生第二个新的执行计划。而且新的selectivity以及对应的cube也会保存下来。也就是说, 这时, 分别有两个cube以及两个执行计划。
(4) 相同的查询再次执行时 , 假设所使用的新的绑定变量导致这时候的selectivity不落在现存的两个cube中的任何一个, 所以系统又会进行硬解析。假设这时硬解析所产生的执行计划与第一次产生执行计划一样, 也就是说, 在第一次评估selectivity的cube时过于保守, 导致cube过小, 进而导致了这一次的不必要的硬解析。于是, Oracle会将第一次产生的cube与这次产生的cube合并成一个新的更大的cube。那么 , 下次再次进行软解析的时候, 如果selectivity落在新的cube里, 则会使用第一次所产生的执行计划。
绑定技术 第9篇
1. 美元本位制。
一国货币要想成为国际货币甚至关键货币, 往往遵循计价结算货币储备货币锚货币的发展路径, 而与大宗商品、特别是能源的计价和结算的绑定则成为该国货币崛起和充当国际货币的助推剂。20世纪70年代, 美国与沙特达成的“不可动摇协议”, 将美元确立为石油唯一计价货币。美元约等于石油成为世界共识, 任何想进行石油交易的国家不得不把美元作为储备。目前欧佩克 (OPEC) 一篮子平均价所监督的七种原油就以美元作为交易计价货币, 几乎包括了世界上最重要的石油现货交易市场。同时世界前两大石油期货市场的纽约商品交易所、伦敦国际石油交易所都以美元作为计价和结算货币单位。从而保证了美国对石油大宗商品的国际定价权。近年来尽管美元不断下跌, 伊朗改用欧元计价, 俄罗斯成立卢布计价的石油交易所, 但在全球石油贸易中可谓微乎其微。正是借助二战时期对盟国石油输出崛起乃至延续至今对中东油源的强力控制, 以及掌握国际石油期货市场的定价权, 美元得以持续垄断大宗石油贸易交易媒介地位, 并以此巩固牙买加体系下国际货币格局的美元本位制。
2. 美元本位制给美国带来的利益:
(1) 享受铸币税收益。由于现今的货币体系是以美元为本位制的货币体系, 美元是其中最关键的货币, 并且只有美国才能发行美元, 因此在美国政府发行美元的同时也就享受了全世界国家所缴纳的铸币税收益。 (2) 控制国际市场价格。一般认为商品的价格是由需求和供给两方面决定的, 当需求和供给达到平衡时产生一个均衡价格。但是人们往往忽视一点, 就是商品的价格是由什么货币标价的, 当这种货币的价值发生变化时, 商品的价格也必然发生改变。正是由于当前国际贸易和世界经济活动中大部分贸易品是以美元计价和结算的, 因此美国政府可以随意控制美元的升值或者贬值以达到对国际市场大宗商品价格的改变。 (3) 无偿使用各国资源。现行美元为本位的货币体系使得美元成为世界市场的硬通货, 各国的外汇储备中大部分也以美元作为储备, 各国中央银行干预外汇市场用的也是美元, 拥有美元就等于拥有了购买各国商品的能力。而美国政府能够无成本的发行美元来调节国际收支逆差所导致的储备损失, 只要各国持有美元储备, 美国就能在实际上免费使用各国的资源。
二、全球碳交易市场的现状和前景展望
自1997年《京都议定书》通过以来, 全球为应对气候变化做出了重大努力。根据共同但有区别的责任原则议定书把缔约国分为附件一国家 (包括发达国家和经济转轨国家) 和非附件一国家 (发展中国家) 。其中, 附件一国家必须承担一定的减排承诺, 规定在20082012年的第一承诺期须将六种温室气体的排放量削减5% (以1990年的水平为基础) 。为达到这个水平, 附件一国家采取不同的量化限排和减排承诺, 如欧盟15国减排8%、美国减排7%、日本减排6%等。同时, 规定还引入了三种灵活机制, 协助附件一国家尽量降低履行减排义务的成本。三种灵活机制包括国际排放交易 (IET) 、联合履行 (JI) 和清洁发展机制 (CDM) 。但无论是那一种机制, 其核心都是将二氧化碳排放权量化, 容许进行买卖和交易, 使企业在全球范围内获得最廉价的减排成本。
经过多年的发展, 碳信用交易市场的市场架构愈来愈成熟、规模和交易金额愈来愈大 (见下页表1) 。
从下页表1中可见全球碳交易市场发展迅速, 不论是交易量还是交易额都成倍增长, 2007年交易额已从2006年的300亿美元上升到630亿美元。2008年全球碳排放交易额更是达到了1 263亿美元, 比2007年增长了1倍。在20092012年间, 全球碳交易市场规模每年预计可达1 300亿美元, 到2012年将有望超过石油, 成为第一大市场。
三、碳交易计价结算货币的现状和选择
“石油美元”的崛起展示了一条清晰的关键货币地位演化之路。正是由于美元对国际贸易中最大宗商品石油的价格绑定, 使之成为国际市场中的计价和结算货币。因此, 当未来低碳经济模式成为各国政府经济增长的目标模式, 伴随着清洁能源技术的突破和发展, 碳信用交易不断发展壮大, 在未来货币格局演变中, 与碳交易标的的捆绑程度, 将成为国际货币的重要条件, 而捆绑的起点仍是标价权, 而这将对打破单边美元霸权促进国际货币格局多元化产生重要影响。
单位:百万吨, 百万美元
资料来源:The World Bank, State and Trends of the Carbon Market 2009, May 2009。
由于碳交易市场供给方比较多元, 包括发达国际、经济转型国家和发展中国家, 因此很难形成以单一货币为计价的模式, 客观上存在碳计价结算货币的多元化趋势。
目前, 国际碳信用交易市场主要包括两个组成部分:配额型交易市场和项目型交易市场。其中配额型交易市场是发达国家与发达国家间碳交易的联通机制, 项目型交易市场是发展中国家与发达国家间碳交易的联通机制。由表1可见, 在配额型交易中欧盟排放交易体系 (EU ETS) 在全球碳交易市场中遥遥领先, 交易量占全部市场交易量的比例2007年为69%, 2008年为64%, 交易额则分别为78%和73%。同期, 澳洲新南威尔士温室气体减排体系, 芝加哥气候交易所的发展也都呈明显上升趋势。由于欧盟排放交易体系的碳交易属于欧盟发达国家间的贸易交易, 因此全部采用欧元计价和结算, 由此欧元无疑将控制占全球碳市场价值70%多的碳交易货币计价和结算绑定权, 成为碳现货和碳衍生品场内交易的主要计价结算货币, 同时一直以来英国都是碳减排最坚定的执行国, 尽管英国排放交易体系 (UKETS) 已并入欧盟排放贸易体系 (EU ETS) , 但伦敦作为全球碳交易中心的地位已经确立, 英镑作为碳交易计价结算货币的空间能够继续保持。由于日元本身已经在世界通货中占据一定地位, 伴随碳交易体系的开展, 加上日本绝对领先的碳减排技术出口空间, 日元将成为碳交易计价结算的第三货币。尽管澳大利亚尚未加入京都协定, 但新南威尔士温室气体减排体系 (GGAS) 却是全球最早强制实施的减排体系之一。澳大利亚的温室气体排放交易制度将于2010年正式实施, 以澳元计价。作为GGAS的延续, 澳元仍将在全球碳交易计价结算货币中占有一席之地。
在项目型交易中, 清洁发展机制 (CDM) 的交易量和交易额占了主要比重, 但是增长相对较缓。中国是CDM的最大供给国, 但是由于人民币没有实现资本项目下的可自由兑换, 很难成为结算货币。因此中国在项目型交易中主要采用美元计价和结算, 客观上提升了美元在国际碳交易市场的计价结算比例。
碳交易的兴起和与之相关的低碳能源的发展, 将是引领货币格局多元化发展的一次契机, 目前看来, 欧元已经领先, 美元紧随其后。随着越来越多国家参与低碳革命和全球碳交易, 各国货币将在低碳能源计价和结算领域展开竞争, 谋求一席之地, 必将对现有美元本位的国际货币体系产生影响甚至冲击。
中国作为清洁发展机制 (CDM) 的最大供给国, 2008年中国CDM项目产生的认证减排量 (CER) 成交量已占世界总成交量的84%。中国应当抓住机会, 争取碳项目市场定价权, 提高人民币成为碳交易计价结算货币的比例。随着中国本土自愿减排市场的建立, 这个情况应当会有所改观。打造中国的碳金融中心和加强本土碳资产定价权, 是加速人民币国际化的必要途径。未来通过国内碳金融体系的建立, 伴随人民币碳基金和其他人民币碳金融产品的推出, 必将助推人民币国际化进程。
摘要:一国货币与全球大宗商品计价结算的绑定往往成为该种货币成为国际货币的关键, 通过对当前国际货币计价结算体系的论述以及对全球碳交易市场现状和前景的展望, 分析了随着低碳新能源的兴起, 当前以美元为本位的国际货币体系将面临挑战, 货币格局多元化的趋势将逐步形成。
关键词:碳交易,货币体系,绑定权
参考文献
[1]任卫峰.低碳经济与环境金融创新[J].上海经济研究, 2008, (3) .
[2]王颖, 管清友.碳交易计价结算货币:理论、现实与选择[J].当代亚太, 2009, (1) .
[3]李挚萍.《京都议定书》与温室气体国际减排交易制度[J].环境保护, 2004, (2) .
[4]王留之, 宋阳.略论中国碳交易的金融创新及其风险防范[J].现代财经, 2009, (6) .
当手机绑定学生话费之后…… 第10篇
自2010年起,山东省某学院每年新生入学时都会给每一位新生发一部手机,里面带有200元费用,学生入学时补交。这部手机其实并不是一般的手机,学生在校期间出入校门,到食堂就餐,到图书馆借阅书籍,上校园网学习等都必须要使用这部手机。按理说这应该是一件方便学生的好事,可是学生们却一直不太领情。为什么会这样呢?据同学们反映,手机信号不好,还常会出现其它故障。有的同学还反映,有时手机没电就没法吃饭了。既然给同学们造成这么多不便,那就干脆取缔这种手机一卡通的管理方式就是了。不过,事情远没有这么简单。据记者调查,每位同学,不管你每个月打不打电话都必须缴纳39元话费,而且是直接通过手机扣除。这所学校共有约13000名学生,每年的话费总额巨大。又据记者调查,这所学校与当地电讯部门已签订了协议。协议规定:所得话费收入双方分成获取收益。具体按怎样的比例来分成,记者不得而知。
学校如此进行一卡通管理,如此精细地为学生的学习、生活服务,实则是有见不得阳光的猫腻的。
说实话,刚看到对这件事的报道时,笔者十分激愤,一时竟不知该说点什么才好。但是,仅仅是激愤就能解决好问题吗?我想,还是要谈几点看法,希望能够引起社会的关注,尤其是教育人的重视和反思。
第一,学校应该是讲究诚信的地方。常言道:人生一世,德为根本。这个“德”,有很大一部分就应该是诚信。学校是什么地方?没什么异议,显然是教书树人的地方。树人要树什么?首位的当是树德。树德当树什么?显然很重要的就在于树立诚信品格。然而,少数学校(像报道中的那所学校)明明是为了赚取学生钱财,却不惜采取不诚信的欺骗手段。表面上看,管理是到位了,关心和服务是精细又周到了,但这管理、关心和服务背后却是失信、欺骗,牟取钱财。这样的管理和服务行为,其最危害学生的地方其实并不仅仅在于学生按月“被付话费”,更在于这种不诚信的欺骗行为竟被美化和合法化了。这样一来,学校就自觉不自觉地培育了一种育人氛围,即有意无意地教学生学会用类似的手段去谋取利益。说起这种不诚信行为,在当下的各级各类校园简直就形成了一种“文化”。例如,学生社会实践活动造假,学生就业率造假,学校科研成果造假等。实话实说,这些“造假”行为的确都有其种种复杂原因,致使这些“造假”行为也就都常态化地存在着。尽管如此,学校该是最诚信的地方,应该尽可能地独洁己身,绝不可忽视一些所谓的“常态”对孩子们心灵的污染。
第二,学校应该是讲究法治的地方。《消费者权益保护法》明文规定:消费者有权自主选择商品或服务的权利。然而,有些学校甚至上级行政管理部门为了牟取部门(有时也是个人的)利益,却无视学生意愿,违背法律法规,强制学生统一订教辅资料、做校服、缴话费等。当然,有些“统一”在特定的情况下也许是必要的,如统一订购教辅资料、订做校服等,只要不是为了利益而以次充好。但是统一买作业本、假期补课、缴话费等,一般都是以谋取部门(或个人)利益为取向的,往往是只问金钱而不顾学生意愿,统统应该纳入违禁之列,坚决杜绝。否则,这种只认金钱而不惜违法的校园环境,很有可能就把一些学生都熏染成视法纪为个人发展障碍,谋取私利而不择手段的人。
第三,学校应该是清正公平的地方。这个“清”,应该理解为清廉、清明,这个“正”应该理解为正道、公正。学校应该处处体现民主、文明、和谐、自由、平等、公正,人人追求敬业、诚信、友善、奉献等。人民教育家陶行知早曾说过:“千教万教教人学真,千学万学学做真人”。说得通俗一点,真正的学校就都是通过教育实践来让孩子们学会做真人的地方,即让孩子们学习和做事中去自主体验、感受、思辨、感悟和提升,为他们以后的工作、生活打下基础。为此,学校的领导和教师必须人人做到“清正”,学校的教育教学必须时刻渗透“清正”,学校的文化环境必须处处培育“清正”。然而,在改革开放的新形势下,在金钱和利益面前,我们的一些学校不“清正”了,一些领导和教师不“清正”了,导致育人环境不“清正”了。这绝对是极为有害的。
用手机绑定学生话费的的做法,的确很有创意,但确实是不诚信、不守法、不清正的。问题暴露在该所学校身上,但这绝不等于说这仅仅是个个别案例。央视《焦点访谈》也指出了这所学校这种做法的严重危害性,但这也绝不等于类似的现象从此就销声匿迹了。当手机绑定学生话费之后,我们就该认真地究一究:为什么非要“绑定”呢?当学校非要强求学生统一做某一件事时,我们更要把良心放在清正的砧板上,随时准备经受法制利刃的切剁。
(作者单位:江苏泰州中学)
绑定技术 第11篇
ASP.NET是微软创建服务器端Web应用程序的核心技术, 它建构在Microsoft.NET Framework之上。ASP.NET不是对ASP的简单升级, 是在剔除了ASP诸多问题的同时, 融入了很多新的技术和控件, 这些新技术的融入使编程更容易, 更高效。ASP.NET提供的数据绑定技术和控件可以绑定任何数据源, 与此同时还支持对这些数据源进行排序、分页、编辑等操作。数据绑定技术中常用的数据绑定控件的功能也比以前大大增强, 其中最具有代表性的就是Grid View控件。Grid View控件是以表格的形式把数据显示出来, 它的工作原理是将数据源控件中的数据信息绑定、显示在表格中或者是将存放在Data Set数据集中的数据信息绑定、显示在表格中。本文就以Grid View为例, 详细介绍与其相关的高级数据绑定技术。
2 ASP.NET中的数据绑定方法
2.1 Grid View自身的数据绑定
2.2 使用Eval
其用法为:<%#Eval ("绑定字段", "{0}") %>或
<%#Data Binder.Eval (Container.Data Item, "绑定字段", "{0}") %>
Eval方法是用于数据绑定控件 (如Grid Veiw) 的模板中后期数据绑定表达式。在运行时, Eval方法调用Data Binder对象的Eval方法, 同时引用命名容器的当前数据项, 命名容器通常是包含完整记录的数据绑定控件的最小组成部分, 如Grid View控件中的一行, 因此只能对数据绑定控件的模板内的绑定使用Eval方法。
Eval方法包含两个参数, 第一个参数是要绑定显示的数据库中所对应的字段, 第二个参数用于指定要显示的数据的格式, 第二个参数为可选参数。
2.3 使用Bind
其用法为:<%#Bind ("xb") %>
Bind方法是ASP.NET中另一种最常用的数据绑定方法, 与Eval方法有相似之处, 但也存在着很大的差异。Bind方法可以像Eval方法一样轻易地绑定到数据库中要显示的字段, 但是Eval方法不支持数据的修改, 当数据可以被修改时, 还是要使用Bind方法, 也就是说用Eval方法实现的数据绑定是单向的, 而Bind方法可以实现双向的数据绑定。
在ASP.NET中, 数据绑定控件 (如Grid View) 可使用数据源控件自带的更新、删除和插入操作。例如如果已经为Grid View控件定义了select、delete、update语句, 对于使用Bind方法进行数据绑定的字段可以动态地更新其值, 也可以动态地从模板中的子控件提取值。
Grid View灵活自由的数据显示和自带的数据更新、删除等人性化的功能为开发人员提供了一种高效的开发途径, 但是为了满足高级开发人员的需要, Grid View还提供了多种多样的事件处理程序, 通过对这些事件处理程序进行编码, 开发人员可以实现Grid View更高级的数据绑定和数据处理工作。
下面是Grid View经常用到的几个事件:
Row Editing事件:点击编辑按钮时使视图切换到编辑状态;
Row Canceling Edit事件:取消当前行的编辑;
Row Updating事件:执行对当行数据的更新;
Page Index Changing:点击分页链接, 显示相应页面;
Row Deleting:删除当前行。
在编写上面这些事件程序的代码时, 除了完成事件本身要处理的任务外还要对Grid View控件重新进行数据绑定, 以便能够及时显示更新或修改后的数据。
3 Grid View控件的高级数据绑定
3.1 Grid View绑定到方法
在Grid View中, 通过将某一列转化为模板可以非常自由地控制该列的显示样式, 模板的使用大大扩展了格式化和表现绑定数据的方式。在很多情况下会用的一个关键技术是, 在页面类中加入一个专门的方法来处理字段值, 这样就可以突破简单数据绑定的限制并可以加入动态信息和条件逻辑等。
例如在创建学生的成绩报表时, 可能想在每行添加一列对当前学生成绩评定的信息, 这时需要根据当前行学生的成绩数据来显示相应的评定。例如当学生的成绩小于60分时, 显示“成绩不及格, 要加把劲奥!”, 如果大于90分, 会显示“你真棒, 要再接再厉奥!”。
下面的代码说明如何定义评定列:
下面是Get Status () 方法, 它通过检查成绩列的值, 返回不同的评定语:
这项技术的应用非常广泛, 比如可以通过公司员工的出生日期, 来计算员工的年龄列的值;可以根据根据被调查列的数据显示不同的图片, 甚至应用不同的样式。
在这里是通过使用模板来将Grid View中的某一列来绑定到方法, 除此之外, 还可以使用Grid View.Row Bound事件在Grid View第一次出现时修改它的显示内容而实现同样的功能。
3.2 通过Grid View实现汇总
Grid View的主要功能是用来显示数据库中的数据记录, 但是还可以通过自己设计来实现一些想要的其他功能, 如实现数据汇总。可以通过设置Grid View的Show Footer属性为真来显示脚注行, 脚注行中没有内容, 再通过编程的方式定制脚注行要显示的内容, 在此脚注行用来显示汇总数据信息。
通过一个产品价格汇总的实例来看一下汇总的代码实现。
第一步, 设置Grid View的Show Footer属性为true, 将脚注行显示出来。
第二步, 为了使脚注行显示内容, 要响应Grid View Data Bound事件。该事件在Grid View填充数据后立刻发生, 在这之后就不能再访问数据源了, 但是可以通过遍历Grid View行和列的集合来计算总数, 计算总数之后将其显示在脚注行。
下面是完整的代码:
实现效果如图1所示。
使用同样的方法可以计算出显示数据的平均数等其他的数据汇总信息。
3.3 Grid View中父/子视图的实现
可以很容地利用Grid View和Details View创建主从页面, 可以根据当前选定的父记录显示其子记录的灵活性。但有时候更希望创建一个父/子视图, 按照父记录组织同时显示所有子记录。例如, 可以创建一个按产品类别显示的产品列表。
在这里使用的主要技术就是在Grid View的行内在嵌入Grid View。首先将外层的Grid View设置成两列, 第一列用来显示产品的类别, 然后通过将第二列转换成模板在第二列中插入子Grid View来显示该产品类别下的所有产品。
这个实例包含两列, 两列都是模板列, 第一列显示产品类别信息, 及其描述, 第二列是一个嵌入的Grid View, 用来显示当前产品类别下的所有产品。可以注意到, 第二个Grid View的没有设置Data Source ID属性, 那是因为当父Grid View被绑定到它的数据源时, 内部Grid View的数据要通过编程来实现。
首先, 要创建两个数据源, 一个用于获取产品类别, 另一个用来获取特定类别的产品。
可以将第一个Grid View直接绑定到数据源上。
为了实现行内Grid View的数据绑定, 还需要实现相应Grid View的Row Data Bound事件, 在每次生成并绑定到Grid View时发生。此时, 可以从第二列获取Grid View控件, 并通过编程调用数据源的slelect () 方法把它绑定到产品信息。以下是所需完整代码:
实现效果如图2所示。
3.4 使用检查表编辑字段
在某些应用程序中, 经常会遇到一些值被限定在某一数据表中的某个字段的取值, 这种情况在对使用联合查询显示的数据进行编辑修改时时非常常见的, 也是会经常用到的。例如:SQLServer自带的North Wind数据库中的Product表和Categories表, 在读取数据的时候一般会使用联合查询显示两个表的相关信息, 即除了显示产品在Product表中的相关属性外还会显示该产品所属的产品类别 (该信息存储在Categories表中) , 在对产品信息进行修改 (产品的类别) 时可以通过一个下拉菜单将Categotries表中所有的类别显示出来让用户选择。所以在编辑或创建新产品时, 必须把Products.Category ID字段的值设为Categories表中某个Category ID的值。
处理这种关系时, 为编辑和插入操作使用检查表通常很有效。这样可以从名称的列表中选择类别而不用记忆Category ID的数值。如图3就显示了一个使用检查表简化类别选择的
Details View。
此种方法的独特之处在于可以使用数据源控件声明性的构建检查表。
页面需要两个数据源控件, 第一个通过联合查询获取类别名称信息来填充Details View:
这个查询取得Product表的所有行, 然后通过把Details View控件与此数据源绑定就可以显示某一产品的详细信息。
第二个数据源控件获取用于检查表的完整类别的列表:
最后一步是定义Details View控件, 这个Details View定义的关键是对Category字段使用模板, Details View的代码如下:
在只读模式下, 模板字段只显示原始查询中类别的名称, 此时并不使用检查表。
这个控件以两种方式绑定。首先, 它用Data Source ID从类别的检查表中获取数据。检查表通过Data Text Field和Data Value Field属性绑定到列表控件, 这样就建立了类别名称列表同时追踪每个项目的匹配ID。
这个实例的技巧在于下拉列表Selected Value属性, 它建立了Products表的绑定。Select Value属性通过数据绑定表达式获取当前Catagory ID的值。这样切换到编辑模式时, 正确的类别被自动绑定, 应用更新时, 选中的Category ID自动送回到数据源控件并作用于数据库。
4 结语
Grid View是最容易使用的数据绑定控件之一, Grid View具有内建的自动生成HTML表的出色功能, 每个记录生成HTML表中的一行, 每个字段生成HTML表中的一列。Grid View的出现使得基于表格程序开发的不论是从功能上还是在效率上都得到很大提高。从上面的数据绑定实例可以看出, Grid View除了能够利用所熟知的选择、分页、排序和编辑等功能之外, 还可以根据需求定制自己想要的数据显示方式来绑定数据。当前, ASP.NET技术迅速发展和完善, 程序语言版本不断升级, 同时为了满足开发人员的需求, 微软又推出了功能更强大应用更广泛的Visual Studio2010。当然, 上面所列举的实例仅仅是Grid View应用的一小部分, Grid View还有更多的功能和更丰富的应用等着大家去发现、探索与尝试。
参考文献
[1]ASP.NET中的数据绑定[EB/OL]http://wenku.baidu.com/view/bca94737ee06eff9aef8076a.html.
[2]刘亮亮, 潘中强.精通ASP.NET2.0数据绑定技术.北京:人民邮电大学出版社, 2008.
[3]周峰, 王征.ASP.NET3.5网络程序设计案例集锦.北京:中国水利水电出版社, 2009.
绑定技术范文
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。


