﻿<?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>博客园-专注.Net的...魔鬼</title><link>http://www.cnblogs.com/flyskywlh/</link><description /><language>zh-cn</language><lastBuildDate>Wed, 08 Oct 2008 10:23:19 GMT</lastBuildDate><pubDate>Wed, 08 Oct 2008 10:23:19 GMT</pubDate><ttl>60</ttl><item><title>分布式事务的点滴</title><link>http://www.cnblogs.com/flyskywlh/archive/2008/02/14/1068588.html</link><dc:creator>Flyskywlh</dc:creator><author>Flyskywlh</author><pubDate>Thu, 14 Feb 2008 04:04:00 GMT</pubDate><guid>http://www.cnblogs.com/flyskywlh/archive/2008/02/14/1068588.html</guid><wfw:comment>http://www.cnblogs.com/flyskywlh/comments/1068588.html</wfw:comment><comments>http://www.cnblogs.com/flyskywlh/archive/2008/02/14/1068588.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnblogs.com/flyskywlh/comments/commentRss/1068588.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/flyskywlh/services/trackbacks/1068588.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 年前一个项目中涉及到了两个数据库,为了保证业务功能的完整性,数据一致性,最终选用分布式事务来实现。<br />
<br />
&nbsp;&nbsp;&nbsp; 分布式事务：.NET Framework中可以依靠MTS/COM+服务来支持自动事务操作。COM+使用DTC(Microsoft
Distribution Transaction
Coordinator)作为事务管理器和事务协调器在分布式环境中运行事务，这样就可以使.NET来跨越多个资源进行操作了用程序引用COM+的方式来控制不同数据库的事务。<br />
<br />
&nbsp;&nbsp;&nbsp; 步骤：<br />
&nbsp;&nbsp;&nbsp; 1.新建类项目，加入引用System.EnterpriseServices.dll<br />
&nbsp;&nbsp;&nbsp; 2.完成需要用到分布式事务的业务类。<br />
&nbsp;&nbsp;&nbsp; 其中，需using System.EnterpriseServices;<br />
&nbsp;&nbsp;&nbsp; 类必须继承ServicedComponent<br />
&nbsp;&nbsp;&nbsp; Function前加&nbsp; [AutoComplete]<br />
&nbsp;&nbsp;&nbsp; 用异常处理来结束事务，使其回滚.比如判断某个值为false时，throw new exception()来回滚事务<br />
<br />
<br />
&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />
&nbsp;&nbsp;&nbsp; /// 创建订单的业务组件<br />
&nbsp;&nbsp;&nbsp; /// 建立一个订单需要一个分布式事务,<br />
&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp; [Transaction(System.EnterpriseServices.TransactionOption.Required)]<br />
&nbsp;&nbsp;&nbsp; [ClassInterface(ClassInterfaceType.AutoDispatch)]<br />
&nbsp;&nbsp;&nbsp; [ObjectPooling(MinPoolSize=4, MaxPoolSize=4)]<br />
&nbsp;&nbsp;&nbsp; public class OrderInsert : ServicedComponent {<br />
<br />
/// &lt;summary&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /// 现场销售时<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /// &lt;param name="order"&gt;&lt;/param&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /// &lt;returns&gt;&lt;/returns&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; [AutoComplete]<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public int InsertDirectSale(OrderInfo order)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br />
// 判断操作过程中是否发生错误<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (rdr.GetInt32(0) != 0)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; throw new Exception("插入订单时出现数据完整性异常 - 回滚 ISSUED");<br />
}<br />
<br />
}<br />
<br />
3.需要注意的是使用COM+组件的Dotnet项目必须为强命名类型，因此完成下列步骤<br />
&nbsp;&nbsp;&nbsp; 1）用SN.exe工具生成一个相对于当前项目的文件，如Order.snk<br />
&nbsp;&nbsp;&nbsp; 打开SDK Command Prompt或者VS2003/vs2005中的Visual Studio 2005 Command Prompt.而不是windows的cmd ,进入项目的obj\Debug\，输入sn -k Order.snk,得到snk文件，然后必须要对Assembly设置一些必须的属性以确保它能够被正确的注册为COM+服务。<br />
对项目里的AssemblyInfo.cs文件作如下修改,其中，AssemblyKeyFile里的路径是对应刚才生成的snk文件保存在项目的位置 （..\..\表示在项目根目录）。<br />
<br />
using System.Reflection;<br />
using System.Runtime.CompilerServices;<br />
using System.EnterpriseServices;<br />
[assembly: AssemblyVersion("1.0.0.1")]<br />
[assembly: AssemblyDelaySign(false)]<br />
[assembly: AssemblyKeyFile(@"..\..\Order.snk")]<br />
[assembly: ApplicationName("HQ3 Shop")]<br />
[assembly: ApplicationAccessControl(false, Authentication=AuthenticationOption.None)]<br />
<br />
再次编译项目，如果通过，就说明生成成功。<br />
<br />
4.在业务功能类完成，项目编译成功后，我们的工作只完成了一半。下面布署分布式事务环境。<br />
在发布网站后，必须在Visual Studio 2005 Command Prompt下用regsvcs Order.dll将DLL组建注册为COM+服务，这样才能进行分布式事务的正常使用。<br />
很重要的一点，如果你的类里有引用了其它一些DLL，那么这些DLL也必须是强命名，必须用gacutil.exe：全局程序集缓存工具加到全局程序集缓存中。否则Order.dlL将注册不成功。<br />
<br />
5.在使用分布式事务时如果不做一些配置，很可能会出现各种各样的错误。下面引用http://www.x2blog.cn/jinhong618/?tid=12688下的文章，文章中讲述了几种出错情况及处理方法。<br />
作为补充，提供一个工具来测试使分布事环境中的所有机器是否联通（必须以机器名PING通才说明机器连通）。<br />
下载MS提供的DTCPing.exe 分装在两台机上,按README说明来运行它.看出错信息. <br />
<a href="http://download.microsoft.com/download/complus/msdtc/1.7/nt45/en-us/DTCPing.exe"><strong><font color="#006bad">http://download.microsoft.com/download/complus/msdtc/1.7/nt45/en-us/DTCPing.exe</font></strong></a><br />
<br />
请参考以下文章：<br />
http://www.x2blog.cn/jinhong618/?tid=12688<br />
http://www.cnblogs.com/finejob/archive/2007/09/17/895671.html<br />
http://www.cnblogs.com/sadier/archive/2004/12/15/77452.html<br />
http://www.builder.com.cn/2007/1002/533285.shtml<br />
<br />
<br />
<br />
<br />
<br />
<br />
<img src ="http://www.cnblogs.com/flyskywlh/aggbug/1068588.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42855/" target="_blank">[新闻]全屏触摸力反馈 黑莓Storm发布</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>Windows 2003 Server 中DOTNET程序访问COM组件~~~</title><link>http://www.cnblogs.com/flyskywlh/archive/2006/07/07/445508.html</link><dc:creator>Flyskywlh</dc:creator><author>Flyskywlh</author><pubDate>Fri, 07 Jul 2006 11:17:00 GMT</pubDate><guid>http://www.cnblogs.com/flyskywlh/archive/2006/07/07/445508.html</guid><wfw:comment>http://www.cnblogs.com/flyskywlh/comments/445508.html</wfw:comment><comments>http://www.cnblogs.com/flyskywlh/archive/2006/07/07/445508.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/flyskywlh/comments/commentRss/445508.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/flyskywlh/services/trackbacks/445508.html</trackback:ping><description><![CDATA[<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 今天挺高兴，项目终于上线使用。只是上线之前遇到的问题折磨得人精疲力尽。。。不过总算解决了。。在这把问题说出来，希望对有需要的朋友提供些帮助~~&nbsp;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 项目：DOTNET项目，C#开发，主要功能是通过COM组件访问远程接口。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 运行环境：Windows 2003 Server + IIS6.0 + .Net 1.1<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 问题：COM组件及系统在WINDOWS2000操作系统下都能正常使用，但迁移到WIN2003下，在程序调用组件时进程卡住了，有时会返回服务器出现意外情况的错误~<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 原因分析：首先，组件在其它操作系统下通过，说明组件应该没问题；注册COM组件及DOTNET项目引用方法均正确，而错误出现在调用组件这一步，而COM组件的功能就是通过IP地址及端口访问远程接口，这里注意有一个远程网络连接的工作；上网搜索类似问题，大部分文章都是组件的权限问题，我也根据文章所写设置了组件，IIS访问用户等的权限，都给予了最大权限，结果还是不行。。快崩溃了。。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 解决方法：被这个问题折磨了几天之后，公司联系了微软客户支持，micro给了个方法，查看下IIS6.0里的应用程序池的安全性权限。查看了下，在IIS里的应用程序池属性中，&#8220;标识&#8221;标签下有个默认的安全性帐户&#8220;网络服务&#8221;即NetWork Service。Network Service 是 Windows Server 2003 中的内置帐户，其属于IIS_WPG 组，IIS_WPG 的成员具有适当的 NTFS 权限和必要的用户权限，按微软网站上的文章所说，Network Service 帐户具有充当 IIS 6 工作进程的进程标识的充足权限，以及具有访问网络的权限。但不知道为什么，这里的NetWork Service权限不够，造成不能调用组件访问远程接口。解决的方法就是将IIS_WPG帐户设置为读取与执行、列出文件夹目录、读取，而NETWORK SERVICE则需要完全控制权限。根据以上方法，我把NetWork Service赋于到Administrator组 ^_||&nbsp; ，重启IIS，再运行程序，OK，正常调用组件了~~<br><br>因此如果有朋友再有碰到调用COM组件不能用时，考虑一下应用程序池的权限~~<br><br>参考以下文章： <a href="http://www.microsoft.com/china/technet/community/columns/insider/iisi1203.mspx">http://www.microsoft.com/china/technet/community/columns/insider/iisi1203.mspx</a>
<img src ="http://www.cnblogs.com/flyskywlh/aggbug/445508.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42854/" target="_blank">[新闻]微软推出Touchless：无需触屏的触屏技术</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>ORACLE8I转换数据到SQL SERVER~~~~</title><link>http://www.cnblogs.com/flyskywlh/archive/2006/07/07/445443.html</link><dc:creator>Flyskywlh</dc:creator><author>Flyskywlh</author><pubDate>Fri, 07 Jul 2006 09:32:00 GMT</pubDate><guid>http://www.cnblogs.com/flyskywlh/archive/2006/07/07/445443.html</guid><wfw:comment>http://www.cnblogs.com/flyskywlh/comments/445443.html</wfw:comment><comments>http://www.cnblogs.com/flyskywlh/archive/2006/07/07/445443.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnblogs.com/flyskywlh/comments/commentRss/445443.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/flyskywlh/services/trackbacks/445443.html</trackback:ping><description><![CDATA[&nbsp;
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>最近做一个项目的</span><span>DOTNET</span><span>版</span><span>,</span><span>说是升级</span><span>,</span><span>从</span><span>ASP</span><span>升为</span><span>DOTNET,</span><span>可因为项目架构原因</span><span>,</span><span>数据库得从</span><span>ORACLE</span><span>转为</span><span>SQL SERVER...^_|| ,</span><span>之前未使用过</span><span>ORACLE,</span><span>转换数据过程中碰到了不小的麻烦。</span><span><br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>这中间过程之痛苦不再赘述</span><span>,</span><span>直接讲我导数据流程及遇到的问题</span><span>.</span><span>如有讲错的地方</span><span>,</span><span>请大家指教</span><span>~~<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>一、前提：</span> <span>因为我是从</span><span>ORACLE</span><span>数据库服务器导出到目的机器</span><span>,</span><span>所以首先在目的机器上安装</span><span>ORACLE</span><span>同一版本的客户端</span><span>,</span><span>这样做是为了在用</span><span>MSSQL</span><span>导入数据时能选择</span><span>ORACLE</span><span>数据源。接下来我做的这个动作不知是否是必须的：</span><span>ORACLE</span><span>程序菜单中</span><span>-&gt;net manage</span><span>增加一个服务命名，填入源机器所在</span><span>ORACLE</span><span>库服务名，主机名。<br></span><span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>二、在目的机器上安装了</span><span>PL/SQL Devloper 7 </span><span>，填入登录源数据库的用户名，密码，选择数据库，登入</span><span>OK</span><span>，这步主要查看</span><span>ORACLE</span><span>数据库，为了知道哪些表或其它元素需要导出，并作参考。<br></span><span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>三、具体工作来了。。</span><span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (1)</span><span>表：如果只需要导出表结构，用</span><span>PL/SQL Devloper --&gt;Tools --&gt;Export Tables,</span><span>选择表，填入文件名，导出。</span><span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>存储过程，视图，函数：用</span><span>PL/SQL Devloper --&gt;Tools --&gt;Export User Objects ,</span><span>选择对象，填入文件名导出。</span><span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (2)</span><span>以上</span><span>SQL</span><span>文件导完，因</span><span>PLSQL</span><span>和</span><span>SQL</span><span>的些许不同，花了点心思把它们改成</span><span>SQLSERVER</span><span>上可以执行的语句，在</span><span>MSSQL</span><span>的查询分析器中执行生成。</span><span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (3)</span><span>导出表结构及数据：在目的机器上数据源管理器中新建一个系统</span><span>DSN</span><span>或文件</span><span>DSN</span><span>，选择</span><span>ORACLE ODBC DRIVER </span><span>，数据源名称和说明随便填，服务名及用户</span><span>ID</span><span>填</span><span>ORACLE</span><span>源数据库相应的服务名。</span> <span>然后运行</span><span>MSSQL -&gt;</span><span>导入导出工具</span><span>-&gt;</span><span>选择源数据中选择</span><span>&#8221;</span><span>其它（</span><span>ODBC</span><span>数据源）</span><span>&#8221;</span><span>，选择刚才建的系统</span><span>DSN</span><span>或文件</span><span>DSN</span><span>，填入登录</span><span>ORACLE</span><span>库的用户名，密码，进入；接下来的选择目标源动作就和</span><span>MSSQL</span><span>自己的导入数据操作是一样了。。。导完之后，记得更改相应的字段类型，默认值等等。。</span><span><br><br>ORACLE</span><span>到</span><span>SQLSERVER</span><span>需要注意的有：</span><span><br>(1)</span><span>表中字段类型的变化，</span><span>number </span><span>变为</span><span>float</span><span>，</span><span>varchar2</span><span>变为</span><span>varchar</span><span>；</span><span><br>(2)ORACLE</span><span>中没有设置自增字段，有需要用到时，它是在</span><span>sequence</span><span>中建一个</span><span>sequence</span><span>，所以得查找</span><span>ORACLE</span><span>表中是否有这种对应，从而在</span><span>MSSQL</span><span>中设置自增字段。</span><span><br>(3)</span><span>在导出表结构及数据中碰到了个问题：选择数据源时，我选中了系统</span><span>DSN</span><span>，填入用户名密码，点下一步时，弹出了个错误窗口，提示：</span><span>oci.dll</span><span>找不到指定的模块，点确定后提示用户名密码错误。。。上网搜索了</span><span>N</span><span>久，才找出解决方法：</span><span>(1)ORACLE9i</span><span>以上</span><span>.Net Manager-&gt;</span><span>本地</span><span>-&gt;</span><span>概要文件</span><span>-&gt;ORACLE</span><span>高级安全性</span><span>-&gt;</span><span>验证</span><span>-&gt;</span><span>去掉</span><span>NTS</span><span>这一项</span><span>(</span><span>因为我使用的是</span><span>ORACLE8I</span><span>所以没试过这方法，但网上作者说可以</span><span>)</span><span>；</span><span>(2) </span><span>在</span><span>ORACLE</span><span>安装目录下搜索到</span><span>Sqlnet.ora</span><span>文件，加入一行</span><span>: sqlnet.authentication-services=(none)</span><span>保存，重启机器，再试下从</span><span>MSSQL</span><span>导入导出工具连接源机器，</span><span>OK</span><span>。</span></p>
<p><span>至此，</span><span>ORACLE</span><span>转</span><span>MSSQL</span><span>的工作大部分就完成了。。希望对大家有点帮助，欢迎回贴指点错误及另好的方法。</span><span>^_^<br></span></p>
<img src ="http://www.cnblogs.com/flyskywlh/aggbug/445443.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42854/" target="_blank">[新闻]微软推出Touchless：无需触屏的触屏技术</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>从WEB SERVICE 上返回大数据量的DATASET</title><link>http://www.cnblogs.com/flyskywlh/archive/2005/08/18/217382.html</link><dc:creator>Flyskywlh</dc:creator><author>Flyskywlh</author><pubDate>Thu, 18 Aug 2005 01:53:00 GMT</pubDate><guid>http://www.cnblogs.com/flyskywlh/archive/2005/08/18/217382.html</guid><wfw:comment>http://www.cnblogs.com/flyskywlh/comments/217382.html</wfw:comment><comments>http://www.cnblogs.com/flyskywlh/archive/2005/08/18/217382.html#Feedback</comments><slash:comments>31</slash:comments><wfw:commentRss>http://www.cnblogs.com/flyskywlh/comments/commentRss/217382.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/flyskywlh/services/trackbacks/217382.html</trackback:ping><description><![CDATA[<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><FONT size=2></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </FONT></SPAN><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><FONT size=2>前段时间在做一个项目的时候<SPAN lang=EN-US>,</SPAN>遇到了要通过<SPAN lang=EN-US>WEB SERVICE</SPAN>从服务器上返回数据量比较大的<SPAN lang=EN-US>DATASET,当然，除了显示在页面上以外，有可能还要用这些数据在客户端进行其它操作。</SPAN>查遍了网站的文章<SPAN lang=EN-US>,</SPAN>问了一些朋友<SPAN lang=EN-US>,</SPAN>也找了一些解决方法</FONT><FONT size=2><SPAN lang=EN-US>.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>众所周知<SPAN lang=EN-US>,</SPAN>如果不用其它方法<SPAN lang=EN-US>,</SPAN>直接从<SPAN lang=EN-US>WEB SERVICE</SPAN>上传回一个<SPAN lang=EN-US>10W</SPAN>条记录的<SPAN lang=EN-US>DATASET,</SPAN>可想而知的后果是什么<SPAN lang=EN-US>,CPU</SPAN>要占用<SPAN lang=EN-US> 100%,</SPAN>且要等上几分钟<SPAN lang=EN-US>,</SPAN>这是任何一个项目都无法忍受的<SPAN lang=EN-US>.</SPAN>在我上网找资料的过程中<SPAN lang=EN-US>,</SPAN>试验了几种不同的方法<SPAN lang=EN-US>,</SPAN>如<SPAN lang=EN-US style="BACKGROUND: white; COLOR: deeppink"><A href="http://www.chinacs.net/archives/11/2004/08/10/2155.html"><FONT color=#ff1493><SPAN lang=EN-US><SPAN lang=EN-US>通过压缩</SPAN></SPAN>SOAP<SPAN lang=EN-US><SPAN lang=EN-US>改善</SPAN></SPAN>XML Web service<SPAN lang=EN-US><SPAN lang=EN-US>性能</SPAN></SPAN></FONT></A>,</SPAN></FONT><SPAN style="BACKGROUND: white; COLOR: black"><FONT size=2>这篇文章所介绍的方法用了<SPAN lang=EN-US>SOAP</SPAN>扩展<SPAN lang=EN-US>,</SPAN>是通过在<SPAN lang=EN-US>WEB SERVICE</SPAN>端用已经过时了的<SPAN lang=EN-US>NZIPLIB</SPAN>库来压缩<SPAN lang=EN-US>SOAP</SPAN>响应<SPAN lang=EN-US>,</SPAN>据称文本压缩率可达<SPAN lang=EN-US>80%.</SPAN>文章里面的代码是<SPAN lang=EN-US>VB.NET</SPAN>的<SPAN lang=EN-US>,</SPAN>费了好大劲翻译成<SPAN lang=EN-US>C#</SPAN>的<SPAN lang=EN-US>,</SPAN>照上面建项目<SPAN lang=EN-US>,</SPAN>但是很可惜<SPAN lang=EN-US>,</SPAN>我没有编译成功<SPAN lang=EN-US>,</SPAN>总是出错</FONT><FONT size=2><SPAN lang=EN-US>.<BR></SPAN>这里我找我建好的项目提供大家下载<SPAN lang=EN-US>,</SPAN>大家有时间看看是什么问题<SPAN lang=EN-US>. </SPAN></FONT></SPAN><SPAN lang=EN-US style="BACKGROUND: white; COLOR: deeppink"><A href="http://www.cnblogs.com/Files/flyskywlh/Oa_Sc压缩.rar"><FONT color=#ff1493 size=2>SOAP</FONT></A></SPAN><SPAN style="BACKGROUND: white; COLOR: deeppink"><A href="http://www.cnblogs.com/Files/flyskywlh/Oa_Sc压缩.rar"><FONT color=#ff1493 size=2>压缩代码下载</FONT></A><SPAN lang=EN-US><BR><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </FONT></SPAN></SPAN><SPAN style="BACKGROUND: white; COLOR: black"><FONT size=2>而后<SPAN lang=EN-US>,</SPAN>找到了用序列化的方式来减少网络传输量<SPAN lang=EN-US>,Microsoft .NET Framework 1.x </SPAN>中内建两种将物件序列化的<SPAN lang=EN-US> Formatter</SPAN>类别，<SPAN lang=EN-US>SoapFormatter </SPAN>和<SPAN lang=EN-US> BinaryFormatter,</SPAN>两种方式均能减轻网络传输量提高性能<SPAN lang=EN-US>,</SPAN>但<SPAN lang=EN-US>SoapFormatter</SPAN>方式传输的方式其实还是<SPAN lang=EN-US>XML</SPAN>形式，加了很多<SPAN lang=EN-US>XML</SPAN>标识，因此压缩率不是很理想，<SPAN lang=EN-US>BinaryFormatter</SPAN>用纯二进制的方式序列化<SPAN lang=EN-US>DATASET</SPAN>，能使压缩率大大提高，这是台湾作者李匡正<SPAN lang=EN-US> (</SPAN>台灣微軟應用架構技術經理提供的例子里对<SPAN lang=EN-US>SQL</SPAN>范例库<SPAN lang=EN-US>Northwind</SPAN>的测试结果： <SPAN lang=EN-US><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN></FONT></SPAN></SPAN></P>
<TABLE class=MsoNormalTable style="WIDTH: 100%; mso-cellspacing: 1.5pt" cellPadding=0 width="100%" border=1>
<TBODY>
<TR style="mso-yfti-irow: 0; mso-yfti-firstrow: yes">
<TD style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #d4d0c8; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #d4d0c8; BACKGROUND-COLOR: transparent">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><FONT size=2>　<SPAN lang=EN-US><o:p></o:p></SPAN></FONT></SPAN></P></TD>
<TD style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #d4d0c8; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #d4d0c8; BACKGROUND-COLOR: transparent">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><FONT size=2><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">SoapFormatter</SPAN><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">　<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></FONT></P></TD>
<TD style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #d4d0c8; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #d4d0c8; BACKGROUND-COLOR: transparent">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><FONT size=2><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">BinaryFormatter</SPAN><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">　<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></FONT></P></TD></TR>
<TR style="mso-yfti-irow: 1; mso-yfti-lastrow: yes">
<TD style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #d4d0c8; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #d4d0c8; BACKGROUND-COLOR: transparent">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><FONT size=2><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">Dataset </SPAN><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">序列化後<SPAN lang=EN-US> Bytes </SPAN>數　<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></FONT></P></TD>
<TD style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #d4d0c8; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #d4d0c8; BACKGROUND-COLOR: transparent">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><FONT size=2>1,953,078<o:p></o:p></FONT></SPAN></P></TD>
<TD style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 0.75pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; BORDER-LEFT: #d4d0c8; PADDING-TOP: 0.75pt; BORDER-BOTTOM: #d4d0c8; BACKGROUND-COLOR: transparent">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan" align=left><FONT size=2><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">1,448,399</SPAN><SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">　<SPAN lang=EN-US><o:p></o:p></SPAN></SPAN></FONT></P></TD></TR></TBODY></TABLE>
<P><SPAN style="FONT-SIZE: 12pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-bidi-font-family: 宋体; mso-ansi-language: EN-US; mso-bidi-language: AR-SA"><FONT size=2>很显示然<SPAN lang=EN-US>BinaryFormatter</SPAN>　明显优于<SPAN lang=EN-US>SoapFormatter</SPAN>　，而我也确实用了<SPAN lang=EN-US>BinaryFormatter</SPAN>　这种方式实现了提高效率.<BR></FONT><SPAN lang=EN-US><FONT size=2>再者，用微软提供的DataSetSurrogate 类可以此基础上进一步压缩数据大小，DataSetSurrogate 在.net 2.0里自带。这是比较结果.<BR></FONT>
<TABLE class=font3 width="100%" border=1>
<TBODY>
<TR>
<TD><FONT size=2>　</FONT></TD>
<TD><FONT size=2>SoapFormatter</FONT></TD>
<TD><FONT size=2>BinaryFormatter</FONT></TD></TR>
<TR>
<TD><FONT size=2>Dataset 序列化後Bytes數</FONT></TD>
<TD><FONT size=2>1,953,078</FONT></TD>
<TD><FONT size=2>1,448,399</FONT></TD></TR>
<TR>
<TD><FONT size=2>DataSetSurrogate 序列化後Bytes數</FONT></TD>
<TD><FONT size=2>2,371,942</FONT></TD>
<TD><FONT size=2>575,684</FONT></TD></TR></TBODY></TABLE><BR><BR><FONT size=2>在这里，有两种方式：可把序列化后的数据用文件形式保存在客户端硬盘；也可用Byte[]方式传回客户端，以下是代码。<BR><FONT color=#ff1493><STRONG>web service 端(文件形式)</STRONG></FONT><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><FONT size=2>
<DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
<DIV><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">&nbsp;&nbsp;[WebMethod(Description</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">循环获取远程DATASET</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">)]<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&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;SurrogateReadTable(</SPAN><SPAN style="COLOR: #0000ff">string</SPAN><SPAN style="COLOR: #000000">&nbsp;TableName)<BR><IMG id=Codehighlighter1_96_614_Open_Image onclick="this.style.display='none'; Codehighlighter1_96_614_Open_Text.style.display='none'; Codehighlighter1_96_614_Closed_Image.style.display='inline'; Codehighlighter1_96_614_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_96_614_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_96_614_Closed_Text.style.display='none'; Codehighlighter1_96_614_Open_Image.style.display='inline'; Codehighlighter1_96_614_Open_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_96_614_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.cnblogs.com/Images/dot.gif"></SPAN><SPAN id=Codehighlighter1_96_614_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">把DataSet通过Surrogate&nbsp;Class&nbsp;序列化成&nbsp;Binary&nbsp;Stream</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;DataSet&nbsp;ds;<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;ds</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">SqlHelper.ExecuteDataset(cnn,CommandType.Text,</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">select&nbsp;*&nbsp;from&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000">TableName);<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">实例化DataSetSurrogate,传取出的DATASET到构造函数里</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;sds&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;DataSetSurrogate(ds);&nbsp;<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">实例化二进制流</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;BinaryFormatter&nbsp;bf</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;BinaryFormatter();<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;StreamWriter&nbsp;swDat;&nbsp;<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">写到本地一个文件里</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;swDat&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;StreamWriter(</SPAN><SPAN style="COLOR: #000000">@"</SPAN><SPAN style="COLOR: #000000">c:\output_surrogate_dataset.dat</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;bf.Serialize(swDat.BaseStream,&nbsp;sds);<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">这里可以知道序列化后的文件的大小</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">long</SPAN><SPAN style="COLOR: #000000">&nbsp;size&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;swDat.BaseStream.Length;<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;swDat.Close();<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;}</SPAN></SPAN></DIV></DIV></FONT></SPAN><BR><FONT color=#ff1493>客户端</FONT></FONT><FONT color=#000000 size=2></P>
<DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
<DIV><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top><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;System.EventArgs&nbsp;e)<BR><IMG id=Codehighlighter1_64_564_Open_Image onclick="this.style.display='none'; Codehighlighter1_64_564_Open_Text.style.display='none'; Codehighlighter1_64_564_Closed_Image.style.display='inline'; Codehighlighter1_64_564_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_64_564_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_64_564_Closed_Text.style.display='none'; Codehighlighter1_64_564_Open_Image.style.display='inline'; Codehighlighter1_64_564_Open_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_64_564_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.cnblogs.com/Images/dot.gif"></SPAN><SPAN id=Codehighlighter1_64_564_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;label1.Text</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">DateTime.Now.ToString();<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;button1.Enabled</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #0000ff">false</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">反序列化Binary&nbsp;Stream能通过Surrogate&nbsp;Class转换成&nbsp;DataSet<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">从WEB&nbsp;SERVICE上读取方法</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;svs.SurrogateRead(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">t_busdocbase</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;BinaryFormatter&nbsp;bf</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;BinaryFormatter();<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;StreamReader&nbsp;swDat;&nbsp;<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;swDat&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(</SPAN><SPAN style="COLOR: #000000">@"</SPAN><SPAN style="COLOR: #000000">c:\output_surrogate_dataset.dat</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">object</SPAN><SPAN style="COLOR: #000000">&nbsp;o</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">bf.Deserialize(swDat.BaseStream);<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;DataSet&nbsp;ds;<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;sds&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;(DataSetSurrogate)&nbsp;o;<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;ds&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;sds.ConvertToDataSet();<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;dataGrid1.DataSource</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">ds.Tables[</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">];<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;swDat.Close();<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top></SPAN></DIV></DIV>
<P></FONT></SPAN></SPAN><SPAN style="FONT-SIZE: 12pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: 宋体; mso-fareast-language: ZH-CN; mso-bidi-font-family: 宋体; mso-ansi-language: EN-US; mso-bidi-language: AR-SA"><SPAN lang=EN-US><SPAN lang=EN-US style="FONT-SIZE: 12pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><FONT color=#ff1493 size=2><STRONG>web service 端(Byte[]方式)</STRONG></FONT><FONT color=#000000><FONT size=2><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><FONT size=2></P>
<DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
<DIV><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">[WebMethod(Description</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">获取业务资料远程DATASET</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">)]<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">byte</SPAN><SPAN style="COLOR: #000000">[]&nbsp;SurrogateRead1()<BR><IMG id=Codehighlighter1_86_420_Open_Image onclick="this.style.display='none'; Codehighlighter1_86_420_Open_Text.style.display='none'; Codehighlighter1_86_420_Closed_Image.style.display='inline'; Codehighlighter1_86_420_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_86_420_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_86_420_Closed_Text.style.display='none'; Codehighlighter1_86_420_Open_Image.style.display='inline'; Codehighlighter1_86_420_Open_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_86_420_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.cnblogs.com/Images/dot.gif"></SPAN><SPAN id=Codehighlighter1_86_420_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataSet&nbsp;ds;<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ds</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">SqlHelper.ExecuteDataset(cnn,CommandType.Text,</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">select&nbsp;*&nbsp;from&nbsp;t_busdocbase</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sds&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;DataSetSurrogate(ds);&nbsp;<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MemoryStream&nbsp;s</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;MemoryStream();<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BinaryFormatter&nbsp;bf&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;BinaryFormatter();<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bf.Serialize(s,sds);<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">byte</SPAN><SPAN style="COLOR: #000000">[]&nbsp;e&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;s.ToArray();<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000">&nbsp;e;&nbsp;<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top></SPAN></DIV></DIV>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"></FONT></SPAN><BR><FONT color=#ff1493>客户端</FONT></FONT></FONT><FONT color=#000000 size=2>&nbsp;&nbsp;&nbsp;</P>
<DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
<DIV><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #0000ff">private</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;button3_Click(</SPAN><SPAN style="COLOR: #0000ff">object</SPAN><SPAN style="COLOR: #000000">&nbsp;sender,&nbsp;System.EventArgs&nbsp;e)<BR><IMG id=Codehighlighter1_65_512_Open_Image onclick="this.style.display='none'; Codehighlighter1_65_512_Open_Text.style.display='none'; Codehighlighter1_65_512_Closed_Image.style.display='inline'; Codehighlighter1_65_512_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_65_512_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_65_512_Closed_Text.style.display='none'; Codehighlighter1_65_512_Open_Image.style.display='inline'; Codehighlighter1_65_512_Open_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</SPAN><SPAN id=Codehighlighter1_65_512_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.cnblogs.com/Images/dot.gif"></SPAN><SPAN id=Codehighlighter1_65_512_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;label1.Text</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">DateTime.Now.ToString();<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;button3.Enabled</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #0000ff">false</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">*反序列化Binary&nbsp;Stream能通过Surrogate&nbsp;Class转换成&nbsp;DataSet*/<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">从WEB&nbsp;SERVICE上读取方法</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">byte</SPAN><SPAN style="COLOR: #000000">&nbsp;[]&nbsp;bb</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">svs.SurrogateRead1();<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MemoryStream&nbsp;br</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;MemoryStream(bb);<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BinaryFormatter&nbsp;bf</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;BinaryFormatter();<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">object</SPAN><SPAN style="COLOR: #000000">&nbsp;o</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">bf.Deserialize(br);<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sds&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;(DataSetSurrogate)&nbsp;o;<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ds&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;sds.ConvertToDataSet();&nbsp;<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataGrid1.DataSource</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">ds.Tables[</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">];<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;br.Close();<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top></SPAN></DIV></DIV>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"></FONT></SPAN>&nbsp;</P><SPAN lang=EN-US style="FONT-SIZE: 12pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT color=#000000 size=2><BR></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-SIZE: 12pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><FONT color=#000000><FONT color=#ff1493><BR></FONT><FONT size=2>我个人觉得用byte[]方式会安全些，毕竟不用在客户端产生文件，不用担心数据的安全。<BR><BR>当然作为从网络上读取数据来说，10W条是一个不小量，所有的方式包括压缩，序列化等都是权宜之计，而不是长久之计，在使用当中，我用以上的方法虽然能使网络传输量降低，且可在很短时间内就把数据显示在DATAGRID上，但CPU的开销却达到了100%，这是我一直头疼的。我后来又用了分页的方式，把10W条数据在服务器端就分批取出，每次500条，这样读取时间延长了，但CPU开销却未减轻很多，再后来，又用多线程的方式处理，不甚理想。因此最好的方法就是尽可能的不查询10W条数据，通过条件判断等方式减少所需处理的数据量。<BR></FONT></FONT><BR></SPAN><SPAN style="FONT-SIZE: 12pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><FONT size=2>本文从以下文章里借鉴</FONT><SPAN lang=EN-US><FONT size=2>:<BR></FONT><A href="http://www.dotnetjunkies.com/PrintContent.aspx?type=tutorial&amp;id=46630AE2-1C79-4D5F-827E-6C2857FF1D23"><FONT size=2>http://www.dotnetjunkies.com/PrintContent.aspx?type=tutorial&amp;id=46630AE2-1C79-4D5F-827E-6C2857FF1D23</FONT></A><BR><BR><A href="http://blog.joycode.com/5drush/archive/2004/05/28/22990.aspx"><FONT size=2>http://blog.joycode.com/5drush/archive/2004/05/28/22990.aspx</FONT></A><BR><BR><A href="http://www.chinacs.net/archives/11/2004/08/10/2155.html"><FONT size=2>http://www.chinacs.net/archives/11/2004/08/10/2155.html</FONT></A><BR><BR></SPAN></SPAN><U><SPAN lang=EN-US style="FONT-SIZE: 12pt; BACKGROUND: white; COLOR: blue; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><A href="http://www.microsoft.com/taiwan/msdn/columns/adonet/AdoNet_20041231.htm"><FONT size=2>http://www.microsoft.com/taiwan/msdn/columns/adonet/AdoNet_20041231.htm</FONT></A><BR><BR></SPAN></U><SPAN lang=EN-US style="FONT-SIZE: 12pt; BACKGROUND: white; COLOR: blue; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt"><A href="http://www.microsoft.com/china/msdn/library/langtool/vcsharp/miszipcompression.mspx"><SPAN style="COLOR: navy"><FONT size=2>http://www.microsoft.com/china/msdn/library/langtool/vcsharp/miszipcompression.mspx</FONT></SPAN></A></SPAN></P><BR style="mso-special-character: line-break"></SPAN></SPAN><img src ="http://www.cnblogs.com/flyskywlh/aggbug/217382.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42842/" target="_blank">[新闻]AMD剥离芯片制造业务 获60亿美元投资</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item></channel></rss>