﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>博客园-DotNet笔记</title><link>http://www.cnblogs.com/tuyile006/</link><description>兴趣是最好的老师。</description><language>zh-cn</language><lastBuildDate>Sun, 05 Jul 2009 18:56:45 GMT</lastBuildDate><pubDate>Sun, 05 Jul 2009 18:56:45 GMT</pubDate><ttl>60</ttl><item><title>window.open() 和 window.showModalDialog() 的返回值</title><link>http://www.cnblogs.com/tuyile006/archive/2009/07/01/1514826.html</link><dc:creator>小y</dc:creator><author>小y</author><pubDate>Wed, 01 Jul 2009 08:48:00 GMT</pubDate><guid>http://www.cnblogs.com/tuyile006/archive/2009/07/01/1514826.html</guid><wfw:comment>http://www.cnblogs.com/tuyile006/comments/1514826.html</wfw:comment><comments>http://www.cnblogs.com/tuyile006/archive/2009/07/01/1514826.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/tuyile006/comments/commentRss/1514826.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/tuyile006/services/trackbacks/1514826.html</trackback:ping><description><![CDATA[<p><strong>用window.showModalDialog()&nbsp;&nbsp; 实现</strong><br />&nbsp;&nbsp;&nbsp; test1.htm&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; ===================&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; &lt;script&gt;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var&nbsp;&nbsp; a&nbsp;&nbsp; =&nbsp;&nbsp; window.showModalDialog("test2.htm")&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(i=0;i&lt;a.length;i++)&nbsp;&nbsp; alert(a[i])&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; &lt;/script&gt;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; test2.htm&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; ===================&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; &lt;script&gt;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; function&nbsp;&nbsp; sendTo()&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var&nbsp;&nbsp; a=new&nbsp;&nbsp; Array("a","b")&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; window.returnValue&nbsp;&nbsp; =&nbsp;&nbsp; a&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; window.close()&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; &lt;/script&gt;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; &lt;body&gt;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; &lt;form&gt;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input&nbsp;&nbsp; value="返回"&nbsp;&nbsp; type=button&nbsp;&nbsp; onclick="sendTo()"&gt;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; &lt;/form&gt; </p>
<p>&nbsp;</p>
<p><strong>用window.open() 实现</strong></p>
<p>test1.htm&nbsp;&nbsp; <br />&nbsp; ==========&nbsp;&nbsp; <br />&nbsp; &lt;!DOCTYPE&nbsp;&nbsp; HTML&nbsp;&nbsp; PUBLIC&nbsp;&nbsp; "-//W3C//DTD&nbsp;&nbsp; HTML&nbsp;&nbsp; 4.0&nbsp;&nbsp; Transitional//EN"&gt;&nbsp;&nbsp; <br />&nbsp; &lt;HTML&gt;&lt;HEAD&gt;&nbsp;&nbsp; <br />&nbsp; &lt;META&nbsp;&nbsp; http-equiv=Content-Type&nbsp;&nbsp; content="text/html;&nbsp;&nbsp; charset=unicode"&gt;&nbsp;&nbsp; <br />&nbsp; &lt;script&gt;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var&nbsp;&nbsp; a&nbsp;&nbsp; ='';&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; window.open("test2.htm");&nbsp;&nbsp; <br />&nbsp; function&nbsp;&nbsp; button1_onclick()&nbsp;&nbsp; {&nbsp;&nbsp; <br />&nbsp; alert(a);&nbsp;&nbsp; <br />&nbsp; }&nbsp;&nbsp; <br />&nbsp; &lt;/SCRIPT&gt;&nbsp;&nbsp; <br />&nbsp; &lt;/HEAD&gt;&nbsp;&nbsp; <br />&nbsp; &lt;BODY&gt;&lt;INPUT&nbsp;&nbsp; id=button1&nbsp;&nbsp; type=button&nbsp;&nbsp; value=Button&nbsp;&nbsp; name=button1&nbsp;&nbsp; LANGUAGE=javascript&nbsp;&nbsp; onclick="return&nbsp;&nbsp; button1_onclick()"&gt;&lt;/BODY&gt;&lt;/HTML&gt;&nbsp;&nbsp; <br />&nbsp; test2.htm&nbsp;&nbsp; <br />&nbsp; ======================&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; &lt;script&gt;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; function&nbsp;&nbsp; sendTo()&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; window.opener.a='test';&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; &lt;/script&gt;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; &lt;body&gt;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; &lt;form&nbsp;&nbsp; id=form1&nbsp;&nbsp; name=form1&gt;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input&nbsp;&nbsp; value="返回"&nbsp;&nbsp; type=button&nbsp;&nbsp; onclick="sendTo()"&nbsp;&nbsp; id=button1&nbsp;&nbsp; name=button1&gt;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; &lt;/form&gt;&nbsp;&nbsp; </p><img src ="http://www.cnblogs.com/tuyile006/aggbug/1514826.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47989/" target="_blank">Twitter无处不在 魔兽世界Twitter发送器插件发布</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>字符集和编码知识</title><link>http://www.cnblogs.com/tuyile006/archive/2009/05/20/1470239.html</link><dc:creator>小y</dc:creator><author>小y</author><pubDate>Wed, 20 May 2009 09:45:00 GMT</pubDate><guid>http://www.cnblogs.com/tuyile006/archive/2009/05/20/1470239.html</guid><wfw:comment>http://www.cnblogs.com/tuyile006/comments/1470239.html</wfw:comment><comments>http://www.cnblogs.com/tuyile006/archive/2009/05/20/1470239.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/tuyile006/comments/commentRss/1470239.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/tuyile006/services/trackbacks/1470239.html</trackback:ping><description><![CDATA[<p>字符是各种文字和符号的总称，包括各国家文字、标点符号、图形符号、数字等。字符集是多</p>
<p><clk></clk>个字符的集合，字符集种类较多，每个字符集包含的字符个数<nobr onmouseout="kwL(event,this)" onclick="kwC(event,0,&quot;&quot;,1)" style="color: #6600ff; border-bottom: #6600ff 1px dotted; background-color: transparent; text-decoration: underline;" onmouseover="kwE(event,0, this)" id="clickeyekey0" onmousemove="kwM(0)" oncontextmenu="return false">不同</nobr>，常见字符集名称：ASCII<clk></clk></p>
<p>字符集、ISO 8859字符集、GB2312字符集、BIG5字符集、 GB 18030字符集、Unicode字符集等</p>
<p>。计算机要准确的处理各种字符集文字，需要进行字符编码，以便计算机能够识别和存储各种</p>
<p>文字。</p>
<p><clk></clk>编码(Encoding)和字符集不同。字符集只是字符的集合，不一定适<nobr onmouseout="kwL(event,this)" onclick="kwC(event,1,&quot;&quot;,1)" style="color: #6600ff; border-bottom: #6600ff 1px dotted; background-color: transparent; text-decoration: underline;" onmouseover="kwE(event,1, this)" id="clickeyekey1" onmousemove="kwM(1)" oncontextmenu="return false">合作</nobr>网络传送、处理，有时<clk></clk></p>
<p><clk></clk>须经编码(Encode)后才能应用。如Unicode可依不同需要以UTF-8、UTF-16、UTF-32等<nobr onmouseout="kwL(event,this)" onclick="kwC(event,2,&quot;&quot;,1)" style="color: #6600ff; border-bottom: #6600ff 1px dotted; background-color: transparent; text-decoration: underline;" onmouseover="kwE(event,2, this)" id="clickeyekey2" onmousemove="kwM(2)" oncontextmenu="return false">方法</nobr>编码<clk></clk></p>
<p>。</p>
<p>因此，对字符进行编码，是信息交流的技术基础。本文将按照字符集的时间顺序讨论几种典型</p>
<p>的字符集，选取几种代表性的字符集，研究历史由来、特点、技术特征。</p>
<p>ASCII 字符集</p>
<p>1．名称的由来</p>
<p><clk></clk>ASCII（American Standard Code for Information Interchange，美国信息互换<nobr onmouseout="kwL(event,this)" onclick="kwC(event,4,&quot;&quot;,1)" style="color: #6600ff; border-bottom: #6600ff 1px dotted; background-color: transparent; text-decoration: underline;" onmouseover="kwE(event,4, this)" id="clickeyekey4" onmousemove="kwM(4)" oncontextmenu="return false">标准</nobr>代码）<clk></clk></p>
<p>是基于罗马字母表的一套电脑编码系统。</p>
<p>2．特点</p>
<p><clk></clk>它主要用于显示现代<nobr onmouseout="kwL(event,this)" onclick="kwC(event,3,&quot;&quot;,1)" style="color: #6600ff; border-bottom: #6600ff 1px dotted; background-color: transparent; text-decoration: underline;" onmouseover="kwE(event,3, this)" id="clickeyekey3" onmousemove="kwM(3)" oncontextmenu="return false">英语</nobr>和其他西欧语言。它是现今最通用的单字节编码系统，并等同于国际<clk></clk></p>
<p>标准ISO 646。</p>
<p>3．包含内容</p>
<p>控制字符：回车键、退格、换行键等。</p>
<p>可显示字符：英文大小写字符、阿拉伯数字和西文符号</p>
<p>4．技术特征</p>
<p>7位（bits）表示一个字符，共128字符</p>
<p>5．ASCII扩展字符集</p>
<p>7位编码的字符集只能支持128个字符，为了表示更多的欧洲常用字符对ASCII进行了扩展，</p>
<p>ASCII扩展字符集使用8位（bits）表示一个字符，共256字符。</p>
<p>ASCII扩展字符集比ASCII字符集扩充出来的符号包括表格符号、计算符号、希腊字母和特殊的</p>
<p>拉丁符号。 </p>
<p>ISO 8859</p>
<p>1．&nbsp;名称的由来</p>
<p>ISO 8859，全称ISO/IEC 8859，是国际标准化组织(ISO)及国际电工委员会(IEC)联合制定的一</p>
<p>系列8位字符集的标准，现时定义了15个字符集。</p>
<p>2．&nbsp;特点</p>
<p>ASCII收录了空格及94个&ldquo;可印刷字符&rdquo;，足以给英语使用。但是，其他使用拉丁字母的语言(</p>
<p>主要是欧洲国家的语言)，都有一定数量的重音字母，故可以使用ASCII及控制字符以外的区域</p>
<p>来储存及表示。</p>
<p>3．包含内容</p>
<p>除了使用拉丁字母的语言外，使用西里尔字母的东欧语言、希腊语、泰语、现代阿拉伯语、希</p>
<p>伯来语等，都可以使用这个形式来储存及表示。</p>
<p>各种ISO 8859字符集<br />&bull;&nbsp;ISO 8859-1 (Latin-1) - 西欧语言 <br />&bull;&nbsp;ISO 8859-2 (Latin-2) - 中欧语言 <br />&bull;&nbsp;ISO 8859-3 (Latin-3) - 南欧语言。世界语也可用此字符集显示。 <br />&bull;&nbsp;ISO 8859-4 (Latin-4) - 北欧语言 <br />&bull;&nbsp;ISO 8859-5 (Cyrillic) - 斯拉夫语言<br />&bull;&nbsp;ISO 8859-6 (Arabic) - 阿拉伯语 <br />&bull;&nbsp;ISO 8859-7 (Greek) - 希腊语 <br />&bull;&nbsp;ISO 8859-8 (Hebrew) - 希伯来语(视觉顺序) <br />&bull;&nbsp;ISO 8859-8-I - 希伯来语(逻辑顺序) <br />&bull;&nbsp;ISO 8859-9 (Latin-5 或 Turkish) - 它把Latin-1的冰岛语字母换走，加入土耳其</p>
<p>语字母。 <br />&bull;&nbsp;ISO 8859-10 (Latin-6 或 Nordic) - 北日耳曼语族，用来代替Latin-4。 <br />&bull;&nbsp;ISO 8859-11 (Thai) - 泰语，从泰国的TIS620标准字集演化而来。 <br />&bull;&nbsp;ISO 8859-13 (Latin-7 或 Baltic Rim) - 波罗的海语族 <br />&bull;&nbsp;ISO 8859-14 (Latin-8 或 Celtic) - 塞尔特语族 <br />&bull;&nbsp;ISO 8859-15 (Latin-9) - 西欧语言，加入Latin-1欠缺的法语及芬兰语重音字母，</p>
<p>以及欧元(&euro;)符号。 <br />&bull;&nbsp;ISO 8859-16 (Latin-10) - 东南欧语言。主要供罗马尼亚语使用，并加入欧元符号</p>
<p>。 </p>
<p>由于英语没有任何重音字母(不计外来字)，故可使用以上十五个字集中的任何一个来表示。<br />至于德语方面，因它除了 A-Z, a-z 外，只用 &Auml;, &Ouml;, &Uuml;, &auml;, &ouml;, &szlig;, &uuml; 七个字母，而所有拉丁</p>
<p>字集(1-4, 9-10, 13-16)均有此七个字母，故德语可使用以上十个字集中的任何一个来表示。</p>
<p>此系列中没有-12号的原因是，此计划原本要设计成一个包含塞尔特语族字符集的&ldquo;Latin-7&rdquo;</p>
<p>，但后来塞尔特语族变成了ISO 8859-14 / Latin-8。亦有一说谓-12号本来是预留给印度天城</p>
<p>体梵文的，但后来却搁置了。</p>
<p>GB2312 字符集</p>
<p>&nbsp;1．名称的由来</p>
<p>GB2312又称为GB2312-80字符集，全称为《信息交换用汉字编码字符集&bull;基本集》，由原中国国</p>
<p>家标准总局发布，1981年5月1日实施。</p>
<p>2．特点</p>
<p>GB2312是中国国家标准的简体中文字符集。它所收录的汉字已经覆盖99.75%的使用频率，基本</p>
<p>满足了汉字的计算机处理需要。在中国大陆和新加坡获广泛使用。</p>
<p>3．包含内容</p>
<p>GB2312收录简化汉字及一般符号、序号、数字、拉丁字母、日文假名、希腊字母、俄文字母、</p>
<p>汉语拼音符号、汉语注音字母，共 7445 个图形字符。其中包括6763个汉字，其中一级汉字</p>
<p>3755个，二级汉字3008个；包括拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔</p>
<p>字母在内的682个全角字符。 </p>
<p>4．技术特征</p>
<p>（1）分区表示：</p>
<p>GB2312中对所收汉字进行了&ldquo;分区&rdquo;处理，每区含有94个汉字/符号。这种表示方式也称为区</p>
<p>位码。</p>
<p>各区包含的字符如下：01-09区为特殊符号；16-55区为一级汉字，按拼音排序；56-87区为二</p>
<p>级汉字，按部首/笔画排序；10-15区及88-94区则未有编码。</p>
<p>（2）双字节表示</p>
<p>两个字节中前面的字节为第一字节，后面的字节为第二字节。习惯上称第一字节为&ldquo;高字节&rdquo; </p>
<p>，而称第二字节为&ldquo;低字节&rdquo;。</p>
<p>&ldquo;高位字节&rdquo;使用了0xA1-0xF7(把01-87区的区号加上0xA0)，&ldquo;低位字节&rdquo;使用了0xA1-0xFE(</p>
<p>把01-94加上0xA0)。</p>
<p>5．编码举例</p>
<p>以GB2312字符集的第一个汉字&ldquo;啊&rdquo;字为例，它的区号16，位号01，则区位码是1601，在大多</p>
<p>数计算机程序中，高字节和低字节分别加0xA0得到程序的汉字处理编码0xB0A1。计算公式是：</p>
<p>0xB0=0xA0+16, 0xA1=0xA0+1。</p>
<p>BIG5 字符集</p>
<p>1．名称的由来</p>
<p>又称大五码或五大码，1984年由台湾财团法人信息工业策进会和五间软件公司宏碁 (Acer)、</p>
<p>神通 (MiTAC)、佳佳、零壹 (Zero One)、大众 (FIC)创立，故称大五码。</p>
<p>Big5码的产生，是因为当时台湾不同厂商各自推出不同的编码，如倚天码、IBM PS55、王安码</p>
<p>等，彼此不能兼容；另一方面，台湾政府当时尚未推出官方的汉字编码，而中国大陆的GB2312</p>
<p>编码亦未有收录繁体中文字。</p>
<p>2．特点</p>
<p>Big5字符集共收录13,053个中文字，该字符集在中国台湾使用。耐人寻味的是该字符集重复地</p>
<p>收录了两个相同的字：&ldquo;兀&rdquo;(0xA461及0xC94A)、&ldquo;嗀&rdquo;(0xDCD1及0xDDFC)。</p>
<p>3．字符编码方法</p>
<p>Big5码使用了双字节储存方法，以两个字节来编码一个字。第一个字节称为&ldquo;高位字节&rdquo;，第</p>
<p>二个字节称为&ldquo;低位字节&rdquo;。高位字节的编码范围0xA1-0xF9，低位字节的编码范围0x40-0x7E</p>
<p>及0xA1-0xFE。</p>
<p>各编码范围对应的字符类型如下：0xA140-0xA3BF为标点符号、希腊字母及特殊符号，另外于</p>
<p>0xA259-0xA261，存放了双音节度量衡单位用字：兙兛兞兝兡兣嗧瓩糎；0xA440-0xC67E为常用</p>
<p>汉字，先按笔划再按部首排序；0xC940-0xF9D5为次常用汉字，亦是先按笔划再按部首排序。</p>
<p>4．Big5 的局限性</p>
<p>尽管Big5码内包含一万多个字符，但是没有考虑社会上流通的人名、地名用字、方言用字、化</p>
<p>学及生物科等用字，没有包含日文平假名及片假名字母。</p>
<p>例如台湾视&ldquo;着&rdquo;为&ldquo;著&rdquo;的异体字，故没有收录&ldquo;着&rdquo;字。康熙字典中的一些部首用字(如</p>
<p>&ldquo;亠&rdquo;、&ldquo;疒&rdquo;、&ldquo;辵&rdquo;、&ldquo;癶&rdquo;等)、常见的人名用字(如&ldquo;堃&rdquo;、&ldquo;煊&rdquo;、&ldquo;栢&rdquo;、&ldquo;喆&rdquo;</p>
<p>等) 也没有收录到Big5之中。</p>
<p>GB18030 字符集</p>
<p>1．名称的由来</p>
<p>GB 18030的全称是GB18030-2000《信息交换用汉字编码字符集基本集的扩充》，是我国政府于</p>
<p>2000年3月17日发布的新的汉字编码国家标准，2001年8月31日后在中国市场上发布的软件必须</p>
<p>符合本标准</p>
<p>2．特点</p>
<p>GB 18030字符集标准的出台经过广泛参与和论证，来自国内外知名信息技术行业的公司，信息</p>
<p>产业部和原国家质量技术监督局联合实施。</p>
<p>GB 18030字符集标准解决汉字、日文假名、朝鲜语和中国少数民族文字组成的大字符集计算机</p>
<p>编码问题。该标准的字符总编码空间超过150万个编码位，收录了27484个汉字，覆盖中文、日</p>
<p>文、朝鲜语和中国少数民族文字。满足中国大陆、香港、台湾、日本和韩国等东亚地区信息交</p>
<p>换多文种、大字量、多用途、统一编码格式的要求。并且与Unicode 3.0版本兼容，填补</p>
<p>Unicode扩展字符字汇&ldquo;统一汉字扩展A&rdquo;的内容。并且与以前的国家字符编码标准（GB2312，</p>
<p>GB13000.1）兼容。</p>
<p>3．编码方法</p>
<p>GB 18030标准采用单字节、双字节和四字节三种方式对字符编码。单字节部分使用0&times;00至0&times;</p>
<p>7F码(对应于ASCII码的相应码)。双字节部分，首字节码从0&times;81至0&times;FE，尾字节码位分别是0</p>
<p>&times;40至0&times;7E和0&times;80至0&times;FE。四字节部分采用GB/T 11383未采用的0&times;30到0&times;39作为对双字</p>
<p>节编码扩充的后缀，这样扩充的四字节编码，其范围为0&times;81308130到0&times;FE39FE39。其中第一</p>
<p>、三个字节编码码位均为0&times;81至0&times;FE，第二、四个字节编码码位均为0&times;30至0&times;39。</p>
<p>4．包含的内容</p>
<p>双字节部分收录内容主要包括GB13000.1全部CJK汉字20902个、有关标点符号、表意文字描述</p>
<p>符13个、增补的汉字和部首/构件80个、双字节编码的欧元符号等。　　四字节部分收录了上</p>
<p>述双字节字符之外的，包括CJK统一汉字扩充A在内的GB 13000.1中的全部字符。</p>
<p>Unicode字符集</p>
<p>1．名称的由来</p>
<p>Unicode字符集编码是Universal Multiple-Octet Coded Character Set 通用多八位编码字符</p>
<p>集的简称，是由一个名为 Unicode 学术学会(Unicode Consortium)的机构制订的字符编码系</p>
<p>统，支持现今世界各种不同语言的书面文本的交换、处理及显示。该编码于1990年开始研发，</p>
<p>1994年正式公布，最新版本是2005年3月31日的Unicode 4.1.0。</p>
<p>2．特征 </p>
<p>Unicode是一种在计算机上使用的字符编码。它为每种语言中的每个字符设定了统一并且唯一</p>
<p>的二进制编码，以满足跨语言、跨平台进行文本转换、处理的要求。</p>
<p>3．编码方法</p>
<p>Unicode 标准始终使用十六进制数字，而且在书写时在前面加上前缀&ldquo;U+&rdquo;，例如字母&ldquo;A&rdquo;</p>
<p>的编码为 0041 和字符&ldquo;&euro;&rdquo;的编码为 20AC。所以&ldquo;A&rdquo;的编码书写为&ldquo;U+0041&rdquo;和&ldquo;&euro;&rdquo;的编</p>
<p>码书写为&ldquo;U+20AC&rdquo;。</p>
<p>4．UTF-8 编码<br />UTF-8是Unicode的其中一个使用方式。 UTF是 Unicode Translation Format，即把Unicode转</p>
<p>做某种格式的意思。</p>
<p>UTF-8便于不同的计算机之间使用网络传输不同语言和编码的文字，使得双字节的Unicode能够</p>
<p>在现存的处理单字节的系统上正确传输。</p>
<p>UTF-8使用可变长度字节来储存 Unicode字符，例如ASCII字母继续使用1字节储存，重音文字</p>
<p>、希腊字母或西里尔字母等使用2字节来储存，而常用的汉字就要使用3字节。辅助平面字符则</p>
<p>使用4字节。</p>
<p>5．UTF-16 和 UTF-32 编码<br />UTF-32、UTF-16 和 UTF-8 是 Unicode 标准的编码字符集的字符编码方案，UTF-16 使用一个</p>
<p>或两个未分配的 16 位代码单元的序列对 Unicode 代码点进行编码；UTF-32 即将每一个 </p>
<p>Unicode 代码点表示为相同值的 32 位整数。</p><img src ="http://www.cnblogs.com/tuyile006/aggbug/1470239.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47988/" target="_blank">Firefox 3.5匆忙推出漏洞多 Mozilla本月将更新</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>GridView数据导出功能</title><link>http://www.cnblogs.com/tuyile006/archive/2009/05/08/1452498.html</link><dc:creator>小y</dc:creator><author>小y</author><pubDate>Fri, 08 May 2009 03:39:00 GMT</pubDate><guid>http://www.cnblogs.com/tuyile006/archive/2009/05/08/1452498.html</guid><wfw:comment>http://www.cnblogs.com/tuyile006/comments/1452498.html</wfw:comment><comments>http://www.cnblogs.com/tuyile006/archive/2009/05/08/1452498.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/tuyile006/comments/commentRss/1452498.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/tuyile006/services/trackbacks/1452498.html</trackback:ping><description><![CDATA[<p>导出成xls文件用excel打开。通用的代码如下：</p>
<p>&nbsp;</p>
<div class="cnblogs_code"><span style="color: #000000;">&nbsp;</span><span style="color: #0000FF;">#region</span><span style="color: #000000;">&nbsp;导出</span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">common</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000FF;">void</span><span style="color: #000000;">&nbsp;ExcuteOut(GridView&nbsp;gv)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">if</span><span style="color: #000000;">&nbsp;(gv.Rows.Count&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">0</span><span style="color: #000000;">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Response.ClearContent();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Response.AddHeader(</span><span style="color: #800000;">"</span><span style="color: #800000;">content-disposition</span><span style="color: #800000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">attachment;&nbsp;filename=DMReport</span><span style="color: #800000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;DateTime.Now.ToString(</span><span style="color: #800000;">"</span><span style="color: #800000;">_yyyyMMdd_HHmmss</span><span style="color: #800000;">"</span><span style="color: #000000;">)&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">.xls</span><span style="color: #800000;">"</span><span style="color: #000000;">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Response.ContentEncoding&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;System.Text.Encoding.UTF8;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Response.ContentType&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">application/excel</span><span style="color: #800000;">"</span><span style="color: #000000;">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringWriter&nbsp;sw&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000FF;">new</span><span style="color: #000000;">&nbsp;StringWriter();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HtmlTextWriter&nbsp;htw&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000FF;">new</span><span style="color: #000000;">&nbsp;HtmlTextWriter(sw);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gv.RenderControl(htw);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Response.Write(sw.ToString());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Response.End();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">else</span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Tools.Alert(Page,&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">没有数据!</span><span style="color: #800000;">"</span><span style="color: #000000;">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000FF;">override</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000FF;">void</span><span style="color: #000000;">&nbsp;VerifyRenderingInServerForm(Control&nbsp;control)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">#endregion</span></div>
<p>&nbsp;</p>
<p>&nbsp;必须加上后面的VerifyRenderingInServerForm函数，否则会报错。</p>
<p>注意要使用utf8编码，不能用default。</p><img src ="http://www.cnblogs.com/tuyile006/aggbug/1452498.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47987/" target="_blank">预测：Twitter最可能收购的十家公司</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>最近遇到的一些问题及发现</title><link>http://www.cnblogs.com/tuyile006/archive/2009/05/06/1450792.html</link><dc:creator>小y</dc:creator><author>小y</author><pubDate>Wed, 06 May 2009 08:56:00 GMT</pubDate><guid>http://www.cnblogs.com/tuyile006/archive/2009/05/06/1450792.html</guid><wfw:comment>http://www.cnblogs.com/tuyile006/comments/1450792.html</wfw:comment><comments>http://www.cnblogs.com/tuyile006/archive/2009/05/06/1450792.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/tuyile006/comments/commentRss/1450792.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/tuyile006/services/trackbacks/1450792.html</trackback:ping><description><![CDATA[<p><span style="color: #ff6600;"><strong>1.关于Server.UrlPathEncode和Server.UrlEncode的区别</strong></span></p>
<p>Server.UrlPathEncode默认使用的是utf-8编码而Server.UrlEncode默认为系统默认编码（一般是gb2312）</p>
<p>Server.UrlDecode默认使用系统编码解码。所以这里容易发生路径解码成乱码的问题。</p>
<p>Response.<span style="color: #0000ff;">Write</span><span style="color: #000000;">(Server.UrlDecode(Server.UrlPathEncode(</span><span style="color: #000000;">"</span><span style="color: #000000;">中文</span><span style="color: #000000;">"</span><span style="color: #000000;">))&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&lt;hr&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">)<br />Response.</span><span style="color: #0000ff;">Write</span><span style="color: #000000;">(HttpUtility.UrlDecode(Server.UrlPathEncode(</span><span style="color: #000000;">"</span><span style="color: #000000;">中文</span><span style="color: #000000;">"</span><span style="color: #000000;">),&nbsp;Encoding.UTF8)&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&lt;hr&gt;</span><span style="color: #000000;">"</span><span style="color: #000000;">)</span></p>
<p><span style="color: #000000;"></span></p>
<p><span style="color: #000000;">解决办法： 解码的地方使用utf-8编码。HttpUtility.UrlDecode(Server.UrlPathEncode(<span style="color: #000000;">String</span><span style="color: #000000;">),&nbsp; Encoding.UTF8);</span></span></p>
<p><span style="color: #000000;"><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 或者编码的地方使用Server.UrlEncode（），编解码的默认编码方式都用gb2312；</span></span></p>
<p><span style="color: #000000;"><span style="color: #000000;"></span></span></p>
<p><span style="color: #000000;"><span style="color: #000000;"><strong><span style="color: #ff6600;">2.关于Response.End()报thread终止的异常</span></strong></span></span></p>
<p><span style="color: #000000;"><span style="color: #000000;">当Response.End()语句放在try{}catch(){}中的时候就会出现这种问题；</span></span></p>
<p><span style="color: #000000;"><span style="color: #000000;">解决办法：</span></span></p>
<p><span style="color: #000000;"><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp; 将Response.End()放在try catch之外，如需要从try catch终止，可以使用return，然后在finally中使用Response.End()；</span></span></p>
<p><span style="color: #000000;"><span style="color: #000000;"></span></span></p>
<p><span style="color: #000000;"><span style="color: #000000;"></span></span><span style="color: #000000;"><strong><span style="color: #ff6600;">3.TreeView控件TreeView1_SelectedNodeChanged事件不触发的问题</span></strong></span></p>
<p><span style="color: #000000;">&nbsp;TreeNode dir = new TreeNode(dw["pg_tag"].ToString(), dw["pg_id"].ToString());&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></p>
<p><span style="color: #000000;">&nbsp; root.ChildNodes.Add(dir);</span></p>
<p><span style="color: #000000;">但是当点击父节点时，不触发后台的SelectedNodeChanged事件。</span></p>
<p><span style="color: #000000;">分析原因，可能是dopost函数有问题，再进一步分析，发现是页面禁用了ViewState造成的。</span></p>
<p><span style="color: #000000;">解决办法：</span></p>
<p><span style="color: #000000;">给要触发选择变更事件的节点添加动作</span></p>
<p><span style="color: #000000;">dir.SelectAction = TreeNodeSelectAction.SelectExpand;</span>
<p>页面里面启用VeiwState&nbsp;&nbsp; </p>
<p>&lt;%@ Page Language="C#" AutoEventWireup="true" Inherits="left" <span style="color: #ff0000;">EnableViewState="true"</span> Codebehind="left.aspx.cs" %&gt;</p>
</p><img src ="http://www.cnblogs.com/tuyile006/aggbug/1450792.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47986/" target="_blank">网易澄清:与暴雪合资公司仅提供技术支持</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>程序员素质面试题</title><link>http://www.cnblogs.com/tuyile006/archive/2009/04/27/1444572.html</link><dc:creator>小y</dc:creator><author>小y</author><pubDate>Mon, 27 Apr 2009 06:18:00 GMT</pubDate><guid>http://www.cnblogs.com/tuyile006/archive/2009/04/27/1444572.html</guid><wfw:comment>http://www.cnblogs.com/tuyile006/comments/1444572.html</wfw:comment><comments>http://www.cnblogs.com/tuyile006/archive/2009/04/27/1444572.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/tuyile006/comments/commentRss/1444572.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/tuyile006/services/trackbacks/1444572.html</trackback:ping><description><![CDATA[<p>技术题做完后，先检查技术是否合格，技术合格的并非就一定是合适人选，还要做素质面试。</p>
<p>如下是小y出的面试题：</p>
<p><span style="color: #ff0000;"><strong>（上进心）</strong></span>1.你的职业规划是怎样的，未来两年想朝哪个方向发展？</p>
<p>&nbsp;</p>
<p><span style="color: #ff0000;"><strong>（人生态度）</strong></span>2.你认为自己最大的优势（或优点）是什么？最大的缺点又是什么？</p>
<p>&nbsp;</p>
<p><span style="color: #ff0000;"><strong>（责任心、执行力）</strong></span>3.如果你给出了一个开发进度，开发当中却发现难以完成，或需要加班才可以完成，你会怎么做？</p>
<p>&nbsp;</p>
<p><span style="color: #ff0000;"><strong>（思维缜密、周全性）</strong></span>4.背包问题的求解思路。</p>
<p>&nbsp; </p>
<p>背包问题：有1～n编号的物品，重量分别为M1～Mn，价值分别为P1～Pn，背包负重为S，请问如何使背包装的物品价值最大？</p>
<p>&nbsp;</p>
<p>&nbsp;</p><img src ="http://www.cnblogs.com/tuyile006/aggbug/1444572.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47985/" target="_blank">杰克逊悼念仪式或成史上最大规模Web活动</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>用C#做短信CMPP3.0/2.0协议</title><link>http://www.cnblogs.com/tuyile006/archive/2009/04/16/1437503.html</link><dc:creator>小y</dc:creator><author>小y</author><pubDate>Thu, 16 Apr 2009 13:00:00 GMT</pubDate><guid>http://www.cnblogs.com/tuyile006/archive/2009/04/16/1437503.html</guid><wfw:comment>http://www.cnblogs.com/tuyile006/comments/1437503.html</wfw:comment><comments>http://www.cnblogs.com/tuyile006/archive/2009/04/16/1437503.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.cnblogs.com/tuyile006/comments/commentRss/1437503.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/tuyile006/services/trackbacks/1437503.html</trackback:ping><description><![CDATA[<p>以前使用C＃实现的CMPP3.0/CMPP2.0短信发送程序支持长短信，可以自动重连。</p>
<p>长短信实现方法：</p>
<div class="cnblogs_code"><span id="Code_Open_Text_205138"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000;">短消息长度超过协议规定的最大长度的时候，可以进行拆分发送。<br />CMPP协议规定短消息最大长度为140，（DCS非0时）<br />拆分的消息UDHI字段要置为1表示该消息的内容有头结构。<br />针对长消息拆分的头结构表示如下<br /></span><span style="color: #800080;">05</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800080;">00</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800080;">03</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800080;">00</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800080;">04</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800080;">01</span><span style="color: #000000;">&nbsp;。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。<br /></span><span style="color: #800080;">1</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">2</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">3</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">4</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">5</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">6</span><span style="color: #000000;">&nbsp;&nbsp;<br /></span><span style="color: #800080;">1</span><span style="color: #000000;">，表示后面的头的长度，不包括自身<br /></span><span style="color: #800080;">3</span><span style="color: #000000;">，表示头结构为拆分的连续短消息。<br /></span><span style="color: #800080;">5</span><span style="color: #000000;">，表示拆分的总条数<br /></span><span style="color: #800080;">6</span><span style="color: #000000;">，表示该条为第几条。<br />具体的参见规范。<br />后面是编码后的短消息内容。<br />短消息长度为包括头结构的长度。<br />例如一条短消息编码后如下要拆分成3条<br />AAAAAABBBBBBCCCCCC<br /><br />DCS为8<br />三条分别为：<br /></span><span style="color: #800080;">05</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">00</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800080;">03</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800080;">00</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800080;">03</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800080;">01</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800080;">00</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800080;">41</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800080;">00</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800080;">41</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800080;">00</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800080;">41</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800080;">00</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800080;">41</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800080;">00</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800080;">41</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800080;">00</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800080;">41</span><span style="color: #000000;">&nbsp;&nbsp;<br /><br /><br /></span><span style="color: #800080;">05</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">00</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800080;">03</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800080;">00</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800080;">03</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800080;">02</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800080;">00</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800080;">42</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800080;">00</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800080;">42</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800080;">00</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800080;">42</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800080;">00</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800080;">42</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800080;">00</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800080;">42</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800080;">00</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800080;">42</span><span style="color: #000000;"><br /><br /><br /></span><span style="color: #800080;">05</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800080;">00</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800080;">03</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800080;">00</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800080;">03</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800080;">03</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800080;">00</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800080;">43</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800080;">00</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800080;">43</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800080;">00</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800080;">43</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800080;">00</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800080;">43</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800080;">00</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800080;">43</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800080;">00</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800080;">43</span><span style="color: #000000;"><br /><br />三条消息的UDHI都为1<br /></span></span></div>
<p>&nbsp;</p>
<p>测试小程序界面：</p>
<p><img src="http://pic002.cnblogs.com/img/tuyile006/200904/2009041620572417.jpg" /></p>
<p>界面２：</p>
<p><img src="http://pic002.cnblogs.com/img/tuyile006/200904/2009041620575621.jpg" /></p>
<p>&nbsp;<a href="http://files.cnblogs.com/tuyile006/CMPP2.0.rar">CMPP2.0协议文档</a>&nbsp;&nbsp;&nbsp; <a href="http://files.cnblogs.com/tuyile006/cmpp30.rar">CMPP3.0协议文档</a></p>
<p>&nbsp;同时有提供网关模拟器，抓包工具，长短信实现方法，以及参数如何填写的实例文档，使用该代码的测试小程序源码。</p>
<p>&nbsp;<span style="color: #888888;">本程序不提供免费下载。如有需要请联系 小y QQ：271963990&nbsp; 请注明来意。</span></p><img src ="http://www.cnblogs.com/tuyile006/aggbug/1437503.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47984/" target="_blank">《商业周刊》:Mozilla的志愿者开发模式被复制</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>wap开发经验（转）</title><link>http://www.cnblogs.com/tuyile006/archive/2009/04/14/1435387.html</link><dc:creator>小y</dc:creator><author>小y</author><pubDate>Tue, 14 Apr 2009 01:50:00 GMT</pubDate><guid>http://www.cnblogs.com/tuyile006/archive/2009/04/14/1435387.html</guid><wfw:comment>http://www.cnblogs.com/tuyile006/comments/1435387.html</wfw:comment><comments>http://www.cnblogs.com/tuyile006/archive/2009/04/14/1435387.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/tuyile006/comments/commentRss/1435387.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/tuyile006/services/trackbacks/1435387.html</trackback:ping><description><![CDATA[<p>注:如果没有特殊说明,仅限移动MISC平台<br />1. 谨慎使用表格.<br />由于一个页面在显示之前,要根据表格定义画出手机屏幕内容,这部分会简慢页面速度,应该尽量减数表格数量<br />2.在使用&lt;img &gt;标签时,最好定义图片的宽度和长度,这样在显示整个整个页面前,会按图片长宽预留此图片位置,加快显示其它文字内容<br />3.部分手机支持CSS<br />4.部分手机支持页面背景音乐<br />5.部分手机支持图片上传功能<br />6.使用表格时,为了更好的显示效果,要匹配手机终端的表格宽度<br />1) Wap浏览器支持的MIME类型<br />text/css<br />image/gif<br />image/jpeg<br />audio/midi<br />application/vnd.wap.xhtml+xml<br />text/html<br /><br />2)引入XHTML带来的改变:<br />1、跑马灯<br />&lt;marquee&gt;链接、文字内容或图片&lt;/marquee&gt;<br />属性：<br />loop=&ldquo;100&rdquo;<br />direction=&ldquo;right&rdquo; or &ldquo;left&rdquo;<br />behavior=&ldquo;scroll&rdquo; or &ldquo;alternate&rdquo;<br />scrollamount=&ldquo;10&rdquo;<br />bgcolor="#aaaaee"<br /><br />2、文字颜色<br />&lt;font color=&lsquo;blue&rsquo;&gt;文字&lt;/font&gt;<br />Css文件内容：<br />a:link<br />{ color: #000000}<br /><br />3、动画显示<br />应用于背景图、前景图<br />body<br />{<br />background-image:url(/Images/bg.gif);<br />}<br />图片大小适配<br />整个页面图片大小30k以内<br />推荐20k<br />4、表单<br />输入框<br />&lt;input type="text" width="120" value="hello"&gt;<br />单选框<br />&lt;input type=&ldquo;radio&rdquo; value=&ldquo;1&rdquo;&gt;北京<br />多选框<br />&lt;input type="checkbox" value="1"&gt;北京<br />下拉框<br />&lt;form&gt;&lt;select id="province"&gt;&lt;option value="0"&gt;北京&lt;/option&gt;&lt;option value="1"&gt;上<br />海&lt;/option&gt;&lt;/select&gt;<br />&lt;/form&gt;<br />5、表格&mdash;&mdash;支持表格<br />支持table、tr、td<br />6、背景色 、背景图片<br />背景色<br />&lt;body bgcolor="#e0e0e0"&gt;<br />CSS：<br />body {background:red}<br />背景图<br /><br />&lt;table background="Images/bg.gif"&gt;<br />CSS:<br />body<br />{ background-image: url(Images/bg.gif);}<br />7、背景音乐<br />&lt;BGSOUND src='midi/hy.mid' loop='-1'&gt;</p><img src ="http://www.cnblogs.com/tuyile006/aggbug/1435387.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47977/" target="_blank">Mono 的Virtual PC 虚拟机</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>WAP网页设计入门（转）</title><link>http://www.cnblogs.com/tuyile006/archive/2009/04/14/1435375.html</link><dc:creator>小y</dc:creator><author>小y</author><pubDate>Tue, 14 Apr 2009 01:33:00 GMT</pubDate><guid>http://www.cnblogs.com/tuyile006/archive/2009/04/14/1435375.html</guid><wfw:comment>http://www.cnblogs.com/tuyile006/comments/1435375.html</wfw:comment><comments>http://www.cnblogs.com/tuyile006/archive/2009/04/14/1435375.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/tuyile006/comments/commentRss/1435375.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/tuyile006/services/trackbacks/1435375.html</trackback:ping><description><![CDATA[<table border="0" width="95%" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td height="60" align="left"><span class="style4">WAP网页设计入门</span></td>
</tr>
<tr>
<td align="left" class="style2">
<p align="left"><span style="font-size: x-small;">１.</span><span style="font-size: x-small;">基本规则</span></p>
<p align="left"><span style="font-size: x-small;">２.</span><span style="font-size: x-small;">基本格式和文件头</span></p>
<p align="left"><span style="font-size: x-small;">３.</span><span style="font-size: x-small;">显示文本</span></p>
<p align="left"><span style="font-size: x-small;">４.</span><span style="font-size: x-small;">显示图片</span></p>
<p align="left"><span style="font-size: x-small;">５.</span><span style="font-size: x-small;">锚和任务</span></p>
<p align="left"><span style="font-size: x-small;">６.</span><span style="font-size: x-small;">显示表单</span></p>
<p align="left"><span style="font-size: x-small;">７.</span><span style="font-size: x-small;">事件</span></p>
<p align="left"><span style="font-size: x-small;">８.</span><span style="font-size: x-small;">CGI编程</span><span style="font-size: x-small;"> </span></p>
<p><span style="font-size: x-small;">　　这里介绍WAP协议标准组织所制定的标记语言WML，由于和以前介绍的HDML在手机浏览器专用网页的特征上基本一致，所以概念部分就略去了，直接讲述语言。<br /><br /></span><span style="font-size: x-small;">１。基本规则<br />　　* WML使用XML文档字符集，目前支持Unicode 2.0，和HDML不同，WML的所有标签，属性和规定的可接收值必须小写，CARD的名字和变量也是区分大小写的。和HDML一样，对于连续的空字符，只显示一个空格。标签内属性的值必须用"或者'括起来，属性名，＝和值之间不能有空格。对于不成对出现的标签，必须在 &gt; 前加 / ，比如&lt;br/&gt;。在对变量的引用上和HDML基本相同，有：<br />　　$(var1:esc)<br />　　$(var1:noesc)<br />　　$(var1:unesc)<br />三种形式，具体含义参见前面HDML的相关部分。在对保留字符的处理上也基本相同，对应的取代字符有：<br />　　&lt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;lt;<br />　　&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;gt;<br />?　'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;apos;<br />　　"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;quot;<br />　　&amp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;amp; <br />　　$&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $$ <br />　　空格&nbsp;&nbsp; &amp;nbsp;<br />　　-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;shy;<br />这里要指出的是在URL的传递过程中，用来连接参数的 &amp; 必须转化为 &amp;amp; 。<br /><br /><br /><br /></span><span style="font-size: x-small;">２。基本格式和文件头<br /><br />　　wml文件的一般格式：<br /><br />&lt;?xml version="1.0"?&gt;<br />&lt;!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.<a href="http://soft.shouji56.com/software/List_176.html" class="channel_keylink">wap</a>forum.org/DTD/wml_1.1.xml"&gt;<br />&lt;wml&gt;<br />&nbsp;&nbsp; &lt;head&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp; &lt;access/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp; &lt;meta..../&gt;<br />&nbsp;&nbsp; &lt;/head&gt;<br />&nbsp;&nbsp; &lt;card&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Some contents...<br />&nbsp;&nbsp; &lt;/card&gt;<br />&lt;wml&gt;<br /><br />　　结构看上去和HTMl文件很类似，对于每一个DECK，在其文档开头必须指明以下的类型声明。<br />&lt;?xml version="1.0"?&gt;<br />&lt;!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.<a href="http://soft.shouji56.com/software/List_176.html" class="channel_keylink">wap</a>forum.org/DTD/wml_1.1.xml"&gt;<br />千万注意字母的大小写。对于一个DECK，其文件大小最好不要超过1.2K。<br /><br />　　&lt;wml&gt;标签和HTML中的&lt;html&gt;标签一样，用来表明这是一个WML的DECK，它有一个可选的xml:lang属性来制定文档的语言，比如&lt;wml xml:lang="zh"&gt;表示文档语言为中文。<br /><br />　　和HTML一样&lt;head&gt;标签包含了该DESK的相关信息。&lt;head&gt;标签之间可以包含一个&lt;access&gt;标签和多个&lt;meta&gt;标签。<br /><br />　　&lt;access domain="域" path="/路径" /&gt;相当于HTML中的&lt;BASE&gt;标签，指定该DECK的访问控制信息，它用两个可选的属性，domain用来指定域，默认值为当前域，path用来指定路径，默认值为"/"，即根目录。由于&lt;access&gt;单独使用，所以要用/结尾，以后对于类似的情况不再赘述。<br /><br />　　&lt;meta 属性 content="值" scheme="格式" forua="true|false"/&gt;和HTML中的类似，提供了该DECK的meta信息。属性是必选的，包括一下三种情况<br />　　name="name"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UP.Link Server忽略meta数据<br />　　http-equiv="name"&nbsp;&nbsp;&nbsp; UP.Link Server将meta数据转为HTTP响应头(同HTML) <br />　　user-agent="agent"&nbsp;&nbsp; UP.Link Server直接将meta数据传给手机设备<br />content属性也是必选的，其内容根据属性而定。scheme属性目前尚不支持。forua为可选属性，指定在该wml文件传到客户端之前，&lt;meta&gt;标签是不是被中间代理删除(因为传输的协议可能改变)，默认值为false。<br /><br />　　目前支持的meta数据:<br />　　&lt;meta http-equiv="Cache-Control" content="max-age=3600"/&gt;指定DECK在手机内存缓存中的存储时间段，默认的为30天(除非内存耗尽)，在该期间，手机对于访问过的DECK直接从缓存里调用。如果信息是对时间敏感的，可以用max-age指定DECK在缓存里的生存期，最小单位是秒，如果指定为0，则每次都需通过连接服务器来调用该DECK。<br /><br />　　&lt;meta user-agent="vnd.up.markable" content="false"/&gt;和&lt;meta user-agent="vnd.up.bookmark" content="指定的URL"/&gt;类似于普通浏览器的书签功能。当用户将一个CARD做了书签后，手机浏览器首先用一个标记记录该CARD，这个标记默认的是&lt;card&gt;标签中的title属性(以后会讲到)，然后当用户选择了该书签以后，浏览器就会打开被记录的URL。但是因为在默认的情况下，手机会记录所有的DECK，所以，一般&lt;meta&gt;被用来使手机不要记录当前的URL，即&lt;meta user-agent="vnd.up.markable" content="false"/&gt;。此外，如果要为书签指定不同于当前DRECk的URL，用&lt;meta user-agent="vnd.up.bookmark" content="指定的URL"/&gt;。<br /><br />　　一个DECK可以包含多个CARD，每个CARD的内容可能不止一屏显示，注意DECK，CARD和屏幕显示范围的关系。一个CARD用&lt;card&gt;和&lt;/card&gt;包含。&lt;card&gt;可以包含以下可选的属性：<br />&lt;card id="name" title="label" newcontext="false" ordered="true" onenterforward="url" onenterbackward="url" ontimer="url"&gt;<br />　　*id属性用来指定CARD的名字，可用来在CARD间跳转，相当于在HTML中在页内跳转时用&lt;A NAME="jumpHere"&gt;。<br />　　*title属性用来作为书签的标记，该属性一般不会显示在屏幕上。<br />　　*newcontext属性，默认值为false，用来指示当跳转到本CARD时，手机是不是要清除以前保留的信息，包括变量，堆栈里的历史记录，重新设置手机状态等。<br />　　*ordered属性，默认值是true，表明该CARD里的内容是按固定的顺序显示，还是按用户的选择来显示。这点和HTMl不同，CARD页面里的内容可以按一定的顺序显示，默认的是按线性顺序显示，即按代码的顺序，但是，要注意的是，以下三个标签必须按以下顺序来写&lt;onevent&gt;　&lt;timer&gt;　&lt;do&gt;，(这和以后要讲的&ldquo;事件&rdquo;有关)。这样做是为了方便填表单，当ordered设置为true时，如果一个表单的内容不能在一屏里显示完，就分成多屏显示；当ordered设置为false时，手机可以显示一个概要CARD来总结有效的选项，用户可以从中选取表单选项来填写。<br />　　*onXXX属性，类似于HTML标签中的onXXX属性，用来捕捉事件，当事件被触发时执行指定的操作(任务)，在这里是转向某个URL。<br /><br /><br /><br /></span><span style="font-size: x-small;">３。显示文本<br /><br />　　在文本的显示上WML基本和HTML相同。文字段落包含在&lt;p align= "alignment" mode=" wrapmode"&gt;和&lt;/p&gt;之间，align属性指定该段文字的对齐方式，默认的是left，其他可选择right和center；mode属性指定当一行显示不下所有的文字时是否自动换行，默认的是自动换行wrap，如果选nowrap，则在一行中显示，浏览器会通过类似于水平滚动条的机制来显示所有文字。<br /><br />　　换行标签也一样为&lt;br/&gt;，这里先替一下，在标单中如果有多个&lt;input&gt;或者&lt;select&gt;，其间不要用&lt;br/&gt;，否则会使手机浏览器认为是断点而把表单分页显示。<br /><br />　　文字的修饰标签有&lt;b&gt;、&lt;i&gt;、&lt;u&gt;、&lt;em&gt;、&lt;strong&gt;、&lt;big&gt;和&lt;small&gt;，意义和HTML里的相同。<br /><br />　　表格的显示标签也和HTML相近，使用&lt;table title="name" align="left|right|center" columns="列数"&gt;、&lt;tr&gt;和&lt;td&gt;来显示，&lt;table&gt;的title属性用来给表格取个名字，columns属性指定表的列数，不能为0，可选的align属性和前面提到的一样是对齐方式。表格中可以包含文字和图片。<br /><br />test1.wml<br />--------------<br />&lt;?xml version="1.0"?&gt;<br />&lt;!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"&gt;<br /><br />&lt;wml&gt;<br />&lt;card&gt;<br />&lt;p align="center"&gt;<br />&lt;i&gt;Hello&lt;/i&gt;&lt;br/&gt;<br />&lt;b&gt;&lt;i&gt;World!&lt;/i&gt;&lt;/b&gt;<br />&lt;table title="mytable" align="right" columns="2"&gt;<br />&lt;tr&gt;<br />&lt;td&gt;1-1&lt;/td&gt;<br />&lt;td&gt;1-2&lt;/td&gt;<br />&lt;/tr&gt;<br />&lt;tr&gt;<br />&lt;td&gt;2-1&lt;/td&gt;<br />&lt;td&gt;2-2&lt;/td&gt;<br />&lt;/tr&gt;<br />&lt;/table&gt;<br />&lt;/p&gt;<br />&lt;/card&gt;<br />&lt;/wml&gt;<br /><br /><br /><br /></span><span style="font-size: x-small;">４。显示图片<br /><br />　　显示图片(1位黑白BMP图片)的标签一样类似于HTML，&lt;img alt="text" src="http://blog.eedu.org.cn/url" localsrc="http://blog.eedu.org.cn/icon" align="left" height="n" width="n" vspace="n" hspace="n"/&gt;，属性中alt和src是必须要有的，其他可选。另外要注意的是&lt;img&gt;要放在&lt;p&gt;里，不能放在&lt;do&gt;和&lt;option&gt;等功能健标签和选单标签里。<br />　　*alt属性用来指定当手机不支持图片显示时用来显示的文字。<br />　　*src属性指定图片的URL，但当有了以下的localsrc属性时，手机浏览器就忽略src属性。<br />　　*localsrc属性用来指定显示存在手机ROM中的图标，如果找不到，则到UP.Link Server上去找。<br />　　*可选的align属性用来表明图片同当前行文本的对齐方式，默认值为bottom，可选to和middle。<br />　　*height、width、vspace、hspace属性分别指定图片的长宽和距环绕文字的间距，目前不是所有的WAP手机都支持这些属性。<br /><br />test2.wml<br />---------------<br />&lt;?xml version="1.0"?&gt;<br />&lt;!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"&gt;<br /><br />&lt;wml&gt;<br />&lt;card&gt;<br />&lt;p align="center"&gt;&lt;img alt=":)" src="/Article/UploadFiles/200608/20060808101423600.bmp" localsrc="http://blog.eedu.org.cn/smileyface"/&gt;&lt;/p&gt;<br />&lt;/card&gt;<br />&lt;/wml&gt;<br /><br /><br /><br /></span><span style="font-size: x-small;">５。锚和任务<br /><br />　　连接是HTML页面里最基本的功能，在WML里也一样用&lt;a href="http://blog.eedu.org.cn/url" title="label"&gt;和&lt;/a&gt;来包括用来建立连接的文字，必选属性href指定了要打开的URL，可选的title属性给该连接取个标记名字，这个名字将作为软按钮之一的ACCEPT键(详见以前的HDML入门文章)的标记显示在屏幕的软按钮区，所以通常可以将属性作为提示文字是用。<br /><br />　　然而，以上的连接在WML里只是任务的一种情况，为了能够使用其它任务，所以引进了新的标签&lt;anchor title="label"&gt;任务标签 文本&lt;/anchor&gt;，&lt;a&gt;其实是当任务标签为&lt;go/&gt;时的简单表示方式。<br /><br />test3.wml<br />---------------<br />&lt;?xml version="1.0"?&gt;<br />&lt;!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"&gt;<br /><br />&lt;wml&gt;<br />&lt;card&gt;<br />&lt;p&gt;<br />&lt;anchor title="Link1"&gt;&lt;go href="test1.wml"/&gt;News&lt;/anchor&gt;&lt;br/&gt;<br />&lt;a title="Link2" href="test2.wml"&gt;Sports&lt;/a&gt;<br />&lt;/p&gt;<br />&lt;/card&gt;<br />&lt;/wml&gt;<br /><br />　　WML里的任务标签有以下几种，除了用于&lt;anchor&gt;，还可以用在事件中：<br /><br />　　1)&lt;go&gt;用来指示浏览器显示指定的URL，包括DECK的第一个CARD或者指定的CARD。语法如下:<br />　　&lt;go href="http://blog.eedu.org.cn/url" sendreferer="false|true" method="get|post" accept-charset="charset"&gt;<br />　　&lt;postfield name="name" value="value"/&gt;<br />　　&lt;setvar name="name" value="value"/&gt;<br />　　&lt;/go&gt;<br />　　其中href属性为必选，其他为可选。sendreferer属性表示是否传递调用href所指定的URL的页面的URL，也就是当前页的URL，即HTTP头中的HTTP_REFERER，默认值为false，可选值为true。method和HTML中的表单FORM的method属性一样，指定表单是以get的方式还是post的方式递交，以便cgi处理，默认的值为get，但如果未指定method但&lt;go&gt;&lt;/go&gt;间存在&lt;postfield&gt;，手机自动以post方式传递。accept-charset属性可覆盖在HTTP头里指定的字符集，可以写多个字符集，如accept-charset="UTF-8,US-ASCII, ISO-8859-1"。<br />　　&lt;postfield name="name" value="value"/&gt;可以看作是HTML表单FORM中的&lt;INPUT TYPE="HIDDEN" NAME="变量名" VALUE="值"&gt;，通过它可以向指定的URL传递以&ldquo;变量名/值&rdquo;形式的数据。name和value属性都是必选的。注意只有这里的变量是用来递交给CGI程序的。<br />　　除了&lt;postfield&gt;，还可以在&lt;go&gt;和&lt;/go&gt;间加入一句或者多句&lt;setvar name="name" value="value"/&gt;，该语句的意思是，当触发某一事件时，给变量赋值。<br />　　要注意的是，当&lt;go&gt;和&lt;/go&gt;之间没有任何语句时，要用&lt;go/&gt;的形式，这点比较特别，比如&lt;anchor title="Link1"&gt;&lt;go href="test.wml"/&gt;News&lt;/anchor&gt;。<br /><br />　　2)&lt;prev&gt;用来将当前页面的URL压入URL历史堆栈，并打开此前的URL，若该URL不存在，则&lt;prev&gt;无效。语法类似&lt;go&gt;：&lt;prev&gt;&lt;setvar name="name" value="value"/&gt;&lt;/prev&gt;，&lt;prev&gt;和&lt;/prev&gt;之间可加入一句或多句&lt;setvar name="name" value="value"/&gt;，若不加，则必须变成&lt;prev/&gt;的形式。<br /><br />　　3)&lt;refresh&gt;用来刷新当前的页面，从而使得页面内的变量刷新，语法为&lt;refresh&gt;&lt;setvar name="name" value="value"/&gt;&lt;/refresh&gt;。<br /><br />　　4)&lt;noop&gt;，表示什么也不做，该标签不能用在&lt;anchor&gt;中，一般用在覆盖DECK级的&lt;do&gt;(以后会说明)。<br /></span><span class="smallFont"><br /><span style="font-size: x-small;">６。显示表单<br /><br />　　类似于HTML的&lt;FORM&gt;，&lt;fieldset&gt;可用来包括一组表单选项，但不是必须的。前面说过，当&lt;card&gt;的ordered设置为false时，手机可以显示一个概要CARD来总结有效的选项，方便用户从中选取表单选项来填写，概要CARD就是根据&lt;fieldset&gt;和独立的输入框&lt;input&gt;以及选单&lt;select&gt;来总结的。语法为，&lt;fieldset title="label"&gt;表单内容&lt;/fieldset&gt;，可选的title属性除了可用来表示表单的名字外，还在概要CARD里作为选择项的标题。表单内容可以是嵌套的&lt;fieldset&gt;，输入框&lt;input&gt;，选单&lt;select&gt;和必要的提示文本。<br /><br />　　&lt;input name="variable" title="label" type="type" value="value" default="default" format="specifier" emptyok="false|true" size="n" maxlength="n" tabindex="n"/&gt;，用来输入文本，除了name属性是必要的，其他可选。<br />　　*name属性，指定了用来存储该输入文本的变量名字。<br />　　*title属性，该输入框的名字，同样可被用来作为概要CARD页中的选项名。<br />　　*type属性，默认值为text，如选择password，则输入的数据显示为*。<br />　　*value属性，在语法和行为上等同于下面的default属性，<br />　　*default属性，指定输入框的默认值，即name属性指定变量的默认值，当用户输入新值时，该值无效，如果该值不符合以下format属性的规定，则手机也忽略该默认值。<br />　　*format属性，用来格式化输入的数据，可用的标记如下，使用时可用&ldquo;一位数字标记&rdquo;和&ldquo;*标记&rdquo;的形式，前者代表N个标记型字符，如3X，后者代表任意个(小于maxlength属性的值)标记型字符。<br />　　标记　　　描述<br />　　A 　　　　任何符号或者大写字母(不包括数字)<br />　　a 　　　　任何符号或者小写字母(不包括数字)<br />　　N 　　　　任何数字(不包括符号或者字母)<br />　　X 　　　　任何符号、数字或者大写字母(不可改变为小写字母)<br />　　x 　　　　任何符号、数字或者小写字母(不可改变为大写字母)<br />　　M 　　　　任何符号、数字或者大写字母(可改变为小写字母)或者多个字符，默认为首字大写<br />　　m 　　　　任何符号、数字或者小写字母(可改变为大写字母)或者多个字符，默认为首字小写<br /><br />　　*maxlength属性，指定了用户可输入的最大字符长度，最大限制为256个字符。<br />　　*emptyok属性，表示用户可否不填输入框，默认为false，即要填。<br />　　*size属性，输入框显示长度，目前未被支持。<br />　　*tabindex属性，类似于在HTML表单中按TAB键后，焦点落在哪个选项上，该值决定了这个选择顺序，数字大的排在后面。目前未被支持。<br /><br />test4.wml<br />---------------<br />&lt;?xml version="1.0"?&gt;<br />&lt;!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"&gt;<br /><br />&lt;wml&gt;<br />&lt;card id="card1" ordered="false"&gt;<br />&lt;p&gt;<br />USERNAME:&lt;input name="userName" title="User Name" type="text" value="YourNameHere" format="*M" emptyok="false" maxlength="12" tabindex="1"/&gt;<br />PASSWORD:&lt;input name="password" title="Password" type="password" format="8x" emptyok="false" maxlength="8" tabindex="2"/&gt;<br />COMMENTS:&lt;input name="comments" title="comment" type="text" value="YourCommentsHere" format="*M" emptyok="true" maxlength="30" tabindex="3"/&gt;<br />&lt;/p&gt;<br />&lt;/card&gt;<br />&lt;/wml&gt;<br />　　将上例&lt;card&gt;中的odered的值改为"true"试试看，然后再在&lt;p&gt;和&lt;/p&gt;内加入&lt;fieldset title="field1"&gt;和&lt;/fieldset&gt;试试看。<br /><br />　　&lt;select&gt;选单类似于HTML表单中的&lt;SELECT&gt;，&lt;select&gt;和&lt;/select&gt;间可包含&lt;optgroup&gt;和&lt;option&gt;标签，语法如下，所有属性都为可选：<br />　　&lt;select title="label" multiple="false|true" name="variable" default="default" iname="index_var" ivalue="default" tabindex=" n"&gt;<br />　　&lt;optgroup title="label"&gt;选单内容&lt;/optgroup&gt;<br />　　&lt;option title="label" value="value" onpick="url"&gt;<br />　　事件或者文本<br />　　&lt;/option&gt;<br />　　&lt;/select&gt;<br />　　*title属性，如以上&lt;input&gt;的title属性。<br />　　*multiple属性，指定用户可否进行多项选择，默认值为false。<br />　　*name属性，用来存储用户选择项的变量名，其值为&lt;option&gt;标签的value属性，若用户没有选择又没有用default属性指定默认值，则手机将改变量赋值为空字符串""，对于多项选择，每个值用&ldquo;;&rdquo;分开。<br />　　*default属性，可为name属性指定的变量赋默认值。<br />　　*iname属性，用来记录用户选择项的位置，相应的值从1开始。若没选，则该值为0。<br />　　*ivalue属性，用来记录默认值所在的位置。<br /><br />　　&lt;optgroup&gt;可用来将多个&lt;option&gt;分组，&lt;optgroup&gt;和&lt;/optgroup&gt;间还可包括&lt;optgroup&gt;和&lt;option&gt;，该标签目前尚未被支持。<br /><br />　　&lt;option&gt;，类似于HTML中选单的&lt;OPTION&gt;，用来表示选单的可选项。&lt;option&gt;和&lt;/option&gt;间可包括事件(见下节)和选单的显示文本。&lt;option&gt;的属性为可选，其中value属性用来提供值，当选到该项后，将该值赋给&lt;select&gt;的name属性所指定的变量。onpick属性，用来指定用户选到该项并按ACCEPT键后所打开页面的URL。<br /><br />test5.wml<br />---------------<br />&lt;?xml version="1.0"?&gt;<br />&lt;!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"&gt;<br /><br />&lt;wml&gt;<br />&lt;card id="card0" ordered="false"&gt;<br />&lt;p&gt;<br />Please select a city...<br />&lt;select title="Cities List" name="city"&gt;<br />&lt;option title="Beijing" value="c1"&gt;Beijing&lt;/option&gt;<br />&lt;option title="Shanghai" value="c2"&gt;Shanghai&lt;/option&gt;<br />&lt;option title="Hongkong" value="c3"&gt;Hongkong&lt;/option&gt;<br />&lt;/select&gt;<br />Please select columns...<br />&lt;select title="Column List" multiple="true" name="col"&gt;<br />&lt;option title="Hot News" value="l1"&gt;News&lt;/option&gt;<br />&lt;option title="Cool Sports" value="l2"&gt;Sports&lt;/option&gt;<br />&lt;option title="Pop Enter,,," value="l3"&gt;Entertainment&lt;/option&gt;<br />&lt;/select&gt;<br />&lt;/p&gt;<br />&lt;/card&gt;<br />&lt;/wml&gt;<br /><br /><br /><br /></span><span style="font-size: x-small;">７。事件<br /><br />　　WML的事件基本上分为两大类，一类是键盘(包括软硬按钮)输入事件，用&lt;do&gt;标签来处理，另一类是相关页面内部的事件，用&lt;onevent&gt;标签来处理。<br /><br />　　&lt;do&gt;的语法如下：&lt;do type="type" label="label" name="name" optional="false|true"&gt;任务&lt;/do&gt;，任务就是以前提到的四种任务。&lt;do&gt;的属性中，type是必选的，其他为可选。<br />　　*label属性，指定了软按钮在屏幕上的显示文本。目前type属性为delete，help，prev时该属性无效。　<br />　　*name属性，为&lt;do&gt;取个名字，同一的CARD里的&lt;do&gt;不能重名。如果CARD级的&lt;do&gt;和DECK级的&lt;do&gt;同名，则覆盖DECK级的&lt;do&gt;。<br />　　*optional属性，指定手机是不是可以忽略这个事件，默认值是false。<br />　　*type属性，指定触发的事件，具体如下；<br />　　type值 　　　触发原因<br />　　accept　 　　调用ACCEPT按钮机制<br />　　delete　　 　调用DELETE按钮机制<br />　　help　　　 　调用HELP按钮机制<br />　　options　　&nbsp;&nbsp; 调用选择按钮机制<br />　　prev　　　　 调用PREV按钮机制<br />　　reset　　　&nbsp;&nbsp; 调用清除和重新设定手机状态时的RESET机制(目前不支持)<br />　　unknown 　 　调用unknown机制，等于type=""(目前不支持)<br />　　vnd. co-type 调用厂商特定的机制(目前不支持)<br />　　X-*, x-* 　　供以后使用(不保留)(目前不支持)<br /><br />test6.wml<br />---------------<br />&lt;?xml version="1.0"?&gt;<br />&lt;!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"&gt;<br /><br />&lt;wml&gt;<br />&lt;head&gt;<br />&lt;meta http-equiv="Cache-Control" content="max-age=0"/&gt;<br />&lt;/head&gt;<br />&lt;card id="card0" ordered="false"&gt;<br />&lt;do type="accept" label="InputName" name="do1"&gt;<br />&lt;go href="#card01"/&gt;<br />&lt;/do&gt;<br />&lt;p&gt;<br />NAME:&lt;input name="userName" title="User Name" type="text" format="*M" emptyok="false" maxlength="12"/&gt;<br />&lt;/p&gt;<br />&lt;/card&gt;<br />&lt;card id="card01"&gt;<br />&lt;p&gt;<br />You name is $(userName:noesc).<br />&lt;/p&gt;<br />&lt;/card&gt;<br />&lt;/wml&gt;<br /><br />　　&lt;onevent&gt;的语法如下，&lt;onevent type="type"&gt;任务&lt;/onevent&gt;，必选属性type的取值如下:<br />　　type值　　　　　如果用户执行了以下操作就执行任务<br />　　onpick　　　　　用户选择或不选一个&lt;option&gt;项时。<br />　　onenterforward　用户使用&lt;go&gt;任务到达一个CARD时。<br />　　onenterbackward 用户使用&lt;prev&gt;任务返回到前面的CARD时，或者按BACK按钮时。<br />　　ontimer　　　　 当&lt;timer&gt;过期时。<br /><br />test7.wml<br />---------------<br />&lt;?xml version="1.0"?&gt;<br />&lt;!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"&gt;<br /><br />&lt;wml&gt;<br />&lt;head&gt;<br />&lt;meta http-equiv="Cache-Control" content="max-age=0"/&gt;<br />&lt;/head&gt;<br />&lt;card id="card0" ordered="false"&gt;<br />&lt;p&gt;<br />Please select a city...<br />&lt;select title="Cities List" name="city"&gt;<br />&lt;option title="Beijing" value="Beijing"&gt;<br />&lt;onevent type="onpick"&gt;<br />&lt;go href="#card01"/&gt;<br />&lt;/onevent&gt;Beijing&lt;/option&gt;<br />&lt;option title="Shanghai" value="Shanghai" onpick="#card01"&gt;Shanghai&lt;/option&gt;<br />&lt;option title="Hongkong" value="Hongkong" onpick="#card01"&gt;Hongkong&lt;/option&gt;<br />&lt;/select&gt;<br />&lt;/p&gt;<br />&lt;/card&gt;<br />&lt;card id="card01"&gt;<br />&lt;p&gt;<br />You are Living in $(city:noesc)<br />&lt;/p&gt;<br />&lt;/card&gt;<br />&lt;/wml&gt;<br /><br />　　&lt;timer/&gt;可以用来在用户不进行任何操作的一段时间后，自动执行一个任务，任何激活CARD页面的任务和用户操作都会启动&lt;timer/&gt;，而任务进行时，&lt;timer/&gt;就停止。每个CARD只能有一个&lt;timer/&gt;，一个&lt;timer/&gt;只能触发一个任务。语法如下：&lt;timer name="variable" value="value"/&gt;，其中name为可选属性，指定为一个变量名，当退出该CARD时，该变量存储此时定时器的值，当定时器超时时，手机将该变量设为0；value为必选属性，用来设置定时器的定时值，最小单位为0.1秒。<br /><br />test8.wml<br />---------------<br />&lt;?xml version="1.0"?&gt;<br />&lt;!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"&gt;<br /><br />&lt;wml&gt;<br />&lt;head&gt;<br />&lt;meta http-equiv="Cache-Control" content="max-age=0"/&gt;<br />&lt;/head&gt;<br />&lt;card id="card1" ontimer="#card2"&gt;<br />&lt;timer name="time1" value="50"/&gt;<br />&lt;p align="center"&gt;<br />After 5s, goto card2<br />&lt;/p&gt;<br />&lt;/card&gt;<br />&lt;card id="card2"&gt;<br />&lt;onevent type="ontimer"&gt;<br />&lt;go href="#card1"/&gt;<br />&lt;/onevent&gt;<br />&lt;timer name="time2" value="50"/&gt;<br />&lt;p align="center"&gt;<br />Here is card2!<br />&lt;/p&gt;<br />&lt;/card&gt;<br />&lt;/wml&gt;<br /><br />　　再提一下，&lt;onevent&gt;　&lt;timer&gt;　&lt;do&gt;三者必须按以上顺序写。<br /><br />　　此外在DECK级还可以加入&lt;template&gt;，用来将事件捆绑在DECK级上，语法如下：<br />　　&lt;template onenterforward="url" onenterbackward="url" ontimer="url"&gt;<br />　　&lt;do&gt;或者&lt;onevent&gt;<br />　　&lt;/template&gt;<br /><br /><br />test9.wml<br />---------------<br />&lt;?xml version="1.0"?&gt;<br />&lt;!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"&gt;<br /><br />&lt;wml&gt;<br />&lt;head&gt;<br />&lt;meta http-equiv="Cache-Control" content="max-age=0"/&gt;<br />&lt;/head&gt;<br />&lt;template&gt;<br />&lt;do type="accept" label="deckPress" name="do1"&gt;<br />&lt;go href="#card01"/&gt;<br />&lt;/do&gt;<br />&lt;/template&gt;<br />&lt;card id="card0" ordered="false"&gt;<br />&lt;do type="accept" label="cardPress" name="do1"&gt;<br />&lt;go href="#card02"/&gt;<br />&lt;/do&gt;<br />&lt;p&gt;<br />Press ACCEPT...<br />&lt;/p&gt;<br />&lt;/card&gt;<br />&lt;card id="card01"&gt;<br />&lt;p&gt;<br />Here is card01<br />&lt;/p&gt;<br />&lt;/card&gt;<br />&lt;card id="card02"&gt;<br />&lt;p&gt;<br />Here is card02<br />&lt;/p&gt;<br />&lt;/card&gt;<br />&lt;/wml&gt;<br /><br /><br /><br /></span><span style="font-size: x-small;">８。CGI编程<br /><br />　　1)在WEB服务器上添加WML的MIME类型<br />　　　对于IIS4，可在其管理器里的站点属性中加入新的MIME类型，后缀.wml和MIME类型text/vnd.wap.wml。<br />　　　对于PWS，可修改注册表，先在HKEY_CLASSES_ROOT层加入主键.wml，再加入串值Content Type为text/vnd.wap.wml，然后在HKEY_LOCAL_MACHINE\Software\CLASSES\MIME\Database\Content Type\中加入主键text/vnd.wap.wml，再加入串值Extension为.wml。<br />　　　以前提到的HDML也用类似的方法。<br /><br />　　2)以http方式访问wml文件<br />　　　在手机浏览器的URL栏里输入http://localhost/test.wml，就可以访问WML文件了。<br /><br />　　3)CGI设计<br />　　　和普通CGI变成的方式差不多，只是返回结果时，先要输出Content-Type为text/vnd.wap.wml，然后再输出WML内容。<br /><br />test10.wml<br />---------------<br />&lt;?xml version="1.0"?&gt;<br />&lt;!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"&gt;<br /><br />&lt;wml&gt;<br />&lt;head&gt;<br />&lt;meta http-equiv="Cache-Control" content="max-age=0"/&gt;<br />&lt;/head&gt;<br />&lt;card id="card0"&gt;<br />&lt;do type="accept" label="Input Name" name="do1"&gt;<br />&lt;go href="http://localhost/test.asp" method="post"&gt;<br />&lt;postfield name="uid" value="123456"/&gt;<br />&lt;postfield name="uname" value="$(userName:esc)"/&gt;<br />&lt;/go&gt;<br />&lt;/do&gt;<br />&lt;p&gt;<br />NAME:&lt;input name="userName" title="User Name" type="text" format="*M" emptyok="false" maxlength="12"/&gt;<br />&lt;/p&gt;<br />&lt;/card&gt;<br /><br />test10.asp<br />---------------<br />&lt;%<br />uid=Request.Form("uid")<br />userName=Request.Form("uname")<br />Response.ContentType="text/vnd.wap.wml"<br />%&gt;<br />&lt;?xml version="1.0"?&gt;<br />&lt;!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"&gt;<br /><br />&lt;wml&gt;<br />&lt;card&gt;<br />&lt;p&gt;<br />USERNAME:&lt;%=userName%&gt;<br />USER__ID:&lt;%=uid%&gt;<br />&lt;/p&gt;<br />&lt;/card&gt;<br />&lt;/wml&gt;</span></span></p>
</td>
</tr>
</tbody>
</table><img src ="http://www.cnblogs.com/tuyile006/aggbug/1435375.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47977/" target="_blank">Mono 的Virtual PC 虚拟机</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>Wap开发起步（转）</title><link>http://www.cnblogs.com/tuyile006/archive/2009/04/14/1435367.html</link><dc:creator>小y</dc:creator><author>小y</author><pubDate>Tue, 14 Apr 2009 01:25:00 GMT</pubDate><guid>http://www.cnblogs.com/tuyile006/archive/2009/04/14/1435367.html</guid><wfw:comment>http://www.cnblogs.com/tuyile006/comments/1435367.html</wfw:comment><comments>http://www.cnblogs.com/tuyile006/archive/2009/04/14/1435367.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/tuyile006/comments/commentRss/1435367.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/tuyile006/services/trackbacks/1435367.html</trackback:ping><description><![CDATA[<p><span style="font-size: large;">1.1.&nbsp;如何在IIS上建立Wap网站<br /><br /></span><span style="font-size: medium; color: #000000;">1.1.1.&nbsp;第一步：<br /><br /></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;创建一个站点文件夹 首先你要创建一个独立于你的主站点的新的站点文件夹（若站点是建立在同一个服务器上面的话），这样你下面要做的改动才不会影响别的站点。<br /><br />&nbsp;<br /></span><span style="color: #000000;"><span style="font-size: medium; font-family: 宋体;">1.1.2.&nbsp;第二步：<br /><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在IIS 平台创建一个新的MIME类型 先选择WAP站点的属性，再加入MIME类型，然后选择HTTP Headers标签。&nbsp;&nbsp; <br />在MIME Map部分，点击File Type并且输入以下信息： <br />Associated Extension&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MIME Type<br />wml&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; text/vnd.wap.wml<br />wmlc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; application/vnd.wap.wmlc<br />wbmp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;image/vnd.wap.wbmp<br />wmlsc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;application/vnd.wap.wmlscriptc<br />wmls&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; text/vnd.wap.wmlscript<br />wsc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;application/vnd.wap/wmlscriptc</span></p>
<p><span style="color: #000000;">　　</span></p>
<p><br /><span style="color: #000000;"><span style="font-size: medium; font-family: 宋体;">1.1.3.&nbsp;第三步：<br /><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;现在，你就可以把你的网站内容加到站点文件夹里面了。<br /><br /></span><span style="color: #000000;"><span style="font-size: large; font-family: 宋体;">1.2.&nbsp;Wap模拟器<br /></span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Wap模拟器有很多，公认语法检测最严格的是m3gate,使用最方便的是opera.建议大家在测试程序时用m3gate,如果它没检查出问题，基本上在手机上就不会有问题；平常浏览的话就用opera(其实它就是一个网页浏览器，只不过它能够支持wml语法)，它使用起来很方便，类似于IE操作。<br /><br /></span><span style="color: #000000;"><span style="font-size: large; font-family: 宋体;">1.3.&nbsp;具体例子：<br /><br /><span style="font-size: medium;">1.3.1.&nbsp;Asp</span></span><br /><br />&lt;% Response.ContentType ="text/vnd.wap.wml"%&gt;<br />&lt;?xml version="1.0" encoding="gb2312"?&gt;<br />&lt;!DOCTYPE wml PUBLIC "-//OPENWAVE.COM//DTD WML 1.3//EN" "</span><a href="http://www.openwave.com/dtd/wml13.dtd"><span style="color: #000000;">http://www.openwave.com/dtd/wml13.dtd</span></a><span style="color: #000000;">"&gt;<br />&lt;wml&gt;<br />&lt;card&nbsp; title="Wap-Asp例子"&gt;<br />&lt;p align="center"&gt;&lt;img src="test.png" alt=""/&gt;&lt;/p&gt;<br />&lt;p&gt; <br />&lt;%<br />&nbsp;Response.Write("welcome")<br />%&gt;<br />&lt;br/&gt;<br />&nbsp;&lt;a href="http:// wap.uni-wise.com " title="确定"&gt;返回上级&lt;/a&gt;&lt;br/&gt;<br />&nbsp;&lt;/p&gt;<br />&lt;do type="options" label="回首页"&gt;<br />&lt;go href="</span><a href="http://wap.uni-wise.com%22/"><span style="color: #000000;">http://wap.uni-wise.com"/</span></a><span style="color: #000000;">&gt;<br />&lt;/do&gt;<br />&lt;/card&gt;<br />&lt;/wml&gt;<br /><br /><span style="font-size: medium; font-family: 宋体;">1.3.2.&nbsp;Asp.Net</span><br /><br />&lt;%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="Test_Wap.WebForm1" ContentType="text/vnd.wap.wml"%&gt;<br />&lt;?xml version="1.0" encoding="gb2312"?&gt;<br />&lt;!DOCTYPE wml PUBLIC "-//OPENWAVE.COM//DTD WML 1.3//EN" "</span><a href="http://www.openwave.com/dtd/wml13.dtd"><span style="color: #000000;">http://www.openwave.com/dtd/wml13.dtd</span></a><span style="color: #000000;">"&gt;<br />&lt;wml&gt;<br />&lt;card title="&lt;%=name%&gt;"&gt;<br />&lt;p align="center" mode="nowrap"&gt;<br />&lt;%<br />&nbsp; Display();<br />%&gt;<br />&lt;/p&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&lt;do type="options" label="回首页"&gt;<br />&lt;go href="</span><a href="http://wap.uni-wise.com%22/"><span style="color: #000000;">http://wap.uni-wise.com"/</span></a><span style="color: #000000;">&gt;<br />&lt;/do&gt;<br />&lt;/card&gt;<br />&lt;/wml&gt;<br /><br /><span style="font-size: medium; font-family: 宋体;">1.3.3.&nbsp;WebForm1.aspx.cs文件</span><br /><br />using System;<br />using System.Collections;<br />using System.ComponentModel;<br />using System.Data;<br />using System.Drawing;<br />using System.Web;<br />using System.Web.SessionState;<br />using System.Web.UI;<br />using System.Web.UI.WebControls;<br />using System.Web.UI.HtmlControls;</span></p>
<p><span style="color: #000000;">namespace Test_Wap<br />{<br />&nbsp;/// &lt;summary&gt;<br />&nbsp;/// WebForm1 的摘要说明。<br />&nbsp;/// &lt;/summary&gt;<br />&nbsp;public class WebForm1 : System.Web.UI.Page<br />&nbsp;{<br />&nbsp;&nbsp;protected string name="Wap-Asp.Net例子";<br />private void Page_Load(object sender, System.EventArgs e)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;// 在此处放置用户代码以初始化页面<br />&nbsp;&nbsp;}</span></p>
<p><span style="color: #000000;">&nbsp;&nbsp;protected void Display()<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Response.Write("Welcome");<br />&nbsp;&nbsp;}</span></p>
<p><span style="color: #000000;">&nbsp;&nbsp;#region Web 窗体设计器生成的代码<br />&nbsp;&nbsp;override protected void OnInit(EventArgs e)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;//<br />&nbsp;&nbsp;&nbsp;// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。<br />&nbsp;&nbsp;&nbsp;//<br />&nbsp;&nbsp;&nbsp;InitializeComponent();<br />&nbsp;&nbsp;&nbsp;base.OnInit(e);<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;/// &lt;summary&gt;<br />&nbsp;&nbsp;/// 设计器支持所需的方法 - 不要使用代码编辑器修改<br />&nbsp;&nbsp;/// 此方法的内容。<br />&nbsp;&nbsp;/// &lt;/summary&gt;<br />&nbsp;&nbsp;private void InitializeComponent()<br />&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;this.Load += new System.EventHandler(this.Page_Load);<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;#endregion<br />&nbsp;}<br />}</span></p>
<p><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Wap上的业务，图铃下载类占了大部分，而且这两种业务的收入也占中国联通和中国移动Wap总收入80%还多，大家在此遇到的问题也最多。下节我以中国联通图铃下载业务为例给大家讲解一下下载类业务的开发。(待续)<br /></span></p><img src ="http://www.cnblogs.com/tuyile006/aggbug/1435367.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47977/" target="_blank">Mono 的Virtual PC 虚拟机</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>ASP.NET指令</title><link>http://www.cnblogs.com/tuyile006/archive/2009/03/25/1421400.html</link><dc:creator>小y</dc:creator><author>小y</author><pubDate>Wed, 25 Mar 2009 07:08:00 GMT</pubDate><guid>http://www.cnblogs.com/tuyile006/archive/2009/03/25/1421400.html</guid><wfw:comment>http://www.cnblogs.com/tuyile006/comments/1421400.html</wfw:comment><comments>http://www.cnblogs.com/tuyile006/archive/2009/03/25/1421400.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/tuyile006/comments/commentRss/1421400.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/tuyile006/services/trackbacks/1421400.html</trackback:ping><description><![CDATA[<div id="blog_text" class="cnt">
<p>
<table style="table-layout: fixed;">
<tbody>
<tr>
<td>
<div id="blog_text" class="cnt">
<p>ASP.NET 2.0</p>
<div>ASP.NET指令在每个ASP.NET页面中都有。使用这些指令可以控制ASP.NET页面的行为。</div>
<div>在ASP.NET页面或用户控件中有11个指令。无论页面是使用后台编码模型还是内置编码模型，都可以在应用程序中使用这些指令。</div>
<div>基本上，这些指令都是编译器编译页面时使用的命令。把指令合并到页面中是很简单的。指令的格式如下：</div>
<div>&lt;%@ [Directive] [Attribute=Value] %&gt;</div>
<div>在上面的代码行中，指令以&lt;%@开头，以%&gt;结束。最好把这些指令放在页面或控件的顶部，因为开发人员传统上都把指令放在那里(但如果指令位于其他地方，页面仍能编译)。当然，也可以把多个属性添加到指令语句中，如下所示：</div>
<div>&lt;%@ [Directive] [Attribute=Value] [Attribute=Value] %&gt;</div>
<div>表3-3描述了ASP.NET 2.0中的指令：</div>
<div>表 3-3
<div align="center">
<table border="1" bordercolorlight="#666666" width="97%" cellpadding="0" bordercolordark="#ffffff" cellspacing="0">
<tbody>
<tr>
<td width="21%" align="left" valign="top">
<div>指令</div>
</td>
<td width="78%" align="left" valign="top">
<div align="center">说明</div>
</td>
</tr>
<tr>
<td width="21%" align="left">
<div>Assembly</div>
</td>
<td width="78%" align="left">
<div>把程序集链接到与它相关的页面或用户控件上</div>
</td>
</tr>
<tr>
<td width="21%" align="left">
<div>Control</div>
</td>
<td width="78%" align="left">
<div>用户控件(.ascx)使用的指令，其含义与Page指令相当</div>
</td>
</tr>
<tr>
<td width="21%" align="left">
<div>Implements</div>
</td>
<td width="78%" align="left">
<div>实现指定的.NET Framework接口</div>
</td>
</tr>
<tr>
<td width="21%" align="left">
<div>Import</div>
</td>
<td width="78%" align="left">
<div>在页面或用户控件中导入指定的命名空间</div>
</td>
</tr>
<tr>
<td width="21%" align="left">
<div>Master</div>
</td>
<td width="78%" align="left">
<div>允许指定master页面&mdash;&mdash;在解析或编译页面时使用的特定属性和值。这个指令只能与master页面(.master)一起使用</div>
</td>
</tr>
<tr>
<td width="21%" align="left">
<div>MasterType</div>
</td>
<td width="78%" align="left">
<div>把类名与页面关联起来，获得包含在特定master页面中的强类型化的引用或成员</div>
</td>
</tr>
<tr>
<td width="21%" align="left">
<div>OutputCache</div>
</td>
<td width="78%" align="left">
<div>控制页面或用户控件的输出高速缓存策略</div>
</td>
</tr>
<tr>
<td width="21%" align="left">
<div>Page</div>
</td>
<td width="78%" align="left">
<div>允许指定在解析或编译页面时使用的页面特定属性和值。这个指令只能与ASP.NET页面(.aspx)一起使用</div>
</td>
</tr>
<tr>
<td width="21%" align="left">
<div>PreviousPageType</div>
</td>
<td width="78%" align="left">
<div>允许ASP.NET页面处理应用程序中另一个页面的回送信息</div>
</td>
</tr>
<tr>
<td width="21%" align="left">
<div>Reference</div>
</td>
<td width="78%" align="left">
<div>把页面或用户控件链接到当前的页面或用户控件上</div>
</td>
</tr>
<tr>
<td width="21%" align="left">
<div>Register</div>
</td>
<td width="78%" align="left">
<div>给命名空间和类名关联上别名，作为定制服务器控件语法中的记号</div>
</td>
</tr>
</tbody>
</table>
</div>
<div align="left">下面几节简要介绍这些指令。</div>
<div>
<div><strong><a href="mailto:1.@Page">1.@Page</a></strong></div>
<div>@Page指令允许为ASP.NET页面(.aspx)指定解析和编译页面时使用的属性和值。这是最常用的指令。ASP.NET页面是ASP.NET的一个重要部分，所以它有许多属性。表3-4总结了@Page指令的可用属性。</div>
<div>表3-4</div>
<div align="center">
<table border="1" bordercolorlight="#666666" width="97%" cellpadding="0" bordercolordark="#ffffff" cellspacing="0">
<tbody>
<tr>
<td width="179" align="left">
<div>属性</div>
</td>
<td width="774" align="left">
<div>说明</div>
</td>
</tr>
<tr>
<td width="179" align="left">
<div>AspCompat</div>
</td>
<td width="774" align="left">
<div>若其值为True，就允许页面在单线程的单元中执行，这个属性的默认设置是False。</div>
</td>
</tr>
<tr>
<td width="179" align="left">
<div>Async</div>
</td>
<td width="774" align="left">
<div>指定ASP.NET页面是同步或异步处理</div>
</td>
</tr>
<tr>
<td width="179" align="left">
<div>AutoEventWireUp</div>
</td>
<td width="774" align="left">
<div>设置为True时，指定页面事件自动触发。这个属性的默认设置是True</div>
</td>
</tr>
<tr>
<td width="179" align="left">
<div>Buffer</div>
</td>
<td width="774" align="left">
<div>设置为True时，支持HTTP响应缓存。这个属性的默认设置是True</div>
</td>
</tr>
<tr>
<td width="179" align="left">
<div>ClassName</div>
</td>
<td width="774" align="left">
<div>指定编译页面时绑定到页面上的类名</div>
</td>
</tr>
<tr>
<td width="179" align="left">
<div>CodeFile</div>
</td>
<td width="774" align="left">
<div>引用与页面相关的后台编码文件</div>
</td>
</tr>
<tr>
<td width="179" align="left">
<div>CodePage</div>
</td>
<td width="774" align="left">
<div>指定响应的代码页面值</div>
</td>
</tr>
<tr>
<td width="179" align="left">
<div>CompilerOptions</div>
</td>
<td width="774" align="left">
<div>编译器字符串，指定页面的编译选项</div>
</td>
</tr>
<tr>
<td width="179" align="left">
<div>CompileWith</div>
</td>
<td width="774" align="left">
<div>包含一个String值，指向所使用的后台编码文件</div>
</td>
</tr>
<tr>
<td width="179" align="left">
<div>ContentType</div>
</td>
<td width="774" align="left">
<div>把响应的HTTP内容类型定义为标准MIME类型</div>
</td>
</tr>
<tr>
<td width="179" align="left">
<div>Culture</div>
</td>
<td width="774" align="left">
<div>指定页面的文化设置。ASP.NET 2.0允许把Culture 属性的值设置为Auto ，支持自动检测需要的文化</div>
</td>
</tr>
<tr>
<td width="179" align="left">
<div>Debug</div>
</td>
<td width="774" align="left">
<div>设置为True时，用调试符号编译页面</div>
</td>
</tr>
<tr>
<td width="179" align="left">
<div>Description</div>
</td>
<td width="774" align="left">
<div>提供页面的文本描述。ASP.NET解析器忽略这个属性及其值</div>
</td>
</tr>
<tr>
<td width="179" align="left">
<div>EnableSessionState</div>
</td>
<td width="774" align="left">
<div>设置为True时，支持页面的会话状态，其默认设置是True</div>
</td>
</tr>
<tr>
<td width="179" align="left">
<div>EnableTheming</div>
</td>
<td width="774" align="left">
<div>设置为True时，页面可以使用主题。其默认设置是False.</div>
</td>
</tr>
<tr>
<td width="179" align="left">
<div>EnableViewState</div>
</td>
<td width="774" align="left">
<div>设置为True时，在页面中维护视图状态，其默认设置是True </div>
</td>
</tr>
<tr>
<td width="179" align="left">
<div>EnableViewStateMac</div>
</td>
<td width="774" align="left">
<div>设置为True时，当用户回送页面时，页面会在视图状态上进行机器范围内的身份验证，其默认设置是False</div>
</td>
</tr>
<tr>
<td width="179" align="left">
<div>ErrorPage</div>
</td>
<td width="774" align="left">
<div>为所有未处理的页面异常指定用于发送信息的URL</div>
</td>
</tr>
<tr>
<td width="179" align="left">
<div>Explicit</div>
</td>
<td width="774" align="left">
<div>设置为True时，支持Visual Basic的Explicit选项。其默认设置是False</div>
</td>
</tr>
<tr>
<td width="179" align="left">
<div>Language</div>
</td>
<td width="774" align="left">
<div>定义内置显示和脚本块所使用的语言</div>
</td>
</tr>
<tr>
<td width="179" align="left">
<div>LCID</div>
</td>
<td width="774" align="left">
<div>为Web Form的页面定义本地标识符</div>
</td>
</tr>
<tr>
<td width="179" align="left">
<div>LinePragmas</div>
</td>
<td width="774" align="left">
<div>Boolean值，指定得到的程序集是否使用行附注</div>
</td>
</tr>
<tr>
<td width="179" align="left">
<div>MasterPageFile</div>
</td>
<td width="774" align="left">
<div>带一个 String 值，指向页面所使用的master页面的地址。这个属性在内容页面中使用</div>
</td>
</tr>
<tr>
<td width="179" align="left">
<div>MaintainScrollPositionOn<br />Postback</div>
</td>
<td width="774" align="left">
<div>带一个Boolean 值，表示在回送页面时，页面是位于相同的滚动位置上，还是在最高的位置上重新生成页面</div>
</td>
</tr>
<tr>
<td width="179" align="left">
<div>PersonalizationProvider</div>
</td>
<td width="774" align="left">
<div>带一个 String 值，指定把个性化信息应用于页面时所使用的个性化提供程序名</div>
</td>
</tr>
<tr>
<td width="179" align="left">
<div>ResponseEncoding</div>
</td>
<td width="774" align="left">
<div>指定页面内容的响应编码</div>
</td>
</tr>
</tbody>
</table>
</div>
<p>(续表)</p>
<div align="center">
<table border="1" bordercolorlight="#666666" width="97%" cellpadding="0" bordercolordark="#ffffff" cellspacing="0">
<tbody>
<tr>
<td width="133" align="left">
<div>属性</div>
</td>
<td width="820" align="left">
<div>说明</div>
</td>
</tr>
<tr>
<td width="133" align="left">
<div>SmartNavigation</div>
</td>
<td width="820" align="left">
<div>指定是否为功能更丰富的浏览器激活ASP.NET智能导航功能。它把回送信息返回到页面的当前位置，其默认值是False </div>
</td>
</tr>
<tr>
<td width="133" align="left">
<div>Src</div>
</td>
<td width="820" align="left">
<div>指向类的源文件，用于所显示的页面的后台编码</div>
</td>
</tr>
<tr>
<td width="133" align="left">
<div>Strict</div>
</td>
<td width="820" align="left">
<div>设置为True时，使用Visual Basic Strict模式编译页面，其默认值是False </div>
</td>
</tr>
<tr>
<td width="133" align="left">
<div>Theme</div>
</td>
<td width="820" align="left">
<div>使用ASP.NET 2.0的主题功能，把指定的主题应用于页面</div>
</td>
</tr>
<tr>
<td width="133" align="left">
<div>Title</div>
</td>
<td width="820" align="left">
<div>应用页面的标题。这个属性主要用于必须应用页面标题的内容页面，而不是应用master页面中指定内容的页面</div>
</td>
</tr>
<tr>
<td width="133" align="left">
<div>Trace</div>
</td>
<td width="820" align="left">
<div>设置为True时，激活页面跟踪，其默认值是False</div>
</td>
</tr>
<tr>
<td width="133" align="left">
<div>TraceMode</div>
</td>
<td width="820" align="left">
<div>指定激活跟踪功能时如何显示跟踪消息。这个属性的设置可以是SortByTime 或SortByCategory，默认设置是SortByTime</div>
</td>
</tr>
<tr>
<td width="133" align="left">
<div>Transaction</div>
</td>
<td width="820" align="left">
<div>指定页面上是否支持事务处理。这个属性的设置可以是NotSupported、Supported、Required和RequiresNew，默认设置是NotSupported</div>
</td>
</tr>
<tr>
<td width="133" align="left">
<div>UICulture</div>
</td>
<td width="820" align="left">
<div>UICulture 属性的值指定ASP.NET 页面使用什么UI Culture。 ASP.NET 2.0允许给UICulture属性使用Auto值，支持自动检测UICulture</div>
</td>
</tr>
<tr>
<td width="133" align="left">
<div>ValidateRequest</div>
</td>
<td width="820" align="left">
<div>设置为True时，根据一组潜在危险的值检查窗体输入值，帮助防止Web应用程序受到有害的攻击，例如JavaScript攻击。默认值是True</div>
</td>
</tr>
<tr>
<td width="133" align="left">
<div>WarningLevel</div>
</td>
<td width="820" align="left">
<div>指定停止编译页面时的编译警告级别，其值可以是0到4</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p><span style="text-decoration: underline;"><a href="mailto:1.@Page"><strong>2.@Control</strong></a></span></p>
<p>@Control 指令类似于@Page指令，但 @Control指令是在建立ASP.NET用户控件时使用的。@Control指令允许定义用户控件要继承的属性。这些属性值会在解析和编译页面时赋予 用户控件。@Control指令的可用属性比@Page指令少，但其中有许多都可以在建立用户控件时进行需要的修改。表3-6详细介绍了这些可用属性。</p>
<p>表3-6</p>
<div align="center">
<table border="1" bordercolorlight="#666666" width="97%" cellpadding="0" bordercolordark="#ffffff" cellspacing="0">
<tbody>
<tr>
<td width="114" valign="top">
<p>属性</p>
</td>
<td width="437" valign="top">
<p>说明</p>
</td>
</tr>
<tr>
<td width="114" valign="top">
<p>AutoEventWireUp</p>
</td>
<td width="437" valign="top">
<p>设置为True时，指定用户控件的事件是否自动触发。默认设置为True</p>
</td>
</tr>
<tr>
<td width="114" valign="top">
<p>ClassName</p>
</td>
<td width="437" valign="top">
<p>指定编译页面时绑定到用户控件上的类名</p>
</td>
</tr>
<tr>
<td width="114" valign="top">
<p>CodeFile</p>
</td>
<td width="437" valign="top">
<p>引用与用户控件相关的后台编码文件</p>
</td>
</tr>
<tr>
<td width="114" valign="top">
<p>CompilerOptions</p>
</td>
<td width="437" valign="top">
<p>编译字符串，表示用户控件的编译选项</p>
</td>
</tr>
<tr>
<td width="114" valign="top">
<p>CompileWith</p>
</td>
<td width="437" valign="top">
<p>带一个String值，指向用于用户控件的后台编码文件</p>
</td>
</tr>
<tr>
<td width="114" valign="top">
<p>Debug</p>
</td>
<td width="437" valign="top">
<p>设置为True时，用调试符号编译用户控件</p>
</td>
</tr>
</tbody>
</table>
</div>
<p align="right">(续表) </p>
<div align="center">
<table border="1" bordercolorlight="#666666" width="97%" cellpadding="0" bordercolordark="#ffffff" cellspacing="0">
<tbody>
<tr>
<td width="114" valign="top">
<p>属性</p>
</td>
<td width="437" valign="top">
<p>说明</p>
</td>
</tr>
<tr>
<td width="114" valign="top">
<p>Description</p>
</td>
<td width="437" valign="top">
<p>提供用户控件的文本描述。ASP.NET 解析器会忽略这个属性及其值</p>
</td>
</tr>
<tr>
<td width="114" valign="top">
<p>EnableTheming</p>
</td>
<td width="437" valign="top">
<p>设置为True时，表示用户控件可以使用主题功能。其默认设置是False</p>
</td>
</tr>
<tr>
<td width="114" valign="top">
<p>EnableViewState</p>
</td>
<td width="437" valign="top">
<p>设置为True时，维护用户控件的视图状态。其默认设置是True </p>
</td>
</tr>
<tr>
<td width="114" valign="top">
<p>Explicit</p>
</td>
<td width="437" valign="top">
<p>设置为True时，表示激活Visual Basic Explicit 选项。其默认设置是False </p>
</td>
</tr>
<tr>
<td width="114" valign="top">
<p>Inherits</p>
</td>
<td width="437" valign="top">
<p>指定用户控件要继承的CodeBehind类</p>
</td>
</tr>
<tr>
<td width="114" valign="top">
<p>Language</p>
</td>
<td width="437" valign="top">
<p>定义内置显示和脚本块使用的语言</p>
</td>
</tr>
<tr>
<td width="114" valign="top">
<p>LinePragmas</p>
</td>
<td width="437" valign="top">
<p>Boolean值，指定得到的程序集是否使用行附注</p>
</td>
</tr>
<tr>
<td width="114" valign="top">
<p>Src</p>
</td>
<td width="437" valign="top">
<p>指向类的源文件，用于要显示的用户控件的后台编码</p>
</td>
</tr>
<tr>
<td width="114" valign="top">
<p>Strict</p>
</td>
<td width="437" valign="top">
<p>设置为True时，使用Visual Basic Strict模式编译用户控件。其默认设置是False </p>
</td>
</tr>
<tr>
<td width="114" valign="top">
<p>WarningLevel</p>
</td>
<td width="437" valign="top">
<p>指定停止编译页面时的编译警告级别，其值可以是0到4</p>
</td>
</tr>
</tbody>
</table>
</div>
<p>@Control指令用于ASP.NET用户控件。</p>
<p><span style="text-decoration: underline;"><strong><span style="color: #3366ff;">3.&nbsp;@Import</span></strong></span> </p>
<div style="text-indent: 21.1pt;">@Import指令允许指定要导入到ASP.NET页面或用户控件中的命名空间。导入了命名空间后，该命名空间中的所有类和接口就可以在页面和用户控件中使用了。这个指令只支持一个属性Namespace。</div>
<div style="text-indent: 21.1pt;">Namespace属性带一个String值，它指定要导入的命名空间。@Import指令不能包含多个属性/值对。所以，必须把多个命名空间导入指令放在多行代码上，如下所示：</div>
<div style="margin-top: 7.8pt;">&lt;%@ Import Namespace="System.Data" %&gt;</div>
<div style="margin-bottom: 7.8pt;">&lt;%@ Import Namespace="System.Data.SqlClient" %&gt;</div>
<div style="text-indent: 20.7pt;">应 用程序已经引用了几个程序集，查看C:\ Windows\Microsoft.NET\Framework\v2.0 xxxxx \CONFIG中的web.config.comments文件，就可以找到这些已导入命名空间的列表。这个程序集列表从&lt; compilation&gt;元素的&lt;assemblies&gt;子元素中引用。Web.config.comments文件中的设置如下所 示：</div>
<div style="margin-top: 7.8pt; line-height: 9pt;">&lt;assemblies&gt;</div>
<div style="margin-top: 2.5pt; line-height: 9pt;">&nbsp;&nbsp; &lt;add assembly="mscorlib" /&gt;</div>
<div style="margin-top: 2.5pt; line-height: 9pt;">&nbsp;&nbsp; &lt;add assembly="System, Version=2.0.0.0, Culture=neutral, </div>
<div style="margin-top: 2.5pt; line-height: 9pt;">&nbsp;&nbsp;&nbsp; PublicKeyToken=b77a5c561934e089" /&gt;</div>
<div style="margin-top: 2.5pt; line-height: 9pt;">&nbsp;&nbsp; &lt;add assembly="System.Web, Version=2.0.0.0, Culture=neutral, </div>
<div style="margin-top: 2.5pt; line-height: 9pt;">&nbsp;&nbsp;&nbsp; PublicKeyToken=b03f5f7f11d50a3a" /&gt;</div>
<div style="margin-top: 2.5pt; line-height: 9pt;">&nbsp;&nbsp; &lt;add assembly="System.Data, Version=2.0.0.0, Culture=neutral, </div>
<div style="margin-top: 2.5pt; line-height: 9pt;">&nbsp;&nbsp;&nbsp; PublicKeyToken=b77a5c561934e089" /&gt;</div>
<div style="margin-top: 2.5pt; line-height: 9pt;">&nbsp;&nbsp; &lt;add assembly="System.Web.Services, Version=2.0.0.0, Culture=neutral, </div>
<div style="margin-top: 2.5pt; line-height: 9pt;">&nbsp;&nbsp;&nbsp; PublicKeyToken=b03f5f7f11d50a3a" /&gt;</div>
<div style="margin-top: 2.5pt; line-height: 9pt;">&nbsp;&nbsp; &lt;add assembly="System.Xml, Version=2.0.0.0, Culture=neutral, </div>
<div style="margin-top: 2.5pt; line-height: 9pt;">&nbsp;&nbsp;&nbsp; PublicKeyToken=b77a5c561934e089" /&gt;</div>
<div style="margin-top: 2.5pt; line-height: 9pt;">&nbsp;&nbsp; &lt;add assembly="System.Drawing, Version=2.0.0.0, Culture=neutral, </div>
<div style="margin-top: 2.5pt; line-height: 9pt;">&nbsp;&nbsp;&nbsp; PublicKeyToken=b03f5f7f11d50a3a" /&gt;</div>
<div style="margin-top: 2.5pt; line-height: 9pt;">&nbsp;&nbsp; &lt;add assembly="System.EnterpriseServices, Version=2.0.0.0, Culture=neutral, </div>
<div style="margin-top: 2.5pt; line-height: 9pt;">&nbsp;&nbsp;&nbsp; PublicKeyToken=b03f5f7f11d50a3a" /&gt;</div>
<div style="margin-top: 2.5pt; line-height: 9pt;">&nbsp;&nbsp; &lt;add assembly="System.Web.Mobile, Version=2.0.0.0, Culture=neutral, </div>
<div style="margin-top: 2.5pt; line-height: 9pt;">&nbsp;&nbsp;&nbsp; PublicKeyToken=b03f5f7f11d50a3a" /&gt;</div>
<div style="margin-top: 2.5pt; line-height: 9pt;">&nbsp;&nbsp; &lt;add assembly="*" /&gt;</div>
<div style="margin: 2.5pt 0cm 7.8pt; line-height: 9pt;">&lt;/assemblies&gt;</div>
<div style="text-indent: 21.1pt;">web.config.comments 文件中有这个引用，所以这些程序集不需要像ASP.NET 1.0/1.1那样在References文件夹中引用。可以添加或删除在这个列表中引用的程序集。例如，如果服务器上的每个应用程序都引用了一个定制程 序集，就可以在其他程序集的下面添加对定制程序集的类似引用。注意还可以通过应用程序的web.config文件完成这个任务。</div>
<div style="text-indent: 21.1pt;">尽管程序集已引用，仍必须在页面中导入这些程序集的命名空间。web.config.comments文件包含自动导入到应用程序的页面中的命名空间列表，这是通过&lt;pages&gt;元素的&lt;namespaces&gt;子元素指定的：</div>
<div style="margin-top: 7.8pt; line-height: 9pt;">&lt;namespaces&gt;</div>
<div style="margin-top: 2.5pt; line-height: 9pt;">&nbsp;&nbsp; &lt;add namespace="System" /&gt;</div>
<div style="margin-top: 2.5pt; line-height: 9pt;">&nbsp;&nbsp; &lt;add namespace="System.Collections" /&gt;</div>
<div style="margin-top: 2.5pt; line-height: 9pt;">&nbsp;&nbsp; &lt;add namespace="System.Collections.Specialized" /&gt;</div>
<div style="margin-top: 2.5pt; line-height: 9pt;">&nbsp;&nbsp; &lt;add namespace="System.Configuration" /&gt;</div>
<div style="margin-top: 2.5pt; line-height: 9pt;">&nbsp;&nbsp; &lt;add namespace="System.Text" /&gt;</div>
<div style="margin-top: 2.5pt; line-height: 9pt;">&nbsp;&nbsp; &lt;add namespace="System.Text.RegularExpressions" /&gt;</div>
<div style="margin-top: 2.5pt; line-height: 9pt;">&nbsp;&nbsp; &lt;add namespace="System.Web" /&gt;</div>
<div style="margin-top: 2.5pt; line-height: 9pt;">&nbsp;&nbsp; &lt;add namespace="System.Web.Caching" /&gt;</div>
<div style="margin-top: 2.5pt; line-height: 9pt;">&nbsp;&nbsp; &lt;add namespace="System.Web.SessionState" /&gt;</div>
<div style="margin-top: 2.5pt; line-height: 9pt;">&nbsp;&nbsp; &lt;add namespace="System.Web.Security" /&gt;</div>
<div style="margin-top: 2.5pt; line-height: 9pt;">&nbsp;&nbsp; &lt;add namespace="System.Web.Profile" /&gt;</div>
<div style="margin-top: 2.5pt; line-height: 9pt;">&nbsp;&nbsp; &lt;add namespace="System.Web.UI" /&gt;</div>
<div style="margin-top: 2.5pt; line-height: 9pt;">&nbsp;&nbsp; &lt;add namespace="System.Web.UI.Imaging" /&gt;</div>
<div style="margin-top: 2.5pt; line-height: 9pt;">&nbsp;&nbsp; &lt;add namespace="System.Web.UI.WebControls" /&gt;</div>
<div style="margin-top: 2.5pt; line-height: 9pt;">&nbsp;&nbsp; &lt;add namespace="System.Web.UI.WebControls.WebParts" /&gt;</div>
<div style="margin-top: 2.5pt; line-height: 9pt;">&nbsp;&nbsp; &lt;add namespace="System.Web.UI.HtmlControls" /&gt;</div>
<div style="margin: 2.5pt 0cm 7.8pt; line-height: 9pt;">&lt;/namespaces&gt;</div>
<div style="text-indent: 21.1pt; line-height: 15pt;">从这个XML列表中可以看出，每个ASP.NET页面都导入了许多命名空间。可以在web.config.comments文件中自由修改这个列表，甚至可以在应用程序的web.config文件中包含类似的命名空间列表。</div>
<div style="text-indent: 21.1pt; line-height: 15pt;">把 命名空间导入到ASP.NET页面或用户控件，使用类时就不必完全限定类名。例如，在ASP.NET页面中导入System.Data.OleDB命名空 间，就可以使用单个类名来引用这个命名空间中的类(即使用OLEDBConnection，而不是 System.Data.OleDB.OLEDBConnection)。<br /><br /><span style="text-decoration: underline;"><span style="color: #3366ff;"><strong><a href="mailto:4.@Implements">4.@Implements</a></strong></span></span>
<div style="text-indent: 21.1pt;">@Implements指令允许ASP.NET页面实现特定的.NET Framework接口。这个指令只支持一个Interface属性。</div>
<div style="text-indent: 21.1pt; line-height: 17pt;">Interface属性直接指定了.NET Framework接口。ASP.NET页面或用户控件实现一个接口时，就可以直接访问其中的所有事件、方法和属性。</div>
<div style="text-indent: 21.1pt; line-height: 17pt;">下面是@Implements指令的一个例子：</div>
<div style="margin: 7.8pt 0cm;">
<p style="margin: 7.8pt 0cm;" class="2">&lt;%@ Implements Interface="System.Web.UI.IValidator" %&gt;<br /><br /><span style="text-decoration: underline;"><strong><span style="color: #3366ff;">&nbsp;5. @Register</span></strong></span></p>
</div>
</div>
<h3>&nbsp;</h3>
<p>@Register 指令把别名与命名空间和类名关联起来，作为定制服务器控件语法中的记号。把一个用户控件拖放到.aspx页面上时，就使用了@Register指令。把用 户控件拖放到.aspx页面上，Visual Studio 2005就会在页面的顶部创建一个@Register指令。这样就在页面上注册了用户控件，该控件就可以通过特定的名称在.aspx页面上访问了。</p>
<p>@Register指令支持5个属性，如表3-7所示。</p>
<p>表3-7</p>
<div align="center">
<table border="1" bordercolorlight="#666666" width="100%" cellpadding="0" bordercolordark="#ffffff" cellspacing="0">
<tbody>
<tr>
<td width="227" align="left" valign="top">
<p>属性</p>
</td>
<td width="726" align="left" valign="top">
<p>说明</p>
</td>
</tr>
<tr>
<td width="227" align="left" valign="top">
<p>Assembly</p>
</td>
<td width="726" align="left" valign="top">
<p>与TagPrefix关联的程序集</p>
</td>
</tr>
<tr>
<td width="227" align="left" valign="top">
<p>Namespace</p>
</td>
<td width="726" align="left" valign="top">
<p>与TagPrefix关联的命名空间</p>
</td>
</tr>
<tr>
<td width="227" align="left" valign="top">
<p>Src</p>
</td>
<td width="726" align="left" valign="top">
<p>用户控件的位置</p>
</td>
</tr>
<tr>
<td width="227" align="left" valign="top">
<p>TagName</p>
</td>
<td width="726" align="left" valign="top">
<p>与类名关联的别名</p>
</td>
</tr>
<tr>
<td width="227" align="left" valign="top">
<p>TagPrefix</p>
</td>
<td width="726" align="left" valign="top">
<p>与命名空间关联的别名</p>
</td>
</tr>
</tbody>
</table>
</div>
<p>下面是使用@Register指令把用户控件导入ASP.NET页面的一个例子：</p>
<p>&lt;%@ Register TagPrefix="MyTag" Namespace="MyName:MyNamespace" Assembly="MyAssembly" %&gt;</p>
</div>
</td>
</tr>
</tbody>
</table>
</p>
<p>
<table style="table-layout: fixed;">
<tbody>
<tr>
<td>
<div id="blog_text" class="cnt">
<p><a href="mailto:6.@Assembly"><span style="color: #3366ff;"><strong>6.@Assembly</strong></span></a></p>
<p>@Assembly指令在编译时把程序集(.NET应用程序的构建块)关联到ASP.NET页面或用户控件上，使该程序集中的所有类和接口都可用于页面。这个指令支持两个属性Name和Src。</p>
<p>●Name：允许指定用于关联页面文件的程序集名称。程序集名称应只包含文件名，不包含文件的扩展名。例如，如果文件是MyAssembly.vb，Name属性值应是MyAssembly。</p>
<p>●Src：允许指定编译时使用的程序集文件源。</p>
<p>下面是使用@Assembly指令的一些例子：</p>
<p>&lt;%@ Assembly Name="MyAssembly" %&gt;</p>
<p>&lt;%@ Assembly Src="MyAssembly.vb" %&gt;</p>
<p><a href="mailto:7.@PreviousPageType"><strong><span style="color: #3366ff;">7.@PreviousPageType</span></strong></a></p>
<p>这个指令用于指定跨页面的传送过程起始于哪个页面。在ASP.NET页面之间的跨页面传送过程详见后面的&ldquo;跨页面传送&rdquo;一节和第19章。</p>
<p>@PreviousPageType指令是一个新指令，用于处理ASP.NET 2.0提供的跨页面传送新功能。这个简单的指令只包含两个属性TypeName和VirtualPath：</p>
<p>●TypeName：设置回送时的派生类名。</p>
<p>●VirtualPath：设置回送时所传送页面的地址。</p>
<p><a href="mailto:8.@MasterType"><strong>8.@MasterType</strong></a></p>
<p>@MasterType指令把一个类名关联到ASP.NET页面上，以获得特定master页面中包含的强类型化引用或成员。这个指令支持两个属性：</p>
<p>●TypeName：设置从中获得强类型化的引用或成员的派生类名。</p>
<p>●VirtualPath：设置从中检索这些强类型化的引用或成员的页面地址。</p>
<p>使用@MasterType指令的细节请参阅第8章。下面是它的一个例子：</p>
<p>&lt;%@ MasterType VirtualPath="~/Wrox.master" %&gt;</p>
<p><a href="mailto:9.@OutputCache"><strong>9.@OutputCache</strong></a></p>
<p>@OutputCache指令控制ASP.NET页面或用户控件的输出高速缓存策略。这个指令支持10个属性，如表3-8所示。</p>
<p>表3-8</p>
<div align="center">
<table border="1" bordercolorlight="#666666" width="97%" cellpadding="0" bordercolordark="#ffffff" cellspacing="0">
<tbody>
<tr>
<td width="119" align="left" valign="top">
<p>属性</p>
</td>
<td width="474" align="left" valign="top">
<p>说明</p>
</td>
</tr>
<tr>
<td width="119" align="left" valign="top">
<p>CacheProfile</p>
</td>
<td width="474" align="left" valign="top">
<p>允许使用集中式方法管理应用程序的高速缓存配置。使用CacheProfile属性可指定在web.config文件中详细说明的高速缓存配置名</p>
</td>
</tr>
<tr>
<td width="119" align="left" valign="top">
<p>DiskCacheable</p>
</td>
<td width="474" align="left" valign="top">
<p>指定高速缓存是否能存储在磁盘上</p>
</td>
</tr>
<tr>
<td width="119" align="left" valign="top">
<p>Duration</p>
</td>
<td width="474" align="left" valign="top">
<p>ASP.NET 页面或用户控件高速缓存的持续时间，单位是秒</p>
</td>
</tr>
<tr>
<td width="119" align="left" valign="top">
<p>Location</p>
</td>
<td width="474" align="left" valign="top">
<p>位置枚举值，默认为Any。它只对.aspx页面有效，不能用于用户控件(.ascx)。其他值有Client、Downstream、None、Server和ServerAndClient</p>
</td>
</tr>
<tr>
<td width="119" align="left" valign="top">
<p>NoStore</p>
</td>
<td width="474" align="left" valign="top">
<p>指定是否随页面发送没有存储的标题</p>
</td>
</tr>
<tr>
<td width="119" align="left" valign="top">
<p>SqlDependency</p>
</td>
<td width="474" align="left" valign="top">
<p>支持页面使用SQL Server高速缓存失效功能，这是ASP.NET 2.0的一个新功能</p>
</td>
</tr>
<tr>
<td width="119" align="left" valign="top">
<p>VaryByControl</p>
</td>
<td width="474" align="left" valign="top">
<p>用分号分隔开的字符串列表，用于改变用户控件的输出高速缓存</p>
</td>
</tr>
<tr>
<td width="119" align="left" valign="top">
<p>VaryByCustom</p>
</td>
<td width="474" align="left" valign="top">
<p>一个字符串，指定定制的输出高速缓存需求</p>
</td>
</tr>
<tr>
<td width="119" align="left" valign="top">
<p>VaryByHeader</p>
</td>
<td width="474" align="left" valign="top">
<p>用分号分隔开的HTTP标题列表，用于改变输出高速缓存</p>
</td>
</tr>
<tr>
<td width="119" align="left" valign="top">
<p>VaryByParam</p>
</td>
<td width="474" align="left" valign="top">
<p>用分号分隔开的字符串列表，用于改变输出高速缓存</p>
</td>
</tr>
</tbody>
</table>
</div>
<p>下面是使用@OutputCache指令的一个例子：</p>
<p>&lt;%@ OutputCache Duration="180" VaryByParam="None" %&gt;</p>
<p>Duration属性指定这个页面存储在系统高速缓存中的时间(秒)。</p>
<p><a href="mailto:10.@Reference"><strong>10.@Reference</strong></a></p>
<p>@Reference指令声明，另一个ASP.NET页面或用户控件应与当前活动的页面或控件一起编译。这个指令支持两个属性：</p>
<p>●TypeName：设置从中引用活动页面的派生类名。</p>
<p>●VirtualPath：设置从中引用活动页面的页面或用户控件地址。</p>
<p>下面是使用@Reference指令的一个例子：</p>
<p>&lt;%@ Reference VirtualPath="~/MyControl.ascx" %&gt;<br /></p>
<a href="mailto:11.@Master"><strong>11.@Master</strong></a>
<h3>&nbsp;</h3>
<p>@Master 指令非常类似于@Page指令，但@Master指令用于master页面(.master)。在使用@Master指令时，要指定和站点上的内容页面一 起使用的模板页面的属性。内容页面(使用@Page指令建立)可以继承master页面上的所有master内容(在master页面上使用 @Master指令定义的内容)。尽管这两个指令是类似的，但@Master指令的属性比@Page指令少。@Master指令的可用属性如表3-5所 示。</p>
<p>表&nbsp; 3-5</p>
<div align="center">
<table border="1" bordercolorlight="#666666" width="97%" cellpadding="0" bordercolordark="#ffffff" cellspacing="0">
<tbody>
<tr>
<td width="19%" valign="top">
<p>属&nbsp;&nbsp;&nbsp; 性</p>
</td>
<td width="80%" valign="top">
<p>说&nbsp;&nbsp;&nbsp; 明</p>
</td>
</tr>
<tr>
<td width="19%" valign="top">
<p>AutoEventWireUp</p>
</td>
<td width="80%" valign="top">
<p>设置为True时，指定master页面的事件是否自动触发。默认设置为True</p>
</td>
</tr>
<tr>
<td width="19%" valign="top">
<p>ClassName</p>
</td>
<td width="80%" valign="top">
<p>指定编译页面时绑定到master页面上的类名</p>
</td>
</tr>
<tr>
<td width="19%" valign="top">
<p>CodeFile</p>
</td>
<td width="80%" valign="top">
<p>引用与页面相关的后台编码文件</p>
</td>
</tr>
</tbody>
</table>
</div>
<p align="right">(续表)&nbsp;&nbsp; </p>
<div align="center">
<table border="1" bordercolorlight="#666666" width="97%" cellpadding="0" bordercolordark="#ffffff" cellspacing="0">
<tbody>
<tr>
<td width="19%" valign="top">
<p>属&nbsp;&nbsp;&nbsp; 性</p>
</td>
<td width="80%" valign="top">
<p>说&nbsp;&nbsp;&nbsp; 明</p>
</td>
</tr>
<tr>
<td width="19%" valign="top">
<p>CompilerOptions</p>
</td>
<td width="80%" valign="top">
<p>编译字符串，表示master页面的编译选项</p>
</td>
</tr>
<tr>
<td width="19%" valign="top">
<p>CompileWith</p>
</td>
<td width="80%" valign="top">
<p>带一个String值，指向用于master页面的后台编码文件</p>
</td>
</tr>
<tr>
<td width="19%" valign="top">
<p>Debug</p>
</td>
<td width="80%" valign="top">
<p>设置为True时，用调试符号编译master页面</p>
</td>
</tr>
<tr>
<td width="19%" valign="top">
<p>Description</p>
</td>
<td width="80%" valign="top">
<p>提供master页面的文本描述。ASP.NET 解析器会忽略这个属性及其值</p>
</td>
</tr>
<tr>
<td width="19%" valign="top">
<p>EnableTheming</p>
</td>
<td width="80%" valign="top">
<p>设置为True时，表示master页面可以使用主题功能。其默认设置是False</p>
</td>
</tr>
<tr>
<td width="19%" valign="top">
<p>EnableViewState</p>
</td>
<td width="80%" valign="top">
<p>设置为True时，维护master页面的视图状态。其默认设置是True</p>
</td>
</tr>
<tr>
<td width="19%" valign="top">
<p>Explicit</p>
</td>
<td width="80%" valign="top">
<p>设置为True时，表示激活Visual Basic Explicit 选项。其默认设置是False</p>
</td>
</tr>
<tr>
<td width="19%" valign="top">
<p>Inherits</p>
</td>
<td width="80%" valign="top">
<p>指定master页面要继承的CodeBehind类</p>
</td>
</tr>
<tr>
<td width="19%" valign="top">
<p>Language</p>
</td>
<td width="80%" valign="top">
<p>定义内置显示和脚本块使用的语言</p>
</td>
</tr>
<tr>
<td width="19%" valign="top">
<p>LinePragmas</p>
</td>
<td width="80%" valign="top">
<p>Boolean值，指定得到的程序集是否使用行附注</p>
</td>
</tr>
<tr>
<td width="19%" valign="top">
<p>MasterPageFile</p>
</td>
<td width="80%" valign="top">
<p>带一个String值，指向master 页面所使用的master页面的地址。master页面可以使用另一个master页面，创建嵌套的master页面</p>
</td>
</tr>
<tr>
<td width="19%" valign="top">
<p>Src</p>
</td>
<td width="80%" valign="top">
<p>指向类的源文件，用于要显示的master页面的后台编码</p>
</td>
</tr>
<tr>
<td width="19%" valign="top">
<p>Strict</p>
</td>
<td width="80%" valign="top">
<p>设置为True时，使用Visual Basic Strict模式编译master页面。其默认设置是False</p>
</td>
</tr>
<tr>
<td width="19%" valign="top">
<p>WarningLevel</p>
</td>
<td width="80%" valign="top">
<p>指定停止编译页面时的编译警告级别，其值可以是0到4</p>
</td>
</tr>
</tbody>
</table>
</div>
<p>下面是使用@Master指令的一个例子：</p>
<p>&lt;%@ Master Language="VB" CodeFile="MasterPage1.master.vb" AutoEventWireup="false" Inherits="MasterPage" %&gt;</p>
</div>
</td>
</tr>
</tbody>
</table>
</p>
</div><img src ="http://www.cnblogs.com/tuyile006/aggbug/1421400.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47970/" target="_blank">19岁天才黑客发布首个iPhone 3GS破解软件</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>HTML Response ContentType 大全</title><link>http://www.cnblogs.com/tuyile006/archive/2009/03/05/1403857.html</link><dc:creator>小y</dc:creator><author>小y</author><pubDate>Thu, 05 Mar 2009 06:21:00 GMT</pubDate><guid>http://www.cnblogs.com/tuyile006/archive/2009/03/05/1403857.html</guid><wfw:comment>http://www.cnblogs.com/tuyile006/comments/1403857.html</wfw:comment><comments>http://www.cnblogs.com/tuyile006/archive/2009/03/05/1403857.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/tuyile006/comments/commentRss/1403857.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/tuyile006/services/trackbacks/1403857.html</trackback:ping><description><![CDATA[<div class="cnblogs_code"><span style="color: #000000;">".*"="application/octet-stream"<br />".001"="application/x-001"<br />".301"="application/x-301"<br />".323"="text/h323"<br />".906"="application/x-906"<br />".907"="drawing/907"<br />".a11"="application/x-a11"<br />".acp"="audio/x-mei-aac"<br />".ai"="application/postscript"<br />".aif"="audio/aiff"<br />".aifc"="audio/aiff"<br />".aiff"="audio/aiff"<br />".anv"="application/x-anv"<br />".asa"="text/asa"<br />".asf"="video/x-ms-asf"<br />".asp"="text/asp"<br />".asx"="video/x-ms-asf"<br />".au"="audio/basic"<br />".avi"="video/avi"<br />".awf"="application/vnd.adobe.workflow"<br />".biz"="text/xml"<br />".bmp"="application/x-bmp"<br />".bot"="application/x-bot"<br />".c4t"="application/x-c4t"<br />".c90"="application/x-c90"<br />".cal"="application/x-cals"<br />".cat"="application/vnd.ms-pki.seccat"<br />".cdf"="application/x-netcdf"<br />".cdr"="application/x-cdr"<br />".cel"="application/x-cel"<br />".cer"="application/x-x509-ca-cert"<br />".cg4"="application/x-g4"<br />".cgm"="application/x-cgm"<br />".cit"="application/x-cit"<br />".class"="java/*"<br />".cml"="text/xml"<br />".cmp"="application/x-cmp"<br />".cmx"="application/x-cmx"<br />".cot"="application/x-cot"<br />".crl"="application/pkix-crl"<br />".crt"="application/x-x509-ca-cert"<br />".csi"="application/x-csi"<br />".css"="text/css"<br />".cut"="application/x-cut"<br />".dbf"="application/x-dbf"<br />".dbm"="application/x-dbm"<br />".dbx"="application/x-dbx"<br />".dcd"="text/xml"<br />".dcx"="application/x-dcx"<br />".der"="application/x-x509-ca-cert"<br />".dgn"="application/x-dgn"<br />".dib"="application/x-dib"<br />".dll"="application/x-msdownload"<br />".doc"="application/msword"<br />".dot"="application/msword"<br />".drw"="application/x-drw"<br />".dtd"="text/xml"<br />".dwf"="Model/vnd.dwf"<br />".dwf"="application/x-dwf"<br />".dwg"="application/x-dwg"<br />".dxb"="application/x-dxb"<br />".dxf"="application/x-dxf"<br />".edn"="application/vnd.adobe.edn"<br />".emf"="application/x-emf"<br />".eml"="message/rfc822"<br />".ent"="text/xml"<br />".epi"="application/x-epi"<br />".eps"="application/x-ps"<br />".eps"="application/postscript"<br />".etd"="application/x-ebx"<br />".exe"="application/x-msdownload"<br />".fax"="image/fax"<br />".fdf"="application/vnd.fdf"<br />".fif"="application/fractals"<br />".fo"="text/xml"<br />".frm"="application/x-frm"<br />".g4"="application/x-g4"<br />".gbr"="application/x-gbr"<br />".gcd"="application/x-gcd"<br />".gif"="image/gif"<br />".gl2"="application/x-gl2"<br />".gp4"="application/x-gp4"<br />".hgl"="application/x-hgl"<br />".hmr"="application/x-hmr"<br />".hpg"="application/x-hpgl"<br />".hpl"="application/x-hpl"<br />".hqx"="application/mac-binhex40"<br />".hrf"="application/x-hrf"<br />".hta"="application/hta"<br />".htc"="text/x-component"<br />".htm"="text/html"<br />".html"="text/html"<br />".htt"="text/webviewhtml"<br />".htx"="text/html"<br />".icb"="application/x-icb"<br />".ico"="image/x-icon"<br />".ico"="application/x-ico"<br />".iff"="application/x-iff"<br />".ig4"="application/x-g4"<br />".igs"="application/x-igs"<br />".iii"="application/x-iphone"<br />".img"="application/x-img"<br />".ins"="application/x-internet-signup"<br />".isp"="application/x-internet-signup"<br />".IVF"="video/x-ivf"<br />".java"="java/*"<br />".jfif"="image/jpeg"<br />".jpe"="image/jpeg"<br />".jpe"="application/x-jpe"<br />".jpeg"="image/jpeg"<br />".jpg"="image/jpeg"<br />".jpg"="application/x-jpg"<br />".js"="application/x-javascript"<br />".jsp"="text/html"<br />".la1"="audio/x-liquid-file"<br />".lar"="application/x-laplayer-reg"<br />".latex"="application/x-latex"<br />".lavs"="audio/x-liquid-secure"<br />".lbm"="application/x-lbm"<br />".lmsff"="audio/x-la-lms"<br />".ls"="application/x-javascript"<br />".ltr"="application/x-ltr"<br />".m1v"="video/x-mpeg"<br />".m2v"="video/x-mpeg"<br />".m3u"="audio/mpegurl"<br />".m4e"="video/mpeg4"<br />".mac"="application/x-mac"<br />".man"="application/x-troff-man"<br />".math"="text/xml"<br />".mdb"="application/msaccess"<br />".mdb"="application/x-mdb"<br />".mfp"="application/x-shockwave-flash"<br />".mht"="message/rfc822"<br />".mhtml"="message/rfc822"<br />".mi"="application/x-mi"<br />".mid"="audio/mid"<br />".midi"="audio/mid"<br />".mil"="application/x-mil"<br />".mml"="text/xml"<br />".mnd"="audio/x-musicnet-download"<br />".mns"="audio/x-musicnet-stream"<br />".mocha"="application/x-javascript"<br />".movie"="video/x-sgi-movie"<br />".mp1"="audio/mp1"<br />".mp2"="audio/mp2"<br />".mp2v"="video/mpeg"<br />".mp3"="audio/mp3"<br />".mp4"="video/mpeg4"<br />".mpa"="video/x-mpg"<br />".mpd"="application/vnd.ms-project"<br />".mpe"="video/x-mpeg"<br />".mpeg"="video/mpg"<br />".mpg"="video/mpg"<br />".mpga"="audio/rn-mpeg"<br />".mpp"="application/vnd.ms-project"<br />".mps"="video/x-mpeg"<br />".mpt"="application/vnd.ms-project"<br />".mpv"="video/mpg"<br />".mpv2"="video/mpeg"<br />".mpw"="application/vnd.ms-project"<br />".mpx"="application/vnd.ms-project"<br />".mtx"="text/xml"<br />".mxp"="application/x-mmxp"<br />".net"="image/pnetvue"<br />".nrf"="application/x-nrf"<br />".nws"="message/rfc822"<br />".odc"="text/x-ms-odc"<br />".out"="application/x-out"<br />".p10"="application/pkcs10"<br />".p12"="application/x-pkcs12"<br />".p7b"="application/x-pkcs7-certificates"<br />".p7c"="application/pkcs7-mime"<br />".p7m"="application/pkcs7-mime"<br />".p7r"="application/x-pkcs7-certreqresp"<br />".p7s"="application/pkcs7-signature"<br />".pc5"="application/x-pc5"<br />".pci"="application/x-pci"<br />".pcl"="application/x-pcl"<br />".pcx"="application/x-pcx"<br />".pdf"="application/pdf"<br />".pdf"="application/pdf"<br />".pdx"="application/vnd.adobe.pdx"<br />".pfx"="application/x-pkcs12"<br />".pgl"="application/x-pgl"<br />".pic"="application/x-pic"<br />".pko"="application/vnd.ms-pki.pko"<br />".pl"="application/x-perl"<br />".plg"="text/html"<br />".pls"="audio/scpls"<br />".plt"="application/x-plt"<br />".png"="image/png"<br />".png"="application/x-png"<br />".pot"="application/vnd.ms-powerpoint"<br />".ppa"="application/vnd.ms-powerpoint"<br />".ppm"="application/x-ppm"<br />".pps"="application/vnd.ms-powerpoint"<br />".ppt"="application/vnd.ms-powerpoint"<br />".ppt"="application/x-ppt"<br />".pr"="application/x-pr"<br />".prf"="application/pics-rules"<br />".prn"="application/x-prn"<br />".prt"="application/x-prt"<br />".ps"="application/x-ps"<br />".ps"="application/postscript"<br />".ptn"="application/x-ptn"<br />".pwz"="application/vnd.ms-powerpoint"<br />".r3t"="text/vnd.rn-realtext3d"<br />".ra"="audio/vnd.rn-realaudio"<br />".ram"="audio/x-pn-realaudio"<br />".ras"="application/x-ras"<br />".rat"="application/rat-file"<br />".rdf"="text/xml"<br />".rec"="application/vnd.rn-recording"<br />".red"="application/x-red"<br />".rgb"="application/x-rgb"<br />".rjs"="application/vnd.rn-realsystem-rjs"<br />".rjt"="application/vnd.rn-realsystem-rjt"<br />".rlc"="application/x-rlc"<br />".rle"="application/x-rle"<br />".rm"="application/vnd.rn-realmedia"<br />".rmf"="application/vnd.adobe.rmf"<br />".rmi"="audio/mid"<br />".rmj"="application/vnd.rn-realsystem-rmj"<br />".rmm"="audio/x-pn-realaudio"<br />".rmp"="application/vnd.rn-rn_music_package"<br />".rms"="application/vnd.rn-realmedia-secure"<br />".rmvb"="application/vnd.rn-realmedia-vbr"<br />".rmx"="application/vnd.rn-realsystem-rmx"<br />".rnx"="application/vnd.rn-realplayer"<br />".rp"="image/vnd.rn-realpix"<br />".rpm"="audio/x-pn-realaudio-plugin"<br />".rsml"="application/vnd.rn-rsml"<br />".rt"="text/vnd.rn-realtext"<br />".rtf"="application/msword"<br />".rtf"="application/x-rtf"<br />".rv"="video/vnd.rn-realvideo"<br />".sam"="application/x-sam"<br />".sat"="application/x-sat"<br />".sdp"="application/sdp"<br />".sdw"="application/x-sdw"<br />".sit"="application/x-stuffit"<br />".slb"="application/x-slb"<br />".sld"="application/x-sld"<br />".slk"="drawing/x-slk"<br />".smi"="application/smil"<br />".smil"="application/smil"<br />".smk"="application/x-smk"<br />".snd"="audio/basic"<br />".sol"="text/plain"<br />".sor"="text/plain"<br />".spc"="application/x-pkcs7-certificates"<br />".spl"="application/futuresplash"<br />".spp"="text/xml"<br />".ssm"="application/streamingmedia"<br />".sst"="application/vnd.ms-pki.certstore"<br />".stl"="application/vnd.ms-pki.stl"<br />".stm"="text/html"<br />".sty"="application/x-sty"<br />".svg"="text/xml"<br />".swf"="application/x-shockwave-flash"<br />".tdf"="application/x-tdf"<br />".tg4"="application/x-tg4"<br />".tga"="application/x-tga"<br />".tif"="image/tiff"<br />".tif"="application/x-tif"<br />".tiff"="image/tiff"<br />".tld"="text/xml"<br />".top"="drawing/x-top"<br />".torrent"="application/x-bittorrent"<br />".tsd"="text/xml"<br />".txt"="text/plain"<br />".uin"="application/x-icq"<br />".uls"="text/iuls"<br />".vcf"="text/x-vcard"<br />".vda"="application/x-vda"<br />".vdx"="application/vnd.visio"<br />".vml"="text/xml"<br />".vpg"="application/x-vpeg005"<br />".vsd"="application/vnd.visio"<br />".vsd"="application/x-vsd"<br />".vss"="application/vnd.visio"<br />".vst"="application/vnd.visio"<br />".vst"="application/x-vst"<br />".vsw"="application/vnd.visio"<br />".vsx"="application/vnd.visio"<br />".vtx"="application/vnd.visio"<br />".vxml"="text/xml"<br />".wav"="audio/wav"<br />".wax"="audio/x-ms-wax"<br />".wb1"="application/x-wb1"<br />".wb2"="application/x-wb2"<br />".wb3"="application/x-wb3"<br />".wbmp"="image/vnd.wap.wbmp"<br />".wiz"="application/msword"<br />".wk3"="application/x-wk3"<br />".wk4"="application/x-wk4"<br />".wkq"="application/x-wkq"<br />".wks"="application/x-wks"<br />".wm"="video/x-ms-wm"<br />".wma"="audio/x-ms-wma"<br />".wmd"="application/x-ms-wmd"<br />".wmf"="application/x-wmf"<br />".wml"="text/vnd.wap.wml"<br />".wmv"="video/x-ms-wmv"<br />".wmx"="video/x-ms-wmx"<br />".wmz"="application/x-ms-wmz"<br />".wp6"="application/x-wp6"<br />".wpd"="application/x-wpd"<br />".wpg"="application/x-wpg"<br />".wpl"="application/vnd.ms-wpl"<br />".wq1"="application/x-wq1"<br />".wr1"="application/x-wr1"<br />".wri"="application/x-wri"<br />".wrk"="application/x-wrk"<br />".ws"="application/x-ws"<br />".ws2"="application/x-ws"<br />".wsc"="text/scriptlet"<br />".wsdl"="text/xml"<br />".wvx"="video/x-ms-wvx"<br />".xdp"="application/vnd.adobe.xdp"<br />".xdr"="text/xml"<br />".xfd"="application/vnd.adobe.xfd"<br />".xfdf"="application/vnd.adobe.xfdf"<br />".xhtml"="text/html"<br />".xls"="application/vnd.ms-excel"<br />".xls"="application/x-xls"<br />".xlw"="application/x-xlw"<br />".xml"="text/xml"<br />".xpl"="audio/scpls"<br />".xq"="text/xml"<br />".xql"="text/xml"<br />".xquery"="text/xml"<br />".xsd"="text/xml"<br />".xsl"="text/xml"<br />".xslt"="text/xml"<br />".xwd"="application/x-xwd"<br />".x_b"="application/x-x_b"<br />".x_t"="application/x-x_t"&nbsp;</span></div>
<div></div><img src ="http://www.cnblogs.com/tuyile006/aggbug/1403857.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47969/" target="_blank">新浪邮箱大本营粉墨登场！Sina.cn开放注册</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>批处理语法</title><link>http://www.cnblogs.com/tuyile006/archive/2009/02/27/1399774.html</link><dc:creator>小y</dc:creator><author>小y</author><pubDate>Fri, 27 Feb 2009 09:42:00 GMT</pubDate><guid>http://www.cnblogs.com/tuyile006/archive/2009/02/27/1399774.html</guid><wfw:comment>http://www.cnblogs.com/tuyile006/comments/1399774.html</wfw:comment><comments>http://www.cnblogs.com/tuyile006/archive/2009/02/27/1399774.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/tuyile006/comments/commentRss/1399774.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/tuyile006/services/trackbacks/1399774.html</trackback:ping><description><![CDATA[摘要: 这是一篇技术教程，真心诚意会用很简单的文字表达清楚自己的意思，只要你识字就能看懂，就能学到知识。写这篇教程的目的，是让每一个看过这些文字的朋友记住一句话：如果爱可以让事情变的更简单，那么就让它简单吧！看这篇教程的方法，就是慢！慢慢的，如同品一个女人、一杯茗茶，你会发现很多以前就在眼前的东西突然变的很遥远，而有些很遥远的东西却又突然回到了眼前。.先概述一下批处理是个什么东东。批处理的定义，至今我也没&nbsp;&nbsp;<a href='http://www.cnblogs.com/tuyile006/archive/2009/02/27/1399774.html'>阅读全文</a><img src ="http://www.cnblogs.com/tuyile006/aggbug/1399774.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47968/" target="_blank">IE市场份额首次跌破60%</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>c# ftp类[转]</title><link>http://www.cnblogs.com/tuyile006/archive/2009/02/23/1396524.html</link><dc:creator>小y</dc:creator><author>小y</author><pubDate>Mon, 23 Feb 2009 07:28:00 GMT</pubDate><guid>http://www.cnblogs.com/tuyile006/archive/2009/02/23/1396524.html</guid><wfw:comment>http://www.cnblogs.com/tuyile006/comments/1396524.html</wfw:comment><comments>http://www.cnblogs.com/tuyile006/archive/2009/02/23/1396524.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/tuyile006/comments/commentRss/1396524.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/tuyile006/services/trackbacks/1396524.html</trackback:ping><description><![CDATA[摘要: usingSystem;usingSystem.Net;usingSystem.IO;usingSystem.Text;usingSystem.Net.Sockets;///&lt;summary&gt;///FTPClient的摘要说明。///&lt;/summary&gt;publicclassFTPClient{#region构造函数///&lt;summary&gt;///缺省构造函数//&nbsp;&nbsp;<a href='http://www.cnblogs.com/tuyile006/archive/2009/02/23/1396524.html'>阅读全文</a><img src ="http://www.cnblogs.com/tuyile006/aggbug/1396524.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47965/" target="_blank">Google App Engine宕机6小时——云的安全在哪里？</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>mysql优化： 内存表和临时表</title><link>http://www.cnblogs.com/tuyile006/archive/2009/02/06/1385121.html</link><dc:creator>小y</dc:creator><author>小y</author><pubDate>Fri, 06 Feb 2009 02:32:00 GMT</pubDate><guid>http://www.cnblogs.com/tuyile006/archive/2009/02/06/1385121.html</guid><wfw:comment>http://www.cnblogs.com/tuyile006/comments/1385121.html</wfw:comment><comments>http://www.cnblogs.com/tuyile006/archive/2009/02/06/1385121.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/tuyile006/comments/commentRss/1385121.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/tuyile006/services/trackbacks/1385121.html</trackback:ping><description><![CDATA[<p>由于直接使用临时表来创建中间表，其速度不如人意，因而就有了把临时表建成内存表的想法。但内存表和临时表的区别且并不熟悉，需要查找资料了。<br />一开始以为临时表是创建后存在，当连接断开时临时表就会被删除，即临时表是存在于磁盘上的。而实际操作中发现临时表创建后去目录下查看发现并没有发现对应的临时表文件（未断开链接）.因而猜测临时表的数据和结构都是存放在内存中，而不是在磁盘中.<br />&nbsp;&nbsp;&nbsp; 这样一想内存表不是也是存在在内存中吗，那么他和临时表有什么区别？他们的速度是什么样子？<br /><br />&nbsp;&nbsp;&nbsp; 查找了官方手册有以下的一些解释：<br />The MEMORY storage engine creates tables with contents that are stored in memory. Formerly, these were known as HEAP tables. MEMORY is the preferred term, although HEAP remains supported for backward compatibility.<br /><br />Each MEMORY table is associated with one disk file. The filename begins with the table name and has an extension of .frm to indicate that it stores the table definition. <br /><br />由此可以看出来<strong>内存表会把表结构存放在磁盘上</strong><span style="color: #ff0000;"><strong>，把数据放在内存中</strong></span>。<br />并做了以下实验：<br />临时表<br />mysql&gt; create temporary table tmp1(id int not null);<br />Query OK, 0 rows affected (0.00 sec)<br /><br />mysql&gt; show create table tmp1;<br />+-------+----------------------------------------------------------------------------------------------+<br />| Table | Create Table &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; |<br />+-------+----------------------------------------------------------------------------------------------+<br />| tmp1&nbsp;&nbsp; | CREATE TEMPORARY TABLE `tmp1` ( `id` int(11) NOT NULL) ENGINE=MyISAM DEFAULT CHARSET=utf8&nbsp;&nbsp;&nbsp; |<br />+-------+----------------------------------------------------------------------------------------------+<br />1 row in set (0.00 sec)<br /><br />内存表<br />mysql&gt; create table tmp2(id int not null) TYPE＝HEAP;<br />Query OK, 0 rows affected (0.00 sec)<br /><br />mysql&gt; show create table tmp2;<br />+-------+------------------------------------------------------------------------------------+<br />| Table | Create Table &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; |<br />+-------+------------------------------------------------------------------------------------+<br />| tmp2&nbsp;&nbsp; | CREATE TABLE `tmp2` (<br />&nbsp;&nbsp; `id` int(11) NOT NULL<br />) ENGINE=MEMORY DEFAULT CHARSET=utf8 |<br />+-------+------------------------------------------------------------------------------------+<br />1 row in set (0.00 sec)<br /><br />可以看出来<strong>临时表和内存表的ENGINE 不同，临时表默认的是MyISAM,而内存表是MEMORY </strong>.去数据库目录查看，发现tmp2.frm而没有tmp1表的任何文件。看来实际情况是符合官方解释的。<br /><br /><br />那么速度方面呢（即MyISAM和MEMORY之间的区别）？<br />实验开始：<br />实现手段：对基于2张千万级别的表做一些OLAP切分操作，中间表的建立使用2种不同的方式。最后把中间表的数据按照要求取出，插入到结果表中<br />实验目的;测试临时内存表和临时表的速度<br />1.中间表的建立使用Create temporary table type = heap 即 把中间表建立成临时内存表 <br />2.中间表直接使用Create temporary table建立 <br /><br />实验结果：<br />临时内存表： 1小时<br />1 2008-09-25 11:03:48<br />1 2008-09-25 12:03:39<br />临时表：1小时17分钟<br />2 2008-09-25 12:25:28<br />2 2008-09-25 13:42:37<br /><br />由此发现MEMORY比MyISAM快大概20％。<br /><br /><br />接着查找官方手册：<br />As indicated by the name, MEMORY tables are stored in memory. They use hash indexes by default, which makes them very fast, and very useful for creating temporary tables. However, when the server shuts down, all rows stored in MEMORY tables are lost. The tables themselves continue to exist because their definitions are stored in .frm files on disk, but they are empty when the server restarts.<br /><br /><br />可以看出来MEMORY确实是<strong>very fast，and very useful for creating temporary tables</strong> .<strong>把临时表和内存表放在一起使用确实会快不少</strong>：create table tmp2(id int not null) engine memory;<br /><br />内存表的建立还有一些限制条件：<br />MEMORY tables cannot contain &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; BLOB or TEXT columns. HEAP不支持BLOB/TEXT列。 &nbsp;&nbsp; <br />The server needs sufficient memory to maintain all&nbsp;&nbsp; MEMORY tables that are in use at the same time. 在同一时间需要足够的内存.<br />To free memory used by a MEMORY table when&nbsp;&nbsp; you no longer require its contents, you should execute DELETE or TRUNCATE TABLE, or remove the table altogether using DROP &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; TABLE.为了释放内存，你应该执行DELETE FROM heap_table或DROP TABLE heap_table。</p><img src ="http://www.cnblogs.com/tuyile006/aggbug/1385121.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47961/" target="_blank">微软新推社交网站Windows Live Planet</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>看《恶魔法则》想到的</title><link>http://www.cnblogs.com/tuyile006/archive/2009/02/05/1384735.html</link><dc:creator>小y</dc:creator><author>小y</author><pubDate>Thu, 05 Feb 2009 08:52:00 GMT</pubDate><guid>http://www.cnblogs.com/tuyile006/archive/2009/02/05/1384735.html</guid><wfw:comment>http://www.cnblogs.com/tuyile006/comments/1384735.html</wfw:comment><comments>http://www.cnblogs.com/tuyile006/archive/2009/02/05/1384735.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnblogs.com/tuyile006/comments/commentRss/1384735.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/tuyile006/services/trackbacks/1384735.html</trackback:ping><description><![CDATA[<p><br />时下网络小说泛滥，玄幻类更是五花八门千奇百怪，自从同类小说《诛仙》改编成网游之后，这类小说仿佛找到了目标更是铺天盖地如洪水泛滥。</p>
<p>最近闲暇时间看着一部名为《恶魔法则》的小说，作者把一个中国现代的人物丢到西方古代，而且是一个拥有魔法师的西方世界，其中，</p>
<p>魔法师的终极境界是领域，在自己的领域内一切规则由自己说了算：火可以结冰，时间可以倒转。</p>
<p>这就是所谓的法则，从唯物主义观点来看，也不无道理，最大的力量源自自然法则，如太阳东升西落，人生老病死就是自然法则，能够看到并利用这些法则</p>
<p>亦非凡人，如果能够更改创造法则，那还真的可以天下无敌了。</p>
<p>&nbsp;</p>
<p>其实我们程序员在做设计的时候，也常常制定一些规则，约定，或者协议。正与此类似。如tcp/http协议，UDP协议，等等，不可否认谁制造了这些规则，谁就改变了世界。即便只是熟练掌握了这些规则，加以利用，也可以幻化出无限应用来。这些还是大的规则，小规则在我们开发设计过程中经常使用，如约定0代表失败，1代表成功，约定某两个表的名称如何关联等等不一而足，这些规则往往可以带来程序的便捷，让复杂的实现变得简单。但如果能不用规则尽量不用规则，毕竟人为加入规则需要所有人都知道，如果某人带着这些规则离开公司，必定带来很多麻烦。</p>
<p>&nbsp;</p><img src ="http://www.cnblogs.com/tuyile006/aggbug/1384735.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47960/" target="_blank">火狐3.5版被指推出太匆忙：存在50多个漏洞</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>手工卸载.Net写的win服务</title><link>http://www.cnblogs.com/tuyile006/archive/2009/02/02/1382360.html</link><dc:creator>小y</dc:creator><author>小y</author><pubDate>Mon, 02 Feb 2009 03:27:00 GMT</pubDate><guid>http://www.cnblogs.com/tuyile006/archive/2009/02/02/1382360.html</guid><wfw:comment>http://www.cnblogs.com/tuyile006/comments/1382360.html</wfw:comment><comments>http://www.cnblogs.com/tuyile006/archive/2009/02/02/1382360.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/tuyile006/comments/commentRss/1382360.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/tuyile006/services/trackbacks/1382360.html</trackback:ping><description><![CDATA[<p>用.Net写的win服务，经常使用的时候更新了版本，旧的服务就删不掉了，用installutil都无法删掉。</p>
<p>遇到这种情况如何清理这些服务呢？</p>
<p>这就要用的一个系统工具，sc.exe，只有31k，默认在C:\WINDOWS\system32目录下。</p>
<p>在命令行：</p>
<p>C:\WINDOWS\system32&gt;sc delete yourServiceName</p>
<p><img src="http://pic002.cnblogs.com/img/tuyile006/200902/2009020211173648.jpg" /></p>
<p>注意参数是要填写&ldquo;服务名称&rdquo;中的名字，而不是&ldquo;显示名称&rdquo;中的名字，如果服务名有空格，要用引号括起来：</p>
<p>C:\WINDOWS\system32&gt;sc delete RDWinServiceV5.cc</p>
<p>如此即可卸载无用的win服务。</p>
<p>这个工具还可以开启服务</p>
<p>sc start yourServiceName</p>
<p>类似于net start serviceName</p>
<p>&nbsp;</p><img src ="http://www.cnblogs.com/tuyile006/aggbug/1382360.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47959/" target="_blank">Google对手机搜索进行优化升级</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>MySql中捕获异常的方法</title><link>http://www.cnblogs.com/tuyile006/archive/2009/01/19/1378172.html</link><dc:creator>小y</dc:creator><author>小y</author><pubDate>Mon, 19 Jan 2009 03:31:00 GMT</pubDate><guid>http://www.cnblogs.com/tuyile006/archive/2009/01/19/1378172.html</guid><wfw:comment>http://www.cnblogs.com/tuyile006/comments/1378172.html</wfw:comment><comments>http://www.cnblogs.com/tuyile006/archive/2009/01/19/1378172.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/tuyile006/comments/commentRss/1378172.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/tuyile006/services/trackbacks/1378172.html</trackback:ping><description><![CDATA[<p>mySql中是否能有SQLserver的@@error变量呢，或者如c#中的try catch语法呢。</p>
<p>答案是肯定的，实例代码如下：</p>
<div class="cnblogs_code"><img align="top" width="11" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedBlock.gif" height="16" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_111508').style.display='none'; document.getElementById('Code_Open_Image_111508').style.display='inline'; document.getElementById('Code_Open_Text_111508').style.display='inline';" style="display: none" id="Code_Closed_Image_111508" /><img align="top" width="11" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockStart.gif" height="16" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_111508').style.display='none'; getElementById('Code_Closed_Image_111508').style.display='inline'; getElementById('Code_Closed_Text_111508').style.display='inline';" id="Code_Open_Image_111508" /><span id="Code_Closed_Text_111508" class="cnblogs_code_Collapse">Code</span><span id="Code_Open_Text_111508"><br /><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF;">DROP</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000FF;">PROCEDURE</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000FF;">IF</span><span style="color: #000000;">&nbsp;</span><span style="color: #808080;">EXISTS</span><span style="color: #000000;">&nbsp;sp_call_jobs;<br /></span><span style="color: #0000FF;">CREATE</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000FF;">PROCEDURE</span><span style="color: #000000;">&nbsp;sp_call_jobs()<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080;">NOT</span><span style="color: #000000;">&nbsp;DETERMINISTIC<br />&nbsp;&nbsp;&nbsp;&nbsp;SQL&nbsp;SECURITY&nbsp;DEFINER<br />&nbsp;&nbsp;&nbsp;&nbsp;COMMENT&nbsp;</span><span style="color: #FF0000;">''</span><span style="color: #000000;"><br /></span><span style="color: #0000FF;">BEGIN</span><span style="color: #000000;"><br /></span><span style="color: #0000FF;">declare</span><span style="color: #000000;">&nbsp;_row,_err,_</span><span style="color: #FF00FF;">count</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000FF;">int</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000FF;">default</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000; font-weight: bold;">0</span><span style="color: #000000;">;<br /></span><span style="color: #0000FF;">DECLARE</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000FF;">CONTINUE</span><span style="color: #000000;">&nbsp;&nbsp;HANDLER&nbsp;</span><span style="color: #0000FF;">FOR</span><span style="color: #000000;">&nbsp;SQLEXCEPTION,SQLWARNING,</span><span style="color: #808080;">NOT</span><span style="color: #000000;">&nbsp;FOUND&nbsp;</span><span style="color: #0000FF;">set</span><span style="color: #000000;">&nbsp;_err</span><span style="color: #808080;">=</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">;<br /></span><span style="color: #0000FF;">while</span><span style="color: #000000;">&nbsp;_row</span><span style="color: #808080;">&lt;</span><span style="color: #800000; font-weight: bold;">3</span><span style="color: #000000;">&nbsp;DO<br />&nbsp;&nbsp;START&nbsp;</span><span style="color: #0000FF;">TRANSACTION</span><span style="color: #000000;">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">insert</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000FF;">into</span><span style="color: #000000;">&nbsp;t1(cond_val)</span><span style="color: #0000FF;">values</span><span style="color: #000000;">(</span><span style="color: #0000FF;">null</span><span style="color: #000000;">);<br />&nbsp;&nbsp;</span><span style="color: #0000FF;">COMMIT</span><span style="color: #000000;">;<br />&nbsp;</span><span style="color: #0000FF;">if</span><span style="color: #000000;">&nbsp;_err</span><span style="color: #808080;">=</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000FF;">then</span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">set</span><span style="color: #000000;">&nbsp;_</span><span style="color: #FF00FF;">count</span><span style="color: #808080;">=</span><span style="color: #000000;">_</span><span style="color: #FF00FF;">count</span><span style="color: #808080;">+</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">;<br />&nbsp;</span><span style="color: #0000FF;">end</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000FF;">if</span><span style="color: #000000;">;<br />&nbsp;</span><span style="color: #0000FF;">set</span><span style="color: #000000;">&nbsp;_row</span><span style="color: #808080;">=</span><span style="color: #000000;">_row</span><span style="color: #808080;">+</span><span style="color: #800000; font-weight: bold;">1</span><span style="color: #000000;">;<br /></span><span style="color: #0000FF;">end</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000FF;">while</span><span style="color: #000000;">;<br /></span><span style="color: #0000FF;">select</span><span style="color: #000000;">&nbsp;_</span><span style="color: #FF00FF;">count</span><span style="color: #000000;">;<br /></span><span style="color: #0000FF;">END</span><span style="color: #000000;">;</span></span></div>
<p>&nbsp;</p>
<p>语句：</p>
<p>DECLARE CONTINUE&nbsp; HANDLER FOR SQLEXCEPTION,SQLWARNING,NOT FOUND set _err=1;</p>
<p>作用是当遇到SQLEXCEPTION,SQLWARNING,NOT FOUND 错误时，设置_err=1并执行CONTINUE操作，即继续执行后面的语句。</p>
<p>这就与c＃中的try catch语法很像。</p>
<p>而且在执行可能出错的语句的时候我们用事务语句：START TRANSACTION;&nbsp;&hellip;&hellip;&nbsp;COMMIT; 可以保证完整性。</p>
<p>&nbsp;</p><img src ="http://www.cnblogs.com/tuyile006/aggbug/1378172.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47958/" target="_blank">风声又起 Windows 7 RTM版7月13日完成</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>使用EventLog类写系统日志</title><link>http://www.cnblogs.com/tuyile006/archive/2009/01/15/1376078.html</link><dc:creator>小y</dc:creator><author>小y</author><pubDate>Thu, 15 Jan 2009 01:42:00 GMT</pubDate><guid>http://www.cnblogs.com/tuyile006/archive/2009/01/15/1376078.html</guid><wfw:comment>http://www.cnblogs.com/tuyile006/comments/1376078.html</wfw:comment><comments>http://www.cnblogs.com/tuyile006/archive/2009/01/15/1376078.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnblogs.com/tuyile006/comments/commentRss/1376078.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/tuyile006/services/trackbacks/1376078.html</trackback:ping><description><![CDATA[<p>写日志文件容易发生并发错误，而将日志写入系统日志或者数据库就不会出现这种情况。</p>
<p>实例使用EventLog写系统日志：</p>
<div class="cnblogs_code"><img align="top" width="11" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedBlock.gif" height="16" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_093417').style.display='none'; document.getElementById('Code_Open_Image_093417').style.display='inline'; document.getElementById('Code_Open_Text_093417').style.display='inline';" id="Code_Closed_Image_093417" /><img align="top" width="11" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockStart.gif" height="16" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_093417').style.display='none'; getElementById('Code_Closed_Image_093417').style.display='inline'; getElementById('Code_Closed_Text_093417').style.display='inline';" style="display: none" id="Code_Open_Image_093417" /><span id="Code_Closed_Text_093417" class="cnblogs_code_Collapse">Code</span><span style="display: none" id="Code_Open_Text_093417"><br /><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">if</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">!</span><span style="color: #000000;">EventLog.SourceExists(</span><span style="color: #800000;">"</span><span style="color: #800000;">Misc16</span><span style="color: #800000;">"</span><span style="color: #000000;">))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EventLog.CreateEventSource(</span><span style="color: #800000;">"</span><span style="color: #800000;">Misc16</span><span style="color: #800000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">RondiMiscLog</span><span style="color: #800000;">"</span><span style="color: #000000;">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EventLog&nbsp;myLog&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000FF;">new</span><span style="color: #000000;">&nbsp;EventLog();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myLog.Source&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">Misc16</span><span style="color: #800000;">"</span><span style="color: #000000;">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myLog.WriteEntry(</span><span style="color: #800000;">"</span><span style="color: #800000;">我是系统日志内容</span><span style="color: #800000;">"</span><span style="color: #000000;">);&nbsp;&nbsp;&nbsp;</span></span></div>
<p>&nbsp;</p>
<p>执行上面的代码之后，可以在计算机事件查看器里面看到：</p>
<p><img src="http://pic002.cnblogs.com/img/tuyile006/200901/2009011509404763.jpg" /></p>
<p>&nbsp;</p>
<p>实例删除自己建立的系统日志：</p>
<div class="cnblogs_code"><img align="top" width="11" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedBlock.gif" height="16" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_093538').style.display='none'; document.getElementById('Code_Open_Image_093538').style.display='inline'; document.getElementById('Code_Open_Text_093538').style.display='inline';" id="Code_Closed_Image_093538" /><img align="top" width="11" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockStart.gif" height="16" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_093538').style.display='none'; getElementById('Code_Closed_Image_093538').style.display='inline'; getElementById('Code_Closed_Text_093538').style.display='inline';" style="display: none" id="Code_Open_Image_093538" /><span id="Code_Closed_Text_093538" class="cnblogs_code_Collapse">Code</span><span style="display: none" id="Code_Open_Text_093538"><br /><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000;">&nbsp;</span><span style="color: #0000FF;">if</span><span style="color: #000000;">&nbsp;(EventLog.SourceExists(</span><span style="color: #800000;">"</span><span style="color: #800000;">Misc16</span><span style="color: #800000;">"</span><span style="color: #000000;">))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">string</span><span style="color: #000000;">&nbsp;logName&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;EventLog.LogNameFromSourceName(</span><span style="color: #800000;">"</span><span style="color: #800000;">Misc16</span><span style="color: #800000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">.</span><span style="color: #800000;">"</span><span style="color: #000000;">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EventLog.DeleteEventSource(</span><span style="color: #800000;">"</span><span style="color: #800000;">Misc16</span><span style="color: #800000;">"</span><span style="color: #000000;">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EventLog.Delete(logName);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;</span></span></div>
<p>&nbsp;</p>
<p>这就是系统日志的创建和删除方法。</p><img src ="http://www.cnblogs.com/tuyile006/aggbug/1376078.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47957/" target="_blank">乔布斯和埃利森</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>HTTPPost压力测试器</title><link>http://www.cnblogs.com/tuyile006/archive/2009/01/15/1376066.html</link><dc:creator>小y</dc:creator><author>小y</author><pubDate>Thu, 15 Jan 2009 01:31:00 GMT</pubDate><guid>http://www.cnblogs.com/tuyile006/archive/2009/01/15/1376066.html</guid><wfw:comment>http://www.cnblogs.com/tuyile006/comments/1376066.html</wfw:comment><comments>http://www.cnblogs.com/tuyile006/archive/2009/01/15/1376066.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/tuyile006/comments/commentRss/1376066.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/tuyile006/services/trackbacks/1376066.html</trackback:ping><description><![CDATA[<p>简易实现网络Post压力测试器：</p>
<p>一般get测试比较多，post测试工具比较少，有也不符合要求，自己弄一个测试。</p>
<p>&nbsp;&nbsp;界面如下：</p>
<p><img src="http://pic002.cnblogs.com/img/tuyile006/200901/2009011509302652.jpg" /></p>
<p>&nbsp; 源码如下：</p>
<div class="cnblogs_code"><img align="top" width="11" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedBlock.gif" height="16" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_092520').style.display='none'; document.getElementById('Code_Open_Image_092520').style.display='inline'; document.getElementById('Code_Open_Text_092520').style.display='inline';" style="display: none" id="Code_Closed_Image_092520" /><img align="top" width="11" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockStart.gif" height="16" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_092520').style.display='none'; getElementById('Code_Closed_Image_092520').style.display='inline'; getElementById('Code_Closed_Text_092520').style.display='inline';" id="Code_Open_Image_092520" /><span id="Code_Closed_Text_092520" class="cnblogs_code_Collapse">Code</span><span id="Code_Open_Text_092520"><br /><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF;">using</span><span style="color: #000000;">&nbsp;System;<br /></span><span style="color: #0000FF;">using</span><span style="color: #000000;">&nbsp;System.Collections.Generic;<br /></span><span style="color: #0000FF;">using</span><span style="color: #000000;">&nbsp;System.ComponentModel;<br /></span><span style="color: #0000FF;">using</span><span style="color: #000000;">&nbsp;System.Data;<br /></span><span style="color: #0000FF;">using</span><span style="color: #000000;">&nbsp;System.Drawing;<br /></span><span style="color: #0000FF;">using</span><span style="color: #000000;">&nbsp;System.Text;<br /></span><span style="color: #0000FF;">using</span><span style="color: #000000;">&nbsp;System.Threading;<br /></span><span style="color: #0000FF;">using</span><span style="color: #000000;">&nbsp;System.Windows.Forms;<br /></span><span style="color: #0000FF;">using</span><span style="color: #000000;">&nbsp;System.IO;<br /></span><span style="color: #0000FF;">using</span><span style="color: #000000;">&nbsp;System.Net;<br /><br /></span><span style="color: #0000FF;">namespace</span><span style="color: #000000;">&nbsp;postHttp<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000FF;">partial</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000FF;">class</span><span style="color: #000000;">&nbsp;Form1&nbsp;:&nbsp;Form<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">public</span><span style="color: #000000;">&nbsp;Form1()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InitializeComponent();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">string</span><span style="color: #000000;">&nbsp;url&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">""</span><span style="color: #000000;">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">string</span><span style="color: #000000;">&nbsp;filePath&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">""</span><span style="color: #000000;">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">int</span><span style="color: #000000;">&nbsp;tryCount&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">0</span><span style="color: #000000;">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">int</span><span style="color: #000000;">&nbsp;spac&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">0</span><span style="color: #000000;">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">int</span><span style="color: #000000;">&nbsp;SuccessCount&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">0</span><span style="color: #000000;">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">int</span><span style="color: #000000;">&nbsp;FailCount&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">0</span><span style="color: #000000;">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">string</span><span style="color: #000000;">&nbsp;result&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">""</span><span style="color: #000000;">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">打开</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">private</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000FF;">void</span><span style="color: #000000;">&nbsp;button1_Click(</span><span style="color: #0000FF;">object</span><span style="color: #000000;">&nbsp;sender,&nbsp;EventArgs&nbsp;e)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">if</span><span style="color: #000000;">&nbsp;(openFileDialog1.ShowDialog()&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;DialogResult.OK)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txtFilePath.Text&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;openFileDialog1.FileName;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">发送</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">private</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000FF;">void</span><span style="color: #000000;">&nbsp;button2_Click(</span><span style="color: #0000FF;">object</span><span style="color: #000000;">&nbsp;sender,&nbsp;EventArgs&nbsp;e)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SuccessCount&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">0</span><span style="color: #000000;">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FailCount&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">0</span><span style="color: #000000;">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">""</span><span style="color: #000000;">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;url&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;txtUrl.Text;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;filePath&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;txtFilePath.Text;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">int</span><span style="color: #000000;">&nbsp;tn&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000FF;">int</span><span style="color: #000000;">)numThreads.Value;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tryCount&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000FF;">int</span><span style="color: #000000;">)numTrys.Value;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;spac&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000FF;">int</span><span style="color: #000000;">.Parse(txtSpac.Text);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">使用cp提供的下行包发送测试</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileStream&nbsp;fs&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000FF;">new</span><span style="color: #000000;">&nbsp;FileStream(filePath,&nbsp;FileMode.Open,&nbsp;FileAccess.Read);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StreamReader&nbsp;reader1&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000FF;">new</span><span style="color: #000000;">&nbsp;StreamReader(fs,&nbsp;Encoding.Default);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">[</span><span style="color: #800000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;DateTime.Now.ToString()&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">]\r\n发送数据包：\r\n</span><span style="color: #800000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;reader1.ReadToEnd()&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">\r\n------------------------------------------------\r\n\r\n</span><span style="color: #800000;">"</span><span style="color: #000000;">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reader1.Close();<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000FF;">int</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">0</span><span style="color: #000000;">;&nbsp;i&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;tn;&nbsp;i</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread&nbsp;td&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000FF;">new</span><span style="color: #000000;">&nbsp;Thread(</span><span style="color: #0000FF;">new</span><span style="color: #000000;">&nbsp;ThreadStart(ThreadFun));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;td.Start();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">while</span><span style="color: #000000;">&nbsp;((SuccessCount&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;FailCount)&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;tn&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;tryCount)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.Sleep(</span><span style="color: #800080;">10</span><span style="color: #000000;">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;msg.Text&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;result;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;msg.Text&nbsp;</span><span style="color: #000000;">+=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">\r\n-------------------------------------------------------------</span><span style="color: #800000;">"</span><span style="color: #000000;">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;msg.Text&nbsp;</span><span style="color: #000000;">+=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">\r\n成功：</span><span style="color: #800000;">"</span><span style="color: #000000;">+</span><span style="color: #000000;">SuccessCount;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;msg.Text&nbsp;</span><span style="color: #000000;">+=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">\r\n失败：</span><span style="color: #800000;">"</span><span style="color: #000000;">+</span><span style="color: #000000;">FailCount;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;msg.Text&nbsp;</span><span style="color: #000000;">+=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">\r\n成功率：</span><span style="color: #800000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000FF;">string</span><span style="color: #000000;">.Format(</span><span style="color: #800000;">"</span><span style="color: #800000;">{0:p}</span><span style="color: #800000;">"</span><span style="color: #000000;">,&nbsp;((</span><span style="color: #0000FF;">double</span><span style="color: #000000;">)SuccessCount&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">(SuccessCount&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;FailCount)));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000FF;">void</span><span style="color: #000000;">&nbsp;ThreadFun()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000FF;">int</span><span style="color: #000000;">&nbsp;j&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">0</span><span style="color: #000000;">;&nbsp;j&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;tryCount;&nbsp;j</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PostOneData();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.Sleep(spac);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000FF;">void</span><span style="color: #000000;">&nbsp;PostOneData()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">bool</span><span style="color: #000000;">&nbsp;success&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000FF;">false</span><span style="color: #000000;">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">try</span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">string</span><span style="color: #000000;">&nbsp;sendData&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">""</span><span style="color: #000000;">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">使用cp提供的下行包发送测试</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileStream&nbsp;fs&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000FF;">new</span><span style="color: #000000;">&nbsp;FileStream(filePath,&nbsp;FileMode.Open,&nbsp;FileAccess.Read);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StreamReader&nbsp;reader1&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000FF;">new</span><span style="color: #000000;">&nbsp;StreamReader(fs,&nbsp;Encoding.Default);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">byte</span><span style="color: #000000;">[]&nbsp;postData&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;System.Text.Encoding.UTF8.GetBytes(reader1.ReadToEnd());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reader1.Close();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpWebRequest&nbsp;myRequest&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(HttpWebRequest)WebRequest.Create(url);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myRequest.Method&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">POST</span><span style="color: #800000;">"</span><span style="color: #000000;">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myRequest.ContentType&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">text/xml;charset=\</span><span style="color: #800000;">"</span><span style="color: #000000;">utf</span><span style="color: #000000;">-</span><span style="color: #800080;">8</span><span style="color: #000000;">\</span><span style="color: #800000;">""</span><span style="color: #000000;">;&nbsp;</span><span style="color: #008000;">//<br /></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myRequest.ContentLength&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;postData.Length;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stream&nbsp;newStream&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;myRequest.GetRequestStream();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">发送数据</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newStream.Write(postData,&nbsp;</span><span style="color: #800080;">0</span><span style="color: #000000;">,&nbsp;postData.Length);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newStream.Close();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">获取返回的结果</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpWebResponse&nbsp;response&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(HttpWebResponse)myRequest.GetResponse();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StreamReader&nbsp;reader&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000FF;">new</span><span style="color: #000000;">&nbsp;StreamReader(response.GetResponseStream(),&nbsp;Encoding.UTF8);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">string</span><span style="color: #000000;">&nbsp;retStr&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;reader.ReadToEnd();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;</span><span style="color: #000000;">+=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">[</span><span style="color: #800000;">"</span><span style="color: #000000;">+</span><span style="color: #000000;">DateTime.Now.ToString()</span><span style="color: #000000;">+</span><span style="color: #800000;">"</span><span style="color: #800000;">]\r\n接收到数据包：\r\n</span><span style="color: #800000;">"</span><span style="color: #000000;">+</span><span style="color: #000000;">retStr</span><span style="color: #000000;">+</span><span style="color: #800000;">"</span><span style="color: #800000;">\r\n\r\n</span><span style="color: #800000;">"</span><span style="color: #000000;">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">if&nbsp;(retStr.Length&gt;0)</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">if</span><span style="color: #000000;">(response.StatusCode</span><span style="color: #000000;">==</span><span style="color: #000000;">HttpStatusCode.OK)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;success&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000FF;">true</span><span style="color: #000000;">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reader.Close();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.Close();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">catch</span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;success&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000FF;">false</span><span style="color: #000000;">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">if</span><span style="color: #000000;">&nbsp;(success)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SuccessCount</span><span style="color: #000000;">++</span><span style="color: #000000;">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF;">else</span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FailCount</span><span style="color: #000000;">++</span><span style="color: #000000;">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}</span></span></div>
<p>&nbsp;</p>
<p>&nbsp;</p><img src ="http://www.cnblogs.com/tuyile006/aggbug/1376066.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47957/" target="_blank">乔布斯和埃利森</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>SAML简介：安全地共享数字身份信息</title><link>http://www.cnblogs.com/tuyile006/archive/2008/11/26/1341332.html</link><dc:creator>小y</dc:creator><author>小y</author><pubDate>Wed, 26 Nov 2008 04:23:00 GMT</pubDate><guid>http://www.cnblogs.com/tuyile006/archive/2008/11/26/1341332.html</guid><wfw:comment>http://www.cnblogs.com/tuyile006/comments/1341332.html</wfw:comment><comments>http://www.cnblogs.com/tuyile006/archive/2008/11/26/1341332.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/tuyile006/comments/commentRss/1341332.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/tuyile006/services/trackbacks/1341332.html</trackback:ping><description><![CDATA[<p><strong>简介</strong></p>
<p>　　安全是所有Web项目在设计时都要考虑的一个重要因素。无论是选择最短口令，决定何时使用SSL加密HTTP会话，还是通过自动登录cookie来识别用户，都经常要付出重大的设计努力，以保护用户的身份信息和他们可能存放于Web站点的其他资料。糟糕的安全性可能带来公关灾难。当最终用户努力保持对其个人信息的控制时，他们要面临令人迷惑的隐私政策，需要牢记众多站点的不同口令，以及遭遇&ldquo;钓鱼式攻击&rdquo;事件。</p>
<p>　　在宏观层次上，数字身份引起了许多复杂的技术和社会问题，业界一些团体如Liberty Alliance和IdentityGang都正试图通过开发新的技术标准来解决它们。 在较小的规模上，可以使用一些工具来为用户提供更好的安全性。请考虑口令管理问题。用户访问他们保存个人资料的Web站点，在可以存取他们的资料之前必须经过验证。通过验证来鉴别用户，确保他们是所声称的用户。进行验证最简单方式是使用口令。然而，若每个站点都需要各自的一套口令，用户将有难以控制的大量口令。1998年微软首先尝试通过其Passport network提供该问题的全球解决方案。Passport使得任意Web站点使用用户提交给Passport的个人资料(如用户名、地址、信用卡号)成为可能。Passport是单点登录(single sign-on，SSO)的第一次电子商务尝试。它没有流行起来，部分原因是由于人们对系统封闭性的担心。然而，SSO的理念非常引人注目，许多开放标准和商业计划都追随Passport其后。通过SSO，某个Web站点可以与其他站点共享用户身份信息。</p>
<p>　　SSO对于使用应用服务提供商(Application Service Provider，ASP)软件服务的企业特别有用。ASP在自己的服务器上宿主应用程序，出售其访问权作为服务。公司可以在它的标准目录服务器里管理自己的用户和口令，然后通过SSO授予用户访问ASP应用程序的权限。SSO允许公司管理自己用户的信息，不必为每一员工维护多个用户账号。对用户来说，SSO的好处在于他们可以在多个应用程序中使用一个用户名和口令，并且在应用程序之间切换时无需重新验证。SSO不仅仅用于Web应用程序，它可用于任何类型的应用程序，只要有安全地传送身份信息的协议。这种通信方式的开放标准就是安全性断言标记语言(SAML)。</p>
<p>　　<strong>关于SAML</strong></p>
<p>　　SAML为SSO提供了一个安全的协议。SAML(读作&ldquo;sam-ell&rdquo;)是允许Web站点安全地共享身份信息的一个规范，它来自ebXML和其他XML标准背后的国际性联盟OASIS。站点使用SAML的XML词汇表和请求/应答模式，通过HTTP交换身份信息。这种信息共享标准化能帮助Web站点与多个合作伙伴集成，避免由于为不同合作伙伴设计和维护各自私有的集成通道而引起的争论。SAML1.0于2002年11月亮相。本文介绍最终于2003年完成的SAML1.1。虽然于2005年完成的SAML 2.0引入了支持身份联邦的一些重要新功能，但BEA WebLogic Server 9.x支持的是SAML1.1，因此本文将重点介绍SAML1.1。</p>
<p>　　<strong>一个基本的SAML示例</strong></p>
<p>　　我们来看一个非常基本的SAML示例。顾名思义，SAML的核心元素是安全性断言。断言即无需证明的语句。安全性断言是关于用户身份的语句，只能通过接收断言发布者的站点信任获得支持。在SAML中，发布断言的站点叫&ldquo;发布者&rdquo;、&ldquo;断言方&rdquo;、或&ldquo;源站点&rdquo;。接收断言并信任它们的站点叫&ldquo;信任方&rdquo;或&ldquo;目标站点&rdquo;。</p>
<p>　　在本示例场景中，用户使用用户名和口令登录源站点。然后，用户希望无需再次验证即可访问目标站点。图1显示了源站点和目标站点之间能使用户通过单点登录访问双方站点的交互。</p>
<p><img src="http://pic002.cnblogs.com/img/tuyile006/200811/2008112612213148.jpg" alt="" /></p>
<p>　　图1:一个SAML示例场景</p>
<p>&nbsp;</p>
<p><img src="http://pic002.cnblogs.com/img/tuyile006/200811/2008112616582020.gif" alt="" /></p>
<p>图2:另一个SAML示例场景</p>
<p>上面第4步中的SAML请求将通过HTTP作为从目标站点到源站点的SOAP消息发送。消息体将类似于:</p>
<p>
<table style="table-layout: fixed; border: #cccccc 1px dotted;" border="0" cellspacing="0" cellpadding="6" width="95%" align="center">
<tbody>
<tr>
<td style="word-wrap: break-word;" bgcolor="#f3f3f3"><span style="font-family: Verdana;">&lt;!-- This request would be wrapped in a SOAP envelope --&gt;<br />&lt;samlp:Request xmlns:samlp="urn:oasis:names:tc:SAML:1.0:protocol"<br />MajorVersion="1"<br />MinorVersion="1"<br />RequestID="_216.27.61.137.103896224111"<br />IssueInstant="2005-03-19T17:04:21.022Z"&gt; <br />&lt;samlp:AssertionArtifact&gt;<br />AAGZE1RNQJEFzYNCGAGPjWvtDIRSZ4 <br />&lt;/samlp:AssertionArtifact&gt;<br />&lt;/samlp:Request&gt;</span></td>
</tr>
</tbody>
</table>
</p>
<p>　　该请求把自己标识为来自SAML请求-应答协议名称空间的SAML 1.1请求(MajorVersion和MinorVersion)。SAML为请求-应答协议元素定义了一个名称空间，为断言定义了另一个单独的名称空间。Request拥有基于请求者IP地址的惟一ID。请求的准确时间也包括在内。</p>
<p>　　该请求中最有趣的部分是标记中令人费解的字符串。目标站点从用户HTTP请求的查询字符串中得到该值。由于它用于标识浏览器，所以也叫&ldquo;浏览器凭证&rdquo;。注意，该请求没有要求提交特定用户的验证。该请求创建时，目标方并没有用于提交请求的用户名。该信息将在应答中得到。浏览器凭证告诉可能正在同时向目标站点发送很多用户的源站点，应该在此应答中发送哪个用户的断言。下面是一个应答示例:</p>
<p>
<table style="table-layout: fixed; border: #cccccc 1px dotted;" border="0" cellspacing="0" cellpadding="6" width="95%" align="center">
<tbody>
<tr>
<td style="word-wrap: break-word;" bgcolor="#f3f3f3"><span style="font-family: Verdana;">&lt;samlp:Response xmlns:samlp="urn:oasis:names:tc:SAML:1.0protocol"<br />ResponseID="huGxcDQc4cNdDyocphmi6CxEMnga&Oacute; <br />InResponseTo="_216.27.61.137.103896224111"? <br />MajorVersion="1" <br />MinorVersion="1" <br />IssueInstant="2004-06-19T17:05:37.795Z"&gt;<br />&lt;samlp:Status&gt; <br />&lt;samlp:StatusCode Value="samlp:Success" /&gt; <br />&lt;/samlp:Status&gt;<br />&lt;saml:Assertion<br />xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion" <br />MajorVersion="1" <br />MinorVersion="1" <br />AssertionID="buGxcG4gILg5NlocyLccDz6iXrUa" <br />Issuer="www.example.com" <br />IssueInstant="2004-06-19T17:05:37.795Z"&gt; <br />&lt;saml:Conditions NotBefore="2004-06-19T17:00:37.795Z" <br />NotOnOrAfter="2004-06-19T17:10:37.795Z"/&gt; <br />&lt;saml:AuthenticationStatement <br />AuthenticationMethod="urn:oasis:names:tc:SAML:1.0:am:password" <br />AuthenticationInstant="2004-06-19T17:05:17.706Z"&gt; <br />&lt;saml:Subject&gt; <br />&lt;saml:NameIdentifier&gt;JSmith&lt;/saml:NameIdentifier&gt; <br />&lt;saml:SubjectConfirmation&gt; <br />&lt;saml:ConfirmationMethod&gt; <br />urn:oasis:names:tc:SAML:1.0:cm:artifact-01 <br />&lt;/saml:ConfirmationMethod&gt; <br />&lt;/saml:SubjectConfirmation&gt; <br />&lt;/saml:Subject&gt; <br />&lt;/saml:AuthenticationStatement&gt; <br />&lt;/saml:Assertion&gt; <br />&lt;/samlp:Response&gt;</span></td>
</tr>
</tbody>
</table>
</p>
<p>　　应答的关键部分是Assertion元素。断言使用了SAML Assertion名称空间定义的一个词汇表。它由一个验证语句组成，该语句告诉我们用户JSmith已通过口令验证。它还包含了支配目标站点断言使用的一系列条件。在本例中，这些条件指定一个10分钟的时间窗(time window)，在时间窗之内断言有效。时间窗用来防止重放攻击。没有它，中途截取断言的恶意用户可以明天再次发送断言来冒充JSmith，并获得访问目标站点的权限。确认方法元素是指上面描述的浏览器凭证。</p>
<p>接受断言后，目标站点视为JSmith已直接通过其用户名和口令登录。注意，验证(鉴别用户身份)和授权(授予用户访问资源的权限)之间的分离在此是非常重要的。源站点负责验证JSmith，但不提供关于JSmith在目标站点特权的任何信息。这种安排对双方站点都有益处:源站点无需了解目标站点的资源或特权，目标站点也可忽略源站点管理用户和验证的细节。这种分离提供了非常重要的灵活性。</p>
<p>　　假设源站点是JSmith的老板MegaBank。JSmith使用他在MegaBank的账号访问他工作必需的三个不同外部宿主的应用程序。一天，MegaBank雇佣的安全顾问建议在JSmith所在部门启用指纹验证。如果没有SSO和SAML，MegaBank就必须到三个应用程序提供商那里请求他们支持指纹验证。应用程序提供商不得不权衡提供该支持的成本和不提供该支持可能丢失客户的风险。MegaBank可能必须等待提供商发布他们软件的新版本，所有的改动或许将昂贵又费时。通过SAML，MegaBank只需改变自己的验证过程，在JSmith和其同事登录时检查指纹即可。作为SAML目标站点的宿主应用程序无需清楚在MegaBank所做的更改，因为底层的SAML断言是保持不变的。</p>
<p>　　使用SAML对用户Web站点或Web服务的设计与实现有一些影响，但仅限于在处理Web窗口中的用户名和口令时，或在处理方法签名时。例如，下面的Web services API方法不能与SAML很好地协同工作:</p>
<p>
<table style="table-layout: fixed; border: #cccccc 1px dotted;" border="0" cellspacing="0" cellpadding="6" width="95%" align="center">
<tbody>
<tr>
<td style="word-wrap: break-word;" bgcolor="#f3f3f3"><span style="font-family: Verdana;">public void makeSomeSystemChange(String username, <br />String password, <br />String[] params);</span></td>
</tr>
</tbody>
</table>
</p>
<p>　　该方法假设用户能够提供用户名和口令。如果Web服务的宿主是SAML目标站点，就没有Web服务实现可以验证的口令。有少数方式可以改进或扩展这些接口，使其与SAML协同工作，这取决于所需的向后兼容性的水平。同样，如果在Web页包含了具有用户名和口令字段的表单，那么为经过SAML验证的用户禁用口令字段是非常重要的。</p>
<p>　　<strong>安全的SAML</strong></p>
<p>　　由于SAML在两个拥有共享用户的站点间建立了信任关系，所以安全性是需考虑的一个非常重要的因素。SAML中的安全弱点可能危及用户在目标站点的个人信息。SAML依靠一批制定完善的安全标准，包括SSL和X.509，来保护SAML源站点和目标站点之间通信的安全。源站点和目标站点之间的所有通信都经过了加密。为确保参与SAML交互的双方站点都能验证对方的身份，还使用了证书。</p>
<p>　　<strong>BEA WebLogic Server中的SAML</strong></p>
<p>　　BEA WebLogic Server 9.0是第一个包含了对SAML支持的WebLogic Server版本。WebLogic Server 9.1中进一步加强了对SAML的支持。WebLogic Server把SAML作为WebLogic Security Service的一部分使用。SAML用来为WebLogic Web services和跨WebLogic域共享验证信息提供SSO支持。除SAML外，WebLogic Server也为Windows桌面SSO支持Simple and Protected Negotiate (SPNEGO)协议。SAML可用来提供访问Web应用程序和Web service的权限。</p>
<p>　　对于一些应用程序，您仅需付出很少甚至无需付出额外的程序设计努力，就能使用WebLogic Server中的SAML支持。如果用户应用程序使用配置为WebLogic 安全域一部分的安全设置，那么集成SAML是一个首要的系统管理任务。WebLogic server可配置作为SAML源站点或SAML目标站点。要使服务器成为SAML源站点，需配置一个SAML Credential Mapper。要使服务器成为SAML目标站点，需配置一个SAML Identity Asserter.</p>
<p>　　如果用户应用程序安全模式为与WebLogic Security Service进行交互，包含了自己的特定于WebLogic的代码，可以使用WebLogic的SAML API把该定制扩展到SAML。该API提供对WebLogic SAML服务主要组件的编程式访问。用户可以使用应用程序自身的业务逻辑来扩展诸如SAMLCredentialNameMapper和SAMLIdentityAssertionNameMapper这样的类。一旦用户有了自己的定制类，WebLogic管理控制台就允许用户配置其SAML Credential Mapper(源站点)或SAML Identity Asserter(目标站点)，以便使用那些类。惟一的要求是用户的定制类需要在系统类路径中，非常类似于WebLogic启动类，这可能对用户部署策略产生影响。</p>
<p>　　最后，如果应用程序安全模式完全独立于WebLogic Security Service，用户将不能从WebLogic的SAML工具中获益。用户要使其应用程序支持SAML就需要做更多工作，要么实现WebLogic所提供的某些服务的简化版本，要么集成那些服务的第三方版本。但是，用户仍将受益于可在任何J2EE应用服务器或在如Tomcat这样的Java Web服务器应用程序上使用SAML。有商业和开源的SAML支持可供选择。开源的选择中有OpenSAML和相关的Shibboleth项目。OpenSAML是一个SAML工具包，可用来建立用户自己的SAML源站点和目标站点。Shibboleth更进一步，它提供了一个构建在OpenSAML之上的&ldquo;基于SAML 1.1的跨域Web单点登录平台&rdquo;。SourceID为Java 和.NET中的SAML 1.1提供了一套开源工具包。在Apache项目下没有完整的SAML工具包，但WSS4J项目包含了对OpenSAML的一些支持。</p>
<p>　　<strong>结束语</strong></p>
<p>　　SAML对企业应用程序开发越来越重要。随着大公司内部系统的不断扩展，合并身份信息对系统的成功管理来说非常关键。SAML也为依赖外部宿主应用程序的企业提供了巨大好处。对最终用户来说，单点登录能同时提供安全性和便利性。WebLogic Server 9.x的SAML支持是对WebLogic Security Service最重要的新补充之一。无论它是否为用户应用程序安全模式的一部分，用户都有许多选择以使其应用程序与SAML协同工作。</p><img src ="http://www.cnblogs.com/tuyile006/aggbug/1341332.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47956/" target="_blank">Xbox Live将投放Silverlight广告</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>HttpWebRequest详解</title><link>http://www.cnblogs.com/tuyile006/archive/2008/11/14/1333632.html</link><dc:creator>小y</dc:creator><author>小y</author><pubDate>Fri, 14 Nov 2008 07:34:00 GMT</pubDate><guid>http://www.cnblogs.com/tuyile006/archive/2008/11/14/1333632.html</guid><wfw:comment>http://www.cnblogs.com/tuyile006/comments/1333632.html</wfw:comment><comments>http://www.cnblogs.com/tuyile006/archive/2008/11/14/1333632.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/tuyile006/comments/commentRss/1333632.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/tuyile006/services/trackbacks/1333632.html</trackback:ping><description><![CDATA[摘要: Determining Whether the Device Is ConnectedMost network applications need to know whether the device is currently connected to the network. A well-designed mobile application allows the user to make u&nbsp;&nbsp;<a href='http://www.cnblogs.com/tuyile006/archive/2008/11/14/1333632.html'>阅读全文</a><img src ="http://www.cnblogs.com/tuyile006/aggbug/1333632.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47951/" target="_blank">Debian无视GNU创始人警告 接受Mono</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>一个开源C＃3D游戏引擎</title><link>http://www.cnblogs.com/tuyile006/archive/2008/11/05/1327246.html</link><dc:creator>小y</dc:creator><author>小y</author><pubDate>Wed, 05 Nov 2008 05:10:00 GMT</pubDate><guid>http://www.cnblogs.com/tuyile006/archive/2008/11/05/1327246.html</guid><wfw:comment>http://www.cnblogs.com/tuyile006/comments/1327246.html</wfw:comment><comments>http://www.cnblogs.com/tuyile006/archive/2008/11/05/1327246.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnblogs.com/tuyile006/comments/commentRss/1327246.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/tuyile006/services/trackbacks/1327246.html</trackback:ping><description><![CDATA[<p>兴奋中。</p>
<p><a href="http://www.exocortex.org/3dengine/">http://www.exocortex.org/3dengine/</a></p>
<p>&nbsp;</p>
<p><a name="Introduction"><strong><span style="font-family: Tahoma;">1 I</span></strong></a><strong><span style="font-family: Tahoma;"><a name="Introduction">ntroduction</a></span></strong></p>
<p><span style="font-size: x-small; font-family: Tahoma;"><a href="http://www.cnblogs.com/tuyile006/admin/exoengine4.jpg"></a>For my fourth year computer graphics course I wrote a little 3D engine using C# and the .NET platform.&nbsp; I decided to go this route as opposed to the C++ route that everyone else took in the course because I wanted to see whether C# lived up to it's hype.&nbsp; Surprising, after writing about 600kB of code in C# it seems like it is a decent language after all and possibly an effective replacement for C++ even in the demanding field of real-time 3D game development.&nbsp; When I compare C# to C++ I find it's best features are garbage collection, less convoluted syntax and true object orientation.&nbsp; It was a class requirement that I use OpenGL instead of DirectX / Direct3D.</span></p>
<p><span style="font-size: x-small; font-family: Tahoma;">Just a quick disclaimer before I go too far: please remember that this is just an old one-term university project thus don't get your expectations too high.</span></p>
<p><span style="font-size: x-small; font-family: Tahoma;">The included compiled binaries for both the math library and the OpenGL wrapper are compatible with Visual Basic .NET and Visual C++ .NET development projects.</span></p>
<p>&nbsp;</p>
<p><span style="font-size: x-small; font-family: Tahoma;">虽然现在才发现这个东西，但令我兴奋不已，我要开始我的C#游戏之路了。
<p>&nbsp;</p>
</span></p><img src ="http://www.cnblogs.com/tuyile006/aggbug/1327246.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47950/" target="_blank">iPhone 3GS首发日创AT&T多项纪录</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>解决方案之数据同步</title><link>http://www.cnblogs.com/tuyile006/archive/2008/10/17/1313652.html</link><dc:creator>小y</dc:creator><author>小y</author><pubDate>Fri, 17 Oct 2008 15:35:00 GMT</pubDate><guid>http://www.cnblogs.com/tuyile006/archive/2008/10/17/1313652.html</guid><wfw:comment>http://www.cnblogs.com/tuyile006/comments/1313652.html</wfw:comment><comments>http://www.cnblogs.com/tuyile006/archive/2008/10/17/1313652.html#Feedback</comments><slash:comments>16</slash:comments><wfw:commentRss>http://www.cnblogs.com/tuyile006/comments/commentRss/1313652.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/tuyile006/services/trackbacks/1313652.html</trackback:ping><description><![CDATA[<p>本篇要讲的是数据库数据的同步方案，关于局域网，或者两台数据库IP可见的同步情况，这里不给出方案，因为这种情况数据库本身就提供了有很多种性能卓越的方案，看帮助文档就可以解决。</p>
<p><span style="color: #993300"><span style="color: #993300"><strong>本文要讲的案例是：</strong></span></span></p>
<div class="cnblogs_code">
<p><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000">有A，B两台或者更多的数据库服务器，分处于不同的网络，数据库IP不可见，端口不可见，现在需要<br />
<br />
&nbsp;&nbsp;A中的&nbsp;t1表&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;－－－－－</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;单向同步到&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;B中的&nbsp;t1表<br />
<br />
&nbsp;&nbsp;A中的&nbsp;t2表&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">－－－－－</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;双向同步到&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;B中的&nbsp;t2表<br />
</span></p>
<p><span style="color: #000000">&nbsp; 也就是AB两数据库服务器的单向同步和双向同步应该怎么做？</p>
</span></div>
<p>&nbsp;</p>
<p>在internet网中必须考虑网络速度，所以应该保证传输的数据量尽量小一点再小一点。</p>
<p>双向同步就是做两次单向同步而已，我们以从A服务器上的t1表单向同步到B服务器的t1表为例子说明同步方案。</p>
<p>我们来看看三种方案，然后比较一下。</p>
<p><span style="color: #993300"><span style="color: #993300"><strong>方案一：</strong></span></span></p>
<p>&nbsp;</p>
<div class="cnblogs_code" style="font-size: 14pt; width: 843px; height: 157px">
<ul>
    <li><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000">将A站的t1表的数据（DateTable类型）直接传送到B站的t1表；<br />
    <br />
    </span></li>
    <li><span style="color: #000000">B端修改式插入t1表中，所谓修改式插入就是当不存在就insert当存在就update；<br />
    （相当于mysql里面的：insert&nbsp;into&nbsp;t1&nbsp;()values()&nbsp;on&nbsp;duplicate&nbsp;key&nbsp;update&nbsp;语法）<br />
    <br />
    </span></li>
    <li><span style="color: #000000">完成。（简单吧）</span></li>
</ul>
</div>
<p>&nbsp;</p>
<p><span style="font-size: 14pt"><strong style="color: #993300">点评：</strong></span>这是最直接最粗暴也最安全的方案，但是如果同步的表数据比较多，这种方案肯定是行不通的。不过当数据量比较少时，比如说100条以内，则这种方案也凸现出了它的优点：安全，简单。所以这种方案也是有用武之地的。</p>
<p>&nbsp;</p>
<p><span style="color: #993300"><strong>方案二：</strong></span></p>
<p>&nbsp;</p>
<div class="cnblogs_code" style="font-size: 14pt; width: 980px; height: 320px">
<ul>
    <li><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000">在同步源一端表中（如案例中的A站t1表）增加<br />
    is_sync<br />
    is_del&nbsp;&nbsp;&nbsp;<br />
    两个tinyint类型或者bite类型的字段；&nbsp;<br />
    <br />
    </span></li>
    <li><span style="color: #000000">当作Insert或者Update操作时，同时将is_sync设置成0，等待同步；&nbsp;<br />
    <br />
    </span></li>
    <li><span style="color: #000000">当作Delete操作时，将is_del设置成1，is_sync设置成0，而不是物理删除；&nbsp;<br />
    <br />
    </span></li>
    <li><span style="color: #000000">在A端查询所有is_sync</span><span style="color: #000000">=</span><span style="color: #000000">0的数据，传递到B端；&nbsp;<br />
    <br />
    </span></li>
    <li><span style="color: #000000">B端接收到数据之后将B表中已经存在的数据作物理增删改并将成功的结果返回给A；&nbsp;<br />
    <br />
    </span></li>
    <li><span style="color: #000000">A端收到B操作成功的结果，将is_sync</span><span style="color: #000000">=</span><span style="color: #000000">0且在返回成功中的数据设置is_sync</span><span style="color: #000000">=</span><span style="color: #800080">1</span><span style="color: #000000">,另外如果还is_del</span><span style="color: #000000">=</span><span style="color: #000000">1则物理删除。&nbsp;<br />
    </li>
</ul>
</span></div>
<p>&nbsp;</p>
<p><span style="font-size: 18pt; color: #993300"><strong>&nbsp;点评：</strong></span>这种方案是比较常见但我觉得还不明智的方案，虽然它做到了进行细粒度的同步，但却添加了很多附加操作，如增删改操作都要更改is_sync的值，如果正好项目已经做到收尾阶段，所有的数据层已经实现了，&nbsp;再要加同步的话改动就比较大了，所以这种方案优点是同步精度提高，传输的数据量减少，但对原本的增删改代码影响较大。 </p>
<p>与之相似的方案还有增加相同结构的表（称为它的待同步表），用触发器将增删改操作记录到这种待同步表中，然后按上面的流程实现的同步，那种方案也有同样的许多附加内容，如新增触发器和待同步表，也对现行系统造成增加负担和复杂度的负面影响。</p>
<p>&nbsp;</p>
<p><span style="color: #993300"><strong>方案三：<br />
</strong></span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 看方案三之前先介绍一下Rowversion这种字段类型，在mysql中是<font face="Verdana">TIMESTAMP类型。</font></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Long Long ago，MSDN说：&#8220;每个数据库都有一个计数器，当对数据库中包含 <strong>rowversion</strong> 列的表执行插入或更新操作时，该计数器值就会增加。此计数器是数据库行版本。这可以跟踪数据库内的相对时间，而不是时钟相关联的实际时间。一个表只能有一个 <strong>rowversion</strong> 列。每次修改或插入包含 <strong>rowversion</strong> 列的行时，就会在 <strong>rowversion</strong> 列中插入经过增量的数据库行版本值。&#8221;</p>
<p>具体的关于Rowversion类型的说明就不详细写出来了，读者可以在msdn上搜一下。总之，这种类型的字段会更着数据库的记录自动改变，不需手工操作，利用这个特性，设计出第三种同步方案。</p>
<div class="cnblogs_code" style="font-size: 14pt; width: 960px; height: 362px">
<ul>
    <li><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000">在同步源一端（A中的t1表）表中增加如下三个字段（以mssql字段类型为例子）<br />
    <br />
    row_version&nbsp;&nbsp;&nbsp;&nbsp;rowversion,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">--</span><span style="color: #000000">&nbsp;&nbsp;当前版本<br />
    <br />
    sync_version&nbsp;&nbsp;&nbsp;binary(</span><span style="color: #800080">8</span><span style="color: #000000">),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">--</span><span style="color: #000000">&nbsp;&nbsp;已同步版本<br />
    <br />
    is_del&nbsp;&nbsp;bit&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">default</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">--</span><span style="color: #000000">&nbsp;是否删除<br />
    <br />
    </span></li>
    <li><span style="color: #000000">当A中t1表进行增加或修改操作时，row_version字段的值会自动变成当前时间，而sync_version的值不会变，当做删除操作的时候，需要将is_del设置成1，而不做物理删除；<br />
    <br />
    </span></li>
    <li><span style="color: #000000">查询A中所有row_version</span><span style="color: #000000">!=</span><span style="color: #000000">sync_version的数据，传送到B端；<br />
    <br />
    </span></li>
    <li><span style="color: #000000">B接收到数据之后做物理增删改，并将成功的结果返回给A；<br />
    <br />
    </span></li>
    <li><span style="color: #000000">A接收到B返回的结果之后，将sync_version与row_version的值设置成相同，如果其中有is_del</span><span style="color: #000000">=</span><span style="color: #000000">1的则物理删除；<br />
    </li>
</ul>
</span></div>
<p>&nbsp;</p>
<p>&nbsp;<span style="color: #993300"><strong style="font-size: 14pt">点评：</strong></span>这种方案我觉得是同步大表的最优方案，它只有在做删除操作的时候改成逻辑删除，其他操作不用考虑到同步的问题，对已经存在的系统影响最少，而且也是精确同步，不占用紧张的网络资源，这种方案是本篇的主角，也是我大力推荐的方案。</p>
<p>在mysql中可以用&nbsp;<font face="Verdana">TIMESTAMP </font>类型实现，mysql的表中只要含有<font face="Verdana">TIMESTAMP </font>字段（<span style="color: #993300">且是无默认值的</span>），则当表有更新或增加时就会改变第一个<font face="Verdana">TIMESTAMP </font>类型字段的值为当前时间，这同样可以应用上述第三套方案。</p>
<p>&nbsp;</p>
<p>在实际运用中，要看表的大小来选择同步方案，如果表较小则用第一种方案是最好的，如果表较大，则第三种是最佳方案。</p>
<p>&nbsp;</p>
<p>鉴于这是一个解决方案的文章，索性把方案说到具体的技术实现层面上来。</p>
<p><span style="color: #0000ff"><span style="color: #0000ff">案例中的A需要将表数据传送给B，这个如何实现呢？</span></span></p>
<p>实际中的情形通常是这两个网络都不会开放除了网站80之外的其他端口给外网调用，而且方案中都需要有一个程序每隔一段时间扫描一次数据库看是否有需要同步的数据，综合这些情况，可以很容易想到用win Service+ web Service的方式解决。</p>
<p>而笔者推荐用win service+remoting的方式来做，据测试，使用remoting比web Service方式快7－8倍。不过两者都有传送包大小的限制，所以传送数据的时候最好分批此来传，一次100或者1000条，以免因为数据包超过大小而同步失败。</p>
<p>&nbsp;</p>
<p>如果熟悉.Net的Remoting（或Webservice）、WinService技术的人，肯定知道winService如何与remoting通讯，看到这里肯定也知道怎么实现了。由于这是一篇关于解决方案的文章，所以具体技术方面的基础知识就不详述了，望此篇对大家有所帮助。有更好的方案欢迎留言交流。</p>
<p>&nbsp;</p>
<img src ="http://www.cnblogs.com/tuyile006/aggbug/1313652.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47949/" target="_blank">Silverlight开发大赛奖金高达10000美元</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>C#中自定义属性的例子</title><link>http://www.cnblogs.com/tuyile006/archive/2008/10/05/1304041.html</link><dc:creator>小y</dc:creator><author>小y</author><pubDate>Sat, 04 Oct 2008 20:11:00 GMT</pubDate><guid>http://www.cnblogs.com/tuyile006/archive/2008/10/05/1304041.html</guid><wfw:comment>http://www.cnblogs.com/tuyile006/comments/1304041.html</wfw:comment><comments>http://www.cnblogs.com/tuyile006/archive/2008/10/05/1304041.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/tuyile006/comments/commentRss/1304041.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/tuyile006/services/trackbacks/1304041.html</trackback:ping><description><![CDATA[<p><strong>自定义属性的作用</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 有时候我们需要给一个类或者类中的成员加上一些属性或者附加信息，让类或者变量的功能更明确可控制的细粒度更高，打个简单的比方：数据库里面的一张表，表中的每一个字段都有很多属性，如是否主键，默认值，注释信息等等，我们在编写实体类的时候，如何表示这些信息呢？通过自定义属性可以实现。</p>
<p><strong>自定义属性的实现步骤</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我说了不算，权威说了算：</p>
<ol>
    <li><font face="Verdana">声明一个类，并将 AttributeUsageAttribute 属性应用到该类中。类的名称即为新属性的名称</font> <font face="Verdana"></li>
    <li>声明该类从 System.Attribute 继承：</li>
    <li>定义 Private 字段来存储属性值：</li>
    <li>需要时，请为属性创建构造函数：</li>
    <li>为属性 (Attribute) 定义方法、字段和属性 (Property)：</font> </li>
</ol>
<p>&nbsp;实例一个：</p>
<p><span style="color: #993300"><strong>属性类（和相关枚举）</strong></span></p>
<div class="cnblogs_code" style="width: 825px; height: 1528px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;summary&gt;</span><span style="color: #008000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;数据库字段的用途。<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;/summary&gt;</span><span style="color: #808080"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">enum</span><span style="color: #000000">&nbsp;EnumDBFieldUsage<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;summary&gt;</span><span style="color: #008000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;未定义。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;/summary&gt;</span><span style="color: #808080"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;None&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0x00</span><span style="color: #000000">,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;summary&gt;</span><span style="color: #008000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;用于主键。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;/summary&gt;</span><span style="color: #808080"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PrimaryKey&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0x01</span><span style="color: #000000">,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;summary&gt;</span><span style="color: #008000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;用于唯一键。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;/summary&gt;</span><span style="color: #808080"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UniqueKey&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0x02</span><span style="color: #000000">,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;summary&gt;</span><span style="color: #008000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;由系统控制该字段的值。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;/summary&gt;</span><span style="color: #808080"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BySystem&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0x04</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;[AttributeUsage(AttributeTargets.Property,&nbsp;Inherited&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">)]<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;DBFieldAttribute:Attribute<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EnumDBFieldUsage&nbsp;m_usage;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;m_strFieldName;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;m_strDescription;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">object</span><span style="color: #000000">&nbsp;m_defaultValue;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;DBFieldAttribute(</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;strFieldName,</span><span style="color: #0000ff">object</span><span style="color: #000000">&nbsp;defaultValue,EnumDBFieldUsage&nbsp;usage,</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;strDescription)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_strFieldName&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;strFieldName;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_defaultValue&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;defaultValue;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_usage&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;usage;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_strDescription&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;strDescription;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;DBFieldAttribute(</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;fieldName)&nbsp;:&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">(fieldName,</span><span style="color: #0000ff">null</span><span style="color: #000000">,&nbsp;EnumDBFieldUsage.None,</span><span style="color: #0000ff">null</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;DBFieldAttribute(</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;fieldName,&nbsp;EnumDBFieldUsage&nbsp;usage)&nbsp;:&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">(fieldName,&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">,usage,&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;获取该成员映射的数据库字段名称。</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;FieldName<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">get</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;m_strFieldName;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">set</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_strFieldName&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;value;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;获取该字段的默认值</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">object</span><span style="color: #000000">&nbsp;DefaultValue<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">get</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;m_defaultValue;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">set</span><span style="color: #000000">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_defaultValue&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;value;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
<p>&nbsp;</p>
<p>此代码说明了如何制作自定义属性类。其实跟一般的类的区别就是此类继承自<font face="Verdana">Attribute，</font>加上<font face="Verdana">AttributeUsage是属性上的属性，是可选的。</font></p>
<p><span style="color: #993300"><span style="color: #993300"><strong>&nbsp;</strong></span></span></p>
<p><span style="color: #993300"><span style="color: #993300"><strong>数据访问层实体类：</strong></span></span></p>
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;DalObj<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;m_strTableName;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;m_nID;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;m_strName;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;m_password;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;DalObj(</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;strTableName)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_strTableName&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;strTableName;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[DBField(</span><span style="color: #800000">"</span><span style="color: #800000">id</span><span style="color: #800000">"</span><span style="color: #000000">,EnumDBFieldUsage.PrimaryKey)]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;ID<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">get</span><span style="color: #000000">&nbsp;{&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;m_nID;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">set</span><span style="color: #000000">&nbsp;{&nbsp;m_nID&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;value;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[DBField(</span><span style="color: #800000">"</span><span style="color: #800000">name</span><span style="color: #800000">"</span><span style="color: #000000">,DefaultValue</span><span style="color: #000000">=</span><span style="color: #800000">"</span><span style="color: #800000">游客</span><span style="color: #800000">"</span><span style="color: #000000">)]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;Name<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">get</span><span style="color: #000000">&nbsp;{&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;m_strName;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">set</span><span style="color: #000000">&nbsp;{&nbsp;m_strName&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;value;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[DBField(</span><span style="color: #800000">"</span><span style="color: #800000">pwd</span><span style="color: #800000">"</span><span style="color: #000000">)]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;PassWord<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">get</span><span style="color: #000000">&nbsp;{&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;m_password;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">set</span><span style="color: #000000">&nbsp;{&nbsp;m_password&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;value;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
<p>&nbsp;</p>
<p>此代码说明了如何使用自定义的属性。有两点需要注意的地方</p>
<p>第一：类名可以跟自定义的类名一样，也可以加上或减去后面的<font face="Verdana">Attribute</font>，本例子中就是使用的时候跟自定义的类名减少了&#8220;<font face="Verdana">Attribute</font>&#8221;。</p>
<p>第二：属性参数填写方法，如果自定义属性类（例子中DBFieldAttribute）自己的构造函数带参数，那么这些参数是必选的，可以重载构造函数以满足不同组合，必选参数填完之后，可以继续给自定义属性类中的公共成员带命名地赋值，如例子中的 <font face="Verdana">DefaultValue="游客" 一句就是命名参数。</font></p>
<p><span style="color: #993300"><strong></strong></span>&nbsp;</p>
<p><span style="color: #993300"><strong>遍历自定义属性的代码：</strong></span></p>
<div class="cnblogs_code" style="width: 859px; height: 283px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DalObj&nbsp;dalObj&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;DalObj(</span><span style="color: #800000">"</span><span style="color: #800000">users</span><span style="color: #800000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringBuilder&nbsp;sb&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;StringBuilder();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">foreach</span><span style="color: #000000">&nbsp;(PropertyInfo&nbsp;proInfo&nbsp;</span><span style="color: #0000ff">in</span><span style="color: #000000">&nbsp;dalObj.GetType().GetProperties())<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">object</span><span style="color: #000000">[]&nbsp;attrs&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;proInfo.GetCustomAttributes(</span><span style="color: #0000ff">typeof</span><span style="color: #000000">(DBFieldAttribute),&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(attrs.Length&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">1</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DBFieldAttribute&nbsp;attr&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(DBFieldAttribute)attrs[</span><span style="color: #800080">0</span><span style="color: #000000">];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.Append(attr.FieldName&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">:</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;(attr.DefaultValue&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">?</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">null</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;:&nbsp;attr.DefaultValue.ToString())&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">\r\n</span><span style="color: #800000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show(sb.ToString());</span></div>
<p>&nbsp;</p>
<p>此代码说明了如何检索自定义属性的值，主要用到了GetCustomAttributes来获取属性值。</p>
<p>&nbsp;</p>
<img src ="http://www.cnblogs.com/tuyile006/aggbug/1304041.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47947/" target="_blank">微软告攒机商第一案胜诉</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>IDataReader.GetSchemaTable 和 DataTable.Clone的区别</title><link>http://www.cnblogs.com/tuyile006/archive/2008/10/05/1304010.html</link><dc:creator>小y</dc:creator><author>小y</author><pubDate>Sat, 04 Oct 2008 18:07:00 GMT</pubDate><guid>http://www.cnblogs.com/tuyile006/archive/2008/10/05/1304010.html</guid><wfw:comment>http://www.cnblogs.com/tuyile006/comments/1304010.html</wfw:comment><comments>http://www.cnblogs.com/tuyile006/archive/2008/10/05/1304010.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cnblogs.com/tuyile006/comments/commentRss/1304010.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/tuyile006/services/trackbacks/1304010.html</trackback:ping><description><![CDATA[<p>本篇的主角是<font face="Verdana">IDataReader.GetSchemaTable</font>，顺便提及容易与之混淆的DataTable.Clone方法。</p>
<p><span style="color: #800000"><strong><span style="color: #800000"><span style="color: #993300"><span style="color: #993300">一、IDataReader.GetSchemaTable</span></span></span></strong></span> </p>
<p>功能：返回一个 DataTable，它描述 IDataReader 的列元数据。</p>
<p>如有表mbr_grade<font face="Verdana"></p>
<p>&nbsp;</p>
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000">CREATE&nbsp;TABLE&nbsp;`mbr_grade`&nbsp;(<br />
&nbsp;&nbsp;`grade_id`&nbsp;tinyint(</span><span style="color: #800080">3</span><span style="color: #000000">)&nbsp;unsigned&nbsp;NOT&nbsp;NULL&nbsp;auto_increment&nbsp;COMMENT&nbsp;</span><span style="color: #800000">'</span><span style="color: #800000">瓶主等级ID</span><span style="color: #800000">'</span><span style="color: #000000">,<br />
&nbsp;&nbsp;`grade_nm`&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">(</span><span style="color: #800080">32</span><span style="color: #000000">)&nbsp;NOT&nbsp;NULL&nbsp;</span><span style="color: #0000ff">default</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">''</span><span style="color: #000000">&nbsp;COMMENT&nbsp;</span><span style="color: #800000">'</span><span style="color: #800000">瓶主等级描述</span><span style="color: #800000">'</span><span style="color: #000000">,<br />
&nbsp;&nbsp;`min_follows`&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">(</span><span style="color: #800080">10</span><span style="color: #000000">)&nbsp;unsigned&nbsp;NOT&nbsp;NULL&nbsp;</span><span style="color: #0000ff">default</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">'</span><span style="color: #800000">0</span><span style="color: #800000">'</span><span style="color: #000000">&nbsp;COMMENT&nbsp;</span><span style="color: #800000">'</span><span style="color: #800000">最小关注者数量</span><span style="color: #800000">'</span><span style="color: #000000">,<br />
&nbsp;&nbsp;`max_follows`&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">(</span><span style="color: #800080">10</span><span style="color: #000000">)&nbsp;unsigned&nbsp;NOT&nbsp;NULL&nbsp;</span><span style="color: #0000ff">default</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">'</span><span style="color: #800000">4294967295</span><span style="color: #800000">'</span><span style="color: #000000">&nbsp;COMMENT&nbsp;</span><span style="color: #800000">'</span><span style="color: #800000">最大关注者数量</span><span style="color: #800000">'</span><span style="color: #000000">,<br />
&nbsp;&nbsp;`given_coin`&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">(</span><span style="color: #800080">10</span><span style="color: #000000">)&nbsp;unsigned&nbsp;NOT&nbsp;NULL&nbsp;</span><span style="color: #0000ff">default</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">'</span><span style="color: #800000">0</span><span style="color: #800000">'</span><span style="color: #000000">&nbsp;COMMENT&nbsp;</span><span style="color: #800000">'</span><span style="color: #800000">每月赠送津贴</span><span style="color: #800000">'</span><span style="color: #000000">,<br />
&nbsp;&nbsp;`mth_clean`&nbsp;tinyint(</span><span style="color: #800080">3</span><span style="color: #000000">)&nbsp;unsigned&nbsp;NOT&nbsp;NULL&nbsp;</span><span style="color: #0000ff">default</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">'</span><span style="color: #800000">1</span><span style="color: #800000">'</span><span style="color: #000000">&nbsp;COMMENT&nbsp;</span><span style="color: #800000">'</span><span style="color: #800000">是否仅限当月使用有效，赠送帐号余额月末清零</span><span style="color: #800000">'</span><span style="color: #000000">,<br />
&nbsp;&nbsp;PRIMARY&nbsp;KEY&nbsp;&nbsp;(`grade_id`)<br />
)&nbsp;ENGINE</span><span style="color: #000000">=</span><span style="color: #000000">MyISAM&nbsp;DEFAULT&nbsp;CHARSET</span><span style="color: #000000">=</span><span style="color: #000000">gbk;</span></div>
<p>&nbsp;</p>
<p>使用<font face="Verdana">IDataReader.GetSchemaTable</font>的代码：</p>
<div class="cnblogs_code" style="width: 917px; height: 241px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MySqlConnection&nbsp;con&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;MySqlConnection(</span><span style="color: #800000">"</span><span style="color: #800000">Data&nbsp;Source=localhost;User&nbsp;ID=root;Password=***;DataBase=test;Allow&nbsp;Zero&nbsp;Datetime=true;Charset=gbk;</span><span style="color: #800000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MySqlCommand&nbsp;com&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;MySqlCommand(</span><span style="color: #800000">"</span><span style="color: #800000">select&nbsp;*&nbsp;from&nbsp;mbr_grade&nbsp;where&nbsp;1=0</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;con);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;con.Open();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MySqlDataReader&nbsp;reader&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;com.ExecuteReader();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(reader</span><span style="color: #000000">!=</span><span style="color: #0000ff">null</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataTable&nbsp;dt&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;reader.GetSchemaTable();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dt.PrimaryKey&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;DataColumn[]&nbsp;{&nbsp;dt.Columns[</span><span style="color: #800000">"</span><span style="color: #800000">ColumnName</span><span style="color: #800000">"</span><span style="color: #000000">]&nbsp;};<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataGridView1.DataSource&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;dt.DefaultView;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
<p></font>结果：</p>
<p><img height="156" alt="" src="http://www.cnblogs.com/images/cnblogs_com/tuyile006/getschema.jpg" width="845" border="0" /></p>
<p>很明显，返回的datatable是固定框架，每一列的列名都是固定的。而每一行则是数据库实体表的列。</p>
<p>这个函数可以动态获取数据库表结构，比如表的主键，每一列的类型等信息，这样就很方便在数据层做一个通用的数据访问类了。</p>
<p>&nbsp;</p>
<p style="color: #993300"><strong>二、DataTable.Clone方法</strong></p>
<p>功能：克隆 DataTable 的结构，包括所有 DataTable 架构和约束。<br />
<br />
这个方法也是获取dataTable的结构，跟<font face="Verdana">IDataReader.GetSchemaTable</font>有何区别呢？</p>
<p>同样用上面的表结构做例子，我们试验一下Clone方法。</p>
<div class="cnblogs_code" style="width: 906px; height: 262px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MySqlConnection&nbsp;con&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;MySqlConnection(</span><span style="color: #800000">"</span><span style="color: #800000">Data&nbsp;Source=localhost;User&nbsp;ID=root;Password=admin;DataBase=test;Allow&nbsp;Zero&nbsp;Datetime=true;Charset=gbk;</span><span style="color: #800000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MySqlCommand&nbsp;com&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;MySqlCommand(</span><span style="color: #800000">"</span><span style="color: #800000">select&nbsp;*&nbsp;from&nbsp;mbr_grade</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;con);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;con.Open();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MySqlDataReader&nbsp;reader&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;com.ExecuteReader(CommandBehavior.CloseConnection);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(reader&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataTable&nbsp;dt&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;DataTable(</span><span style="color: #800000">"</span><span style="color: #800000">mydt</span><span style="color: #800000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dt.Load(reader);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataTable&nbsp;dtClone&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;dt.Clone();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataGridView1.DataSource&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;dtClone.DefaultView;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
<p><br />
返回的结果如下图：</p>
<p><img height="59" alt="" src="http://www.cnblogs.com/images/cnblogs_com/tuyile006/dtClone.jpg" width="627" border="0" /></p>
<p>只是返回了一个空的表而已，而不是表的信息数据。</p>
<p>区别很明显吧，<font face="Verdana">IDataReader.GetSchemaTable</font>是一个非常有用的函数，要想拥有强大而几近万能的数据层类，缺它不可。</p>
<img src ="http://www.cnblogs.com/tuyile006/aggbug/1304010.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47947/" target="_blank">微软告攒机商第一案胜诉</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item></channel></rss>