﻿<?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>BlogJava-SIMONE-随笔分类-.NET</title><link>http://www.blogjava.net/wangxinsh55/category/19400.html</link><description /><language>zh-cn</language><lastBuildDate>Thu, 10 Jan 2008 02:23:04 GMT</lastBuildDate><pubDate>Thu, 10 Jan 2008 02:23:04 GMT</pubDate><ttl>60</ttl><item><title>如何美化你的.net 应用程序</title><link>http://www.blogjava.net/wangxinsh55/archive/2008/01/09/173975.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Wed, 09 Jan 2008 05:08:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2008/01/09/173975.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/173975.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2008/01/09/173975.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/173975.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/173975.html</trackback:ping><description><![CDATA[<p>利用.net技术能够快速开发出应用程序，但是如果应用微软的那一套技术，做出来的程序大多数程序员恐怕都会有一种千篇一律的感觉：按钮还是那个按钮（只是文字不同），文本框还是那个文本框，&nbsp;下拉列表还是那个下拉列表........跟系统里的没有什么两样，不管程序怎么样，至少这个界面没什么新意。</p>
<p>诚然，目前也有不少第三方的控件，如Xceed Ultimate Suite、ComponentOne.Studio、Infragistics.NetAdvantage等等，使用这些控件大多需要再花一定时间去掌握这些控件的用法，而且有些做得不是很好，我曾经见过一个商业控件里面很多是画出来的，不能像VS.net自带的控件那样在IDE上灵活控制，现在给大家展示一个很简单的换皮肤控件，先不说别的，让大家看看效果：<br />
<img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/zhoufoxcn/SkinMacOS.JPG" /></p>
<p><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/zhoufoxcn/SkinMP10.JPG" /></p>
<p><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/zhoufoxcn/SkinMSN.JPG" /></p>
<p><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/zhoufoxcn/SkinPage.JPG" /></p>
<p><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/zhoufoxcn/SkinRealOne.JPG" /></p>
<p><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/zhoufoxcn/SkinVista1.JPG" /></p>
<p><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/zhoufoxcn/SkinWinXP.JPG" /></p>
<p>看到上面的界面心动了吗？告诉大家，我用的都是VS2005的标准控件，实现换皮肤的功能也仅仅是数行代码而已，也就是说以前熟悉的控件还照常使用。</p>
<p>先介绍一下这套控件吧，这套控件仅有一个dll（IrisSkin2.dll）文件和一个skin文件夹，skin文件夹下共有22个子文件夹，每个子文件夹其实就是一套界面风格，也就是说我们可以使用22种不同风格。</p>
<p>实现给界面换皮肤有两种做法：（一）拷贝法，即使将界面资源夹下所有的文件拷贝到.exe文件所在的位置，然后在程序种通过skinEngine1.SkinFile=fileName(fileName是皮肤文件.ssk文件的位置)来设定界面皮肤，这种做法通常是我们需要在Debug文件夹和Release文件各保存一套皮肤文件，发布程序的时候也需要附带这些文件。（二）嵌入资源法，本文就是采用这种办法实现的，这样做的好处是发布程序时（不管是Debug版本或Release版本）时vs自动将皮肤文件编译进exe文件中，减少程序发布时文件的个数，而且也不用管程序与皮肤文件的相对位置。</p>
<p>首先打开VS工具箱，添加皮肤控件组件，如下图：<br />
<img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/zhoufoxcn/ToolBoxVs2005.JPG" /></p>
<p>然后在出现的&#8220;选择工具箱项&#8221;中点击&#8220;浏览&#8221;按钮，然后找到IrisSkin2.dll文件，然后&#8220;确定&#8221;，关闭对话窗口之后，皮肤控件组件就会出现在你的工具箱上了（具体出现在哪个分组跟你添加时添加哪个组有关），如下图：<br />
<img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/zhoufoxcn/ToolBoxVs2005_1.JPG" /></p>
<p><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/zhoufoxcn/ToolBoxVs2005_2.JPG" />（我不小心加到打印分组去了，大家不要骂我：P）</p>
<p>好了，现在可以编写程序测试了，做一个简单的窗体吧，界面上的控件如上图所示，然后将皮肤组件拖拽到界面上，之后需要把程序所需要的皮肤资源文件添加进来，这里我是采用添加资源的办法。</p>
<p>步骤如下：<br />
（一）在WinForm工程上右键单击&#8220;属性&#8221;，在出现的界面中点&#8220;资源&#8221;选项卡，把所需的皮肤资源文件添加进来（通过&#8220;添加现有文件&#8221;命令添加皮肤文件），如下图：<br />
<img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/zhoufoxcn/Skin_Resource_Add.JPG" /></p>
<p>注意如果该皮肤文件夹下除了*.ssk文件之外，还包含有其它图片文件，建议将它们也作为资源添加到项目中。添加完成之后，我们就可以在代码中通过Properties.Resources.文件名来获取这些文件的内容了，通过这个方法返回的是文件内容的二进制数据(byte[]),而skinEngine1.SkinStream需要的是一个Stream对象，通过msdn我们可以以这个二进制数据构建一个Stream对象（new MemoryStream(byte[] bytes)），然后赋值给皮肤组件的SkinStream属性，如果需要换皮肤，重新构建一个皮肤资源文件的Stream对象，然后重新赋值就行了。</p>
<p>界面控件布局代码很简单，就不粘贴了，主要把后台代码放在这里吧（其实也很简单，不过需要注意，因为使用了MemoryStream对象，就需要在程序引用程序集部分添加对IO方面的引用：using System.IO;）</p>
<p>代码如下：<br />
</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: 95%; word-break: break-all; padding-top: 4px; border-bottom: windowtext 0.5pt solid">
<div><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.IO;<br />
</span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Windows.Forms;<br />
<br />
</span><span style="color: #0000ff">namespace</span><span style="color: #000000">&nbsp;SkinForm<br />
{<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: #008000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;说明：这是一个简单的WinForm应用程序，用来展示如何使用换皮肤控件来实现我们需要的漂亮界面，代码很简单。<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;时间：2008-1-8<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;首发地址：</span><span style="color: #008000; text-decoration: underline">http://blog.csdn.net/zhoufoxcn</span><span style="color: #008000"><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">partial</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;MainForm&nbsp;:&nbsp;Form<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;MemoryStream&nbsp;memoryStream;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;MainForm()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InitializeComponent();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetSkinFile(Properties.Resources.MacOS);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&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;btnOK_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;(rbMacOS.Checked)<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;SetSkinFile(Properties.Resources.MacOS);<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">&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(rbMP10.Checked)<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;SetSkinFile(Properties.Resources.MP101);<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">&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(rbMSN.Checked)<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;SetSkinFile(Properties.Resources.MSN1);<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">&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(rbPage.Checked)<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;SetSkinFile(Properties.Resources.Page);<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">&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(rbRealOne.Checked)<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;SetSkinFile(Properties.Resources.RealOne1);<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">&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(rbVista1.Checked)<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;SetSkinFile(Properties.Resources.vista1_green1);<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">&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(rbVista2.Checked)<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;SetSkinFile(Properties.Resources.Vista2_color11);<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;SetSkinFile(Properties.Resources.XPBlue1);<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">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;SetSkinFile(</span><span style="color: #0000ff">byte</span><span style="color: #000000">[]&nbsp;bytes)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memoryStream</span><span style="color: #000000">=</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;MemoryStream(bytes);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">设置皮肤可以通过两种方式，一种是指定皮肤文件的位置,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">如skinEngine1.SkinFile=fileName(fileName是皮肤文件.ssk文件的位置)<br />
&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;skinEngine1.SkinStream&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;memoryStream;<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;}<br />
}</span></div>
</div>
<p>程序界面效果如上面所示。</p>
<p>本文提到的皮肤组件可以到：<a href="http://download.csdn.net/user/zhoufoxcn/">http://download.csdn.net/user/zhoufoxcn/</a>下载。</p>
<img src ="http://www.blogjava.net/wangxinsh55/aggbug/173975.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2008-01-09 13:08 <a href="http://www.blogjava.net/wangxinsh55/archive/2008/01/09/173975.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C#.net模拟提交表单POST</title><link>http://www.blogjava.net/wangxinsh55/archive/2007/06/22/125847.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Fri, 22 Jun 2007 07:18:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2007/06/22/125847.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/125847.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2007/06/22/125847.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/125847.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/125847.html</trackback:ping><description><![CDATA[方法一、<br>System.Net.WebClient WebClientObj&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= new System.Net.WebClient();<br>&nbsp;&nbsp;&nbsp;System.Collections.Specialized.NameValueCollection PostVars&nbsp;&nbsp;= new System.Collections.Specialized.NameValueCollection();<br>&nbsp;&nbsp;&nbsp;PostVars.Add("A1","0");<br>&nbsp;&nbsp;&nbsp;PostVars.Add("A2","0");<br>&nbsp;&nbsp;&nbsp;PostVars.Add("A3","000");
<p>&nbsp;&nbsp;&nbsp;try<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;byte[] byRemoteInfo&nbsp;&nbsp;&nbsp;= WebClientObj.UploadValues("http://www.lovezhao.com/vote.asp","POST",PostVars);<br>&nbsp;&nbsp;&nbsp;&nbsp;//下面都没用啦，就上面一句话就可以了<br>&nbsp;&nbsp;&nbsp;&nbsp;string sRemoteInfo&nbsp;&nbsp;&nbsp;= System.Text.Encoding.Default.GetString(byRemoteInfo);&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;//这是获取返回信息<br>&nbsp;&nbsp;&nbsp;&nbsp;richTextBox_instr.Text&nbsp;&nbsp;+= sRemoteInfo;<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;catch<br>&nbsp;&nbsp;&nbsp;{}<br></p>
<br><br>方法二、<br>string url = "网址";<br>HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);<br>string s = "要提交的数据";<br>byte[] requestBytes = System.Text.Encoding.ASCII.GetBytes (LoginInfo);<br>req.Method = "POST";<br>req.ContentType = "application/x-www-form-urlencoded";<br>req.ContentLength = requestBytes.Length;<br>Stream requestStream = req.GetRequestStream();<br>requestStream.Write(requestBytes,0,requestBytes.Length);<br>requestStream.Close();<br>HttpWebResponse res = (HttpWebResponse)req.GetResponse();<br>StreamReader sr = new StreamReader(res.GetResponseStream(), System.Text.Encoding.Default);<br>string backstr = sr.ReadToEnd(); Response.Write(line); sr.Close(); res.Close(); <br>
<img src ="http://www.blogjava.net/wangxinsh55/aggbug/125847.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2007-06-22 15:18 <a href="http://www.blogjava.net/wangxinsh55/archive/2007/06/22/125847.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> C#编写的生成缩略图程序 </title><link>http://www.blogjava.net/wangxinsh55/archive/2007/04/02/107995.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Mon, 02 Apr 2007 07:51:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2007/04/02/107995.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/107995.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2007/04/02/107995.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/107995.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/107995.html</trackback:ping><description><![CDATA[<u><font color=#800080>&nbsp;C#编写的生成缩略图程序<br></font></u>
<p>if(fileupload.PostedFile!=null)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//addto为要添加的属性，aboutfile为文件说明<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string nam = fileupload.PostedFile.FileName ;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//取得文件名(抱括路径)里最后一个"."的索引<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int i= nam.LastIndexOf(".");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//取得文件扩展名<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string newext =nam.Substring(i);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//这里我自动根据日期和文件大小不同为文件命名,确保文件名不重复<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime now = DateTime.Now; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string newname=now.DayOfYear.ToString()+fileupload.PostedFile.ContentLength.ToString(); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//保存文件到你所要的目录,这里是IIS根目录下的upload目录.你可以改变.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//注意: 我这里用Server.MapPath()取当前文件的相对目录.在asp.net里"\"必须用"\\"代替，把"upload\\"改成"<a href="file://upload//">\\upload\\</a>"就成了取当前文件的绝对目录了<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fileupload.PostedFile.SaveAs(Server.MapPath("upload\\"+newname+newext)); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//得到这个文件的相关属性:文件名,文件类型,文件大小<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//fname.Text=myFile.PostedFile.FileName;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//fenc.Text=myFile.PostedFile.ContentType ;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//fsize.Text=myFile.PostedFile.ContentLength.ToString();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//下面是生成缩略图 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.Drawing.Image image,aNewImage;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int width,height,newwidth,newheight;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;image=System.Drawing.Image.FromFile(Server.MapPath("upload/"+newname.ToString()+newext.ToString()));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.Drawing.Image.GetThumbnailImageAbort callb =new System.Drawing.Image.GetThumbnailImageAbort(ThumbnailCallback);&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width=image.Width;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;height=image.Height;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(firstpageshow.SelectedValue.ToString()=="1"&amp;&amp;fenlei.SelectedValue.ToString()=="5")<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newwidth=203;newheight=86;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newheight=height*newwidth/width;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(isweekman.SelectedValue.ToString()=="1")<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newwidth=171;newheight=111;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newheight=height*newwidth/width;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if(firstpageshow.SelectedValue.ToString()=="1"&amp;&amp;fenlei.SelectedValue.ToString()=="3")<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newwidth=171;newheight=111;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newheight=height*newwidth/width;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newwidth=62;newheight=80;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newheight=height*newwidth/width;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;aNewImage=image.GetThumbnailImage(newwidth,newheight,callb,new System.IntPtr());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;aNewImage.Save(Server.MapPath("upload\\"+"small_"+newname+newext));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;image.Dispose();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//生成缩略图 生成并保存完毕，保存名是在原图名前加了一个small_。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pic="upload/"+newname.ToString()+newext.ToString();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;smallpic="upload/small_"+newname.ToString()+newext.ToString();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<br>&nbsp;
<img src ="http://www.blogjava.net/wangxinsh55/aggbug/107995.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2007-04-02 15:51 <a href="http://www.blogjava.net/wangxinsh55/archive/2007/04/02/107995.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ASP.NET2.0打通文件图片处理任督二脉</title><link>http://www.blogjava.net/wangxinsh55/archive/2007/04/02/107994.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Mon, 02 Apr 2007 07:49:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2007/04/02/107994.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/107994.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2007/04/02/107994.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/107994.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/107994.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: ASP.NET2.0打通文件图片处理任督二脉作者：清清月儿 主页：http://blog.csdn.net/21aspnet/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 时间：2007.4.11.最简单的单文件上传(没花头)2.多文件上传3.客户端检查上传文件类型(以上传图片为例)4.服务器端检查上传文件类型...&nbsp;&nbsp;<a href='http://www.blogjava.net/wangxinsh55/archive/2007/04/02/107994.html'>阅读全文</a><img src ="http://www.blogjava.net/wangxinsh55/aggbug/107994.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2007-04-02 15:49 <a href="http://www.blogjava.net/wangxinsh55/archive/2007/04/02/107994.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Enterprise Library系列文章回顾与总结 </title><link>http://www.blogjava.net/wangxinsh55/archive/2007/03/29/107228.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Thu, 29 Mar 2007 06:46:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2007/03/29/107228.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/107228.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2007/03/29/107228.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/107228.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/107228.html</trackback:ping><description><![CDATA[自<span lang="EN-US">Enterprise Library 1.1 </span>推出以来，<span lang="EN-US">Terry</span>写了一系列的关于<span lang="EN-US">Enterprise Library</span>的文章，其中得到了很多朋友的支持，在这里一并表示感谢。为了方便大家的阅读，这里我做了一下整理与分类。<br /><br /><span lang="EN-US"><?XML:NAMESPACE PREFIX = O /?><o:p></o:p></span><span lang="EN-US"><o:p></o:p></span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 200%"><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体"><strong>第Ⅰ部分：<?XML:NAMESPACE PREFIX = ST1 /?><st1:place w:st="on"><st1:city w:st="on"><span lang="EN-US">Enterprise</span></st1:city></st1:place><span lang="EN-US"> Library 1.1 Step By Step<o:p></o:p></span></strong></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 200%; mso-para-margin-left: 1.0gd"><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">1</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">．<span lang="EN-US"><a href="http://www.cnblogs.com/Terrylee/archive/2005/10/14/254631.html"><font color="#0066ff">Enterprise Library Step By Step<span lang="EN-US"><span lang="EN-US">系列（一）：配置应用程序块——</span></span><span lang="EN-US"><span lang="EN-US">入门篇</span></span></font></a><o:p></o:p></span></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 200%; mso-para-margin-left: 1.0gd"><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">2</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">．<span lang="EN-US"><a href="http://www.cnblogs.com/Terrylee/archive/2005/10/15/255299.html"><font color="#0066ff">Enterprise Library Step By Step<span lang="EN-US"><span lang="EN-US">系列（二）：配置应用程序块——</span></span><span lang="EN-US"><span lang="EN-US">进阶篇</span></span></font></a><o:p></o:p></span></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 200%; mso-para-margin-left: 1.0gd"><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">3</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">．<span lang="EN-US"><a href="http://www.cnblogs.com/Terrylee/archive/2005/10/18/257167.html"><font color="#0066ff">Enterprise Library Step By Step<span lang="EN-US"><span lang="EN-US">系列（三）：数据访问程序块——</span></span><span lang="EN-US"><span lang="EN-US">入门篇</span></span></font></a><o:p></o:p></span></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 200%; mso-para-margin-left: 1.0gd"><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">4</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">．<span lang="EN-US"><a href="http://www.cnblogs.com/Terrylee/archive/2005/10/21/258961.html"><font color="#0066ff">Enterprise Library Step By Step<span lang="EN-US"><span lang="EN-US">系列（四）：数据访问程序块——</span></span><span lang="EN-US"><span lang="EN-US">进阶篇</span></span></font></a><o:p></o:p></span></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 200%; mso-para-margin-left: 1.0gd"><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">5</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">．<span lang="EN-US"><a href="http://www.cnblogs.com/Terrylee/archive/2005/10/25/261414.html"><font color="#0066ff">Enterprise Library Step By Step<span lang="EN-US"><span lang="EN-US">系列（五）：安全应用程序块——</span></span><span lang="EN-US"><span lang="EN-US">入门篇</span></span></font></a><o:p></o:p></span></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 200%; mso-para-margin-left: 1.0gd"><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">6</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">．<span lang="EN-US"><a href="http://www.cnblogs.com/Terrylee/archive/2005/10/27/263024.html"><font color="#0066ff">Enterprise Library Step By Step<span lang="EN-US"><span lang="EN-US">系列（六）：安全应用程序块——</span></span><span lang="EN-US"><span lang="EN-US">进阶篇</span></span></font></a><o:p></o:p></span></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 200%; mso-para-margin-left: 1.0gd"><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">7</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">．<span lang="EN-US"><a href="http://www.cnblogs.com/Terrylee/archive/2005/11/02/266999.html"><font color="#0066ff">Enterprise Library Step By Step<span lang="EN-US"><span lang="EN-US">系列（七）：日志和监测应用程序块——</span></span><span lang="EN-US"><span lang="EN-US">入门篇</span></span></font></a><o:p></o:p></span></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 200%; mso-para-margin-left: 1.0gd"><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">8</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">．<span lang="EN-US"><a href="http://www.cnblogs.com/Terrylee/archive/2005/11/08/271205.html"><font color="#0066ff">Enterprise Library Step By Step<span lang="EN-US"><span lang="EN-US">系列（八）：日志和监测应用程序块——</span></span><span lang="EN-US"><span lang="EN-US">进阶篇</span></span></font></a><o:p></o:p></span></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 200%; mso-para-margin-left: 1.0gd"><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">9</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">．<span lang="EN-US"><a href="http://www.cnblogs.com/Terrylee/archive/2005/11/11/273731.html"><font color="#0066ff">Enterprise Library Step By Step<span lang="EN-US"><span lang="EN-US">系列（九）：缓冲应用程序块——</span></span><span lang="EN-US"><span lang="EN-US">入门篇</span></span></font></a><o:p></o:p></span></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 200%; mso-para-margin-left: 1.0gd"><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">10</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">．<span lang="EN-US"><a href="http://www.cnblogs.com/Terrylee/archive/2005/11/13/275233.html"><font color="#0066ff">Enterprise Library Step By Step<span lang="EN-US"><span lang="EN-US">系列（十）：缓冲应用程序块——</span></span><span lang="EN-US"><span lang="EN-US">进阶篇</span></span></font></a><o:p></o:p></span></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 200%; mso-para-margin-left: 1.0gd"><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">11</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">．<span lang="EN-US"><a href="http://www.cnblogs.com/Terrylee/archive/2005/11/14/275659.html"><font color="#0066ff">Enterprise Library Step By Step<span lang="EN-US"><span lang="EN-US">系列（十一）：异常处理应用程序块——</span></span><span lang="EN-US"><span lang="EN-US">入门篇</span></span></font></a><o:p></o:p></span></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 200%; mso-para-margin-left: 1.0gd"><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">12</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">．<span lang="EN-US"><a href="http://www.cnblogs.com/Terrylee/archive/2005/11/16/277557.html"><font color="#0066ff">Enterprise Library Step By Step<span lang="EN-US"><span lang="EN-US">系列（十二）：异常处理应用程序块——</span></span><span lang="EN-US"><span lang="EN-US">进阶篇</span></span></font></a><o:p></o:p></span></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 200%; mso-para-margin-left: 1.0gd"><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">13</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">．<span lang="EN-US"><a href="http://www.cnblogs.com/Terrylee/archive/2005/11/29/286688.html"><font color="#0066ff">Enterprise Library Step By Step<span lang="EN-US"><span lang="EN-US">系列（十三）：加密应用程序块——</span></span><span lang="EN-US"><span lang="EN-US">入门篇</span></span></font></a><o:p></o:p></span></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 200%; mso-para-margin-left: 1.0gd"><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">14</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">．<span lang="EN-US"><a href="http://www.cnblogs.com/Terrylee/archive/2005/12/01/288576.html"><font color="#0066ff">Enterprise Library Step By Step<span lang="EN-US"><span lang="EN-US">系列（十四）：创建基于消息队列（MSMQ</span></span><span lang="EN-US"><span lang="EN-US">）的异步日志</span></span></font></a><o:p></o:p></span></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 200%; mso-para-margin-left: 1.0gd"><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">15</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">．<span lang="EN-US"><a href="http://www.cnblogs.com/Terrylee/archive/2005/12/06/291448.html"><font color="#0066ff">Enterprise Library Step By Step<span lang="EN-US"><span lang="EN-US">系列（十五）：配置应用程序块——</span></span><span lang="EN-US"><span lang="EN-US">设计篇</span></span></font></a><o:p></o:p></span></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 200%; mso-para-margin-left: 1.0gd"><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">16</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">．<span lang="EN-US"><a href="http://www.cnblogs.com/Terrylee/archive/2005/12/08/292856.html"><font color="#0066ff">Enterprise Library Step By Step<span lang="EN-US"><span lang="EN-US">系列（十六）：使用AppSetting Application Block</span></span></font></a><o:p></o:p></span></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 200%"><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体"><strong>第Ⅱ部分：<span lang="EN-US">Enterprise Library 2.0 </span>学习<span lang="EN-US"><o:p></o:p></span></strong></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 200%; mso-para-margin-left: 1.0gd"><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">1</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">．<span lang="EN-US"><a href="http://www.cnblogs.com/Terrylee/archive/2006/03/14/350026.html"><font color="#0066ff">Enterprise Library 2.0<span lang="EN-US"><span lang="EN-US">（1</span></span><span lang="EN-US"><span lang="EN-US">）：Data Access Application Block</span></span><span lang="EN-US"><span lang="EN-US">学习</span></span></font></a><o:p></o:p></span></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 200%; mso-para-margin-left: 1.0gd; mso-outline-level: 1"><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">2</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">．<span lang="EN-US"><a href="http://www.cnblogs.com/Terrylee/archive/2006/03/22/355923.html"><font color="#0066ff">Enterprise Library 2.0<span lang="EN-US"><span lang="EN-US">（2</span></span><span lang="EN-US"><span lang="EN-US">）：Logging Application Block</span></span><span lang="EN-US"><span lang="EN-US">学习</span></span></font></a><o:p></o:p></span></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 200%; mso-para-margin-left: 1.0gd"><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">3</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">．<span lang="EN-US"><a href="http://www.cnblogs.com/Terrylee/archive/2006/06/05/Enterprise_Library_Encryption_ConnectionStrings.html"><font color="#0066ff">Enterprise Library 2.0<span lang="EN-US"><span lang="EN-US">中加密数据库连接字符串</span></span></font></a><o:p></o:p></span></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 200%"><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体"><strong>第Ⅲ部分：<span lang="EN-US">Enterprise Library 2.0 </span>技巧<span lang="EN-US"><o:p></o:p></span></strong></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 200%; mso-para-margin-left: 1.0gd; mso-outline-level: 1"><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">1</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">．<span lang="EN-US"><a href="http://www.cnblogs.com/Terrylee/archive/2006/07/03/enterprise_library2_1.html"><font color="#0066ff">Enterprise Library 2.0 <span lang="EN-US"><span lang="EN-US">技巧（1</span></span><span lang="EN-US"><span lang="EN-US">）：如何使用外部配置文件</span></span></font></a><o:p></o:p></span></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 200%; mso-para-margin-left: 1.0gd"><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">2</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">．<span lang="EN-US"><a href="http://www.cnblogs.com/Terrylee/archive/2006/07/05/enterprise_library2_2.html"><font color="#0066ff">Enterprise Library 2.0 <span lang="EN-US"><span lang="EN-US">技巧<span lang="EN-US">（2</span></span></span><span lang="EN-US"><span lang="EN-US">）：如何将配置信息保存到数据库中</span></span></font></a><o:p></o:p></span></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 200%; mso-para-margin-left: 1.0gd"><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">3</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">．<span lang="EN-US"><a href="http://www.cnblogs.com/Terrylee/archive/2006/07/06/enterprise_library2_3.html"><font color="#0066ff">Enterprise Library 2.0 <span lang="EN-US"><span lang="EN-US">技巧（3</span></span><span lang="EN-US"><span lang="EN-US">）：记录ASP.NET</span></span><span lang="EN-US"><span lang="EN-US">站点中未处理的异常</span></span></font></a><o:p></o:p></span></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 200%; mso-para-margin-left: 1.0gd"><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">4</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">．<span lang="EN-US"><a href="http://www.cnblogs.com/Terrylee/archive/2006/07/08/enterprise_library2_4.html"><font color="#0066ff">Enterprise Library 2.0 <span lang="EN-US"><span lang="EN-US">技巧（4</span></span><span lang="EN-US"><span lang="EN-US">）：如何用编程的方法来配置Logging Application Block</span></span></font></a><o:p></o:p></span></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 200%"><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体"><strong>第Ⅳ部分<span lang="EN-US"> Enterprise Library 2.0 Hands On Lab</span>翻译系列<span lang="EN-US"><o:p></o:p></span></strong></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 200%; mso-para-margin-left: 1.0gd"><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">1</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">．<span lang="EN-US"><a href="http://www.cnblogs.com/Terrylee/archive/2006/10/06/Data_Access_Application_Block_HandsOnLab_Part1.html"><font color="#0066ff">Enterprise Library 2.0 Hands On Lab <span lang="EN-US"><span lang="EN-US">翻译（1</span></span><span lang="EN-US"><span lang="EN-US">）：数据访问程序块（一）</span></span></font></a><o:p></o:p></span></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 200%; mso-para-margin-left: 1.0gd"><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">2</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">．<span lang="EN-US"><a href="http://www.cnblogs.com/Terrylee/archive/2006/10/06/Data_Access_Application_Block_HandsOnLab_Part2.html"><font color="#0066ff">Enterprise Library 2.0 Hands On Lab <span lang="EN-US"><span lang="EN-US">翻译（2</span></span><span lang="EN-US"><span lang="EN-US">）：数据访问程序块（二）</span></span></font></a><o:p></o:p></span></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 200%; mso-para-margin-left: 1.0gd"><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">3</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">．<span lang="EN-US"><a href="http://www.cnblogs.com/Terrylee/archive/2006/10/06/Data_Access_Application_Block_HandsOnLab_Part3.html"><font color="#0066ff">Enterprise Library 2.0 Hands On Lab <span lang="EN-US"><span lang="EN-US">翻译（3</span></span><span lang="EN-US"><span lang="EN-US">）：数据访问程序块（三）</span></span></font></a><o:p></o:p></span></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 200%; mso-para-margin-left: 1.0gd"><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">4</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">．<span lang="EN-US"><a href="http://www.cnblogs.com/Terrylee/archive/2006/10/06/Logging_Application_Block_HandsOnLab_Part1.html"><font color="#0066ff">Enterprise Library 2.0 Hands On Lab <span lang="EN-US"><span lang="EN-US">翻译（4</span></span><span lang="EN-US"><span lang="EN-US">）：日志应用程序块（一）</span></span></font></a><o:p></o:p></span></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 200%; mso-para-margin-left: 1.0gd"><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">5</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">．<span lang="EN-US"><a href="http://www.cnblogs.com/Terrylee/archive/2006/10/06/Logging_Application_Block_HandsOnLab_Part2.html"><font color="#0066ff">Enterprise Library 2.0 Hands On Lab <span lang="EN-US"><span lang="EN-US">翻译（5</span></span><span lang="EN-US"><span lang="EN-US">）：日志应用程序块（二）</span></span></font></a><o:p></o:p></span></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 200%; mso-para-margin-left: 1.0gd"><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">6</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">．<span lang="EN-US"><a href="http://www.cnblogs.com/Terrylee/archive/2006/10/06/Logging_Application_Block_HandsOnLab_Part3.html"><font color="#0066ff">Enterprise Library 2.0 Hands On Lab <span lang="EN-US"><span lang="EN-US">翻译（6</span></span><span lang="EN-US"><span lang="EN-US">）：日志应用程序块（三）</span></span></font></a><o:p></o:p></span></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 200%; mso-para-margin-left: 1.0gd"><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">7</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">．<span lang="EN-US"><a href="http://www.cnblogs.com/Terrylee/archive/2006/10/07/Exception_Handling_Application_Block_HandsOnLab_Part1.html"><font color="#0066ff">Enterprise Library 2.0 Hands On Lab <span lang="EN-US"><span lang="EN-US">翻译（7</span></span><span lang="EN-US"><span lang="EN-US">）：异常应用程序块（一）</span></span></font></a><o:p></o:p></span></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 200%; mso-para-margin-left: 1.0gd"><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">8</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">．<span lang="EN-US"><a href="http://www.cnblogs.com/Terrylee/archive/2006/10/07/Exception_Handling_Application_Block_HandsOnLab_Part2.html"><font color="#0066ff">Enterprise Library 2.0 Hands On Lab <span lang="EN-US"><span lang="EN-US">翻译（8</span></span><span lang="EN-US"><span lang="EN-US">）：异常应用程序块（二）</span></span></font></a><o:p></o:p></span></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 200%; mso-para-margin-left: 1.0gd"><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">9</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">．<span lang="EN-US"><a href="http://www.cnblogs.com/Terrylee/archive/2006/10/09/Caching_Application_Block_handsOnLab_Part1.html"><font color="#0066ff">Enterprise Library 2.0 Hands On Lab <span lang="EN-US"><span lang="EN-US">翻译（9</span></span><span lang="EN-US"><span lang="EN-US">）：缓存应用程序块（一）</span></span></font></a><o:p></o:p></span></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 200%; mso-para-margin-left: 1.0gd"><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">10</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">．<span lang="EN-US"><a href="http://www.cnblogs.com/Terrylee/archive/2006/10/09/Caching_Application_Block_HandsOnLab_Part2.html"><font color="#0066ff">Enterprise Library 2.0 Hands On Lab <span lang="EN-US"><span lang="EN-US">翻译（10</span></span><span lang="EN-US"><span lang="EN-US">）：缓存应用程序块（二）</span></span></font></a><o:p></o:p></span></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 200%; mso-para-margin-left: 1.0gd"><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">11</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">．<span lang="EN-US"><a href="http://www.cnblogs.com/Terrylee/archive/2006/10/09/Caching_Application_Block_HandsOnLab_Part3.html"><font color="#0066ff">Enterprise Library 2.0 Hands On Lab <span lang="EN-US"><span lang="EN-US">翻译（11</span></span><span lang="EN-US"><span lang="EN-US">）：缓存应用程序块（三）</span></span></font></a><o:p></o:p></span></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 200%; mso-para-margin-left: 1.0gd"><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">12</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">．<span lang="EN-US"><a href="http://www.cnblogs.com/Terrylee/archive/2006/10/09/Security_Application_Block_HandsOnLab_Part1.html"><font color="#0066ff">Enterprise Library 2.0 Hands On Lab <span lang="EN-US"><span lang="EN-US">翻译（12</span></span><span lang="EN-US"><span lang="EN-US">）：安全应用程序块（一）</span></span></font></a><o:p></o:p></span></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 200%; mso-para-margin-left: 1.0gd"><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">13</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">．<span lang="EN-US"><a href="http://www.cnblogs.com/Terrylee/archive/2006/10/14/Security_Application_Block_HandsOnLab_Part2.html"><font color="#0066ff">Enterprise Library 2.0 Hands On Lab <span lang="EN-US"><span lang="EN-US">翻译（13</span></span><span lang="EN-US"><span lang="EN-US">）：安全应用程序块（二）</span></span></font></a><o:p></o:p></span></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 200%; mso-para-margin-left: 1.0gd"><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">14</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">．<span lang="EN-US"><a href="http://www.cnblogs.com/Terrylee/archive/2006/10/16/Cryptography_Application_Block_HandsOnLab_Part1.html"><font color="#0066ff">Enterprise Library 2.0 Hands On Lab <span lang="EN-US"><span lang="EN-US">翻译（14</span></span><span lang="EN-US"><span lang="EN-US">）：加<span lang="EN-US">密应用程序块（一）</span></span></span></font></a><o:p></o:p></span></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 200%; mso-para-margin-left: 1.0gd"><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">15</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">．<span lang="EN-US"><a href="http://www.cnblogs.com/Terrylee/archive/2006/10/16/Cryptography_Application_Block_HandsOnLab_Part2.html"><font color="#0066ff">Enterprise Library 2.0 Hands On Lab <span lang="EN-US"><span lang="EN-US">翻译（15</span></span><span lang="EN-US"><span lang="EN-US">）：加密应用程序块（二）</span></span></font></a><o:p></o:p></span></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 200%"><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体"><o:p> </o:p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 200%"><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体"><strong>第Ⅴ部分<span lang="EN-US"> Enterprise Library 3.0 </span>体验系列<span lang="EN-US"><o:p></o:p></span></strong></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 200%"><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体"><span style="mso-tab-count: 1">    </span>1</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">．<span lang="EN-US"><a href="http://www.cnblogs.com/Terrylee/archive/2006/12/24/Enterprise_Library_3_Visual_Studio_Integrated_Configuration_Editor.html"><font color="#0066ff">Enterprise Library 3.0 <span lang="EN-US"><span lang="EN-US">体验（1</span></span><span lang="EN-US"><span lang="EN-US">）：集成VS2005</span></span><span lang="EN-US"><span lang="EN-US">的配置工具和配置区加密支持</span></span></font></a><span style="COLOR: red">New</span></span><span style="COLOR: red">！</span><span lang="EN-US"><o:p></o:p></span></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 200%"><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体"><span style="mso-tab-count: 1">    </span>2</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">．<span lang="EN-US"><a href="http://www.cnblogs.com/Terrylee/archive/2006/12/25/Enterprise_Library_3_Validation_Application_Block.html"><font color="#0066ff">Enterprise Library 3.0 <span lang="EN-US"><span lang="EN-US">体验（2</span></span><span lang="EN-US"><span lang="EN-US">）：使用Validation Application Block</span></span></font></a><span style="COLOR: red">New</span></span><span style="COLOR: red">！</span><span lang="EN-US"><o:p></o:p></span></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 200%"><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体"><span style="mso-tab-count: 1">    </span>3</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">．<span lang="EN-US"><a href="http://www.cnblogs.com/Terrylee/archive/2007/01/21/enterprise_library_validation_application_block_part_2.html"><font color="#0066ff">Enterprise Library 3.0 <span lang="EN-US"><span lang="EN-US">体<span lang="EN-US">验（3</span></span></span><span lang="EN-US"><span lang="EN-US">）：使用配置文件的Validation Application Block</span></span></font></a><span style="COLOR: red">New</span></span><span style="COLOR: red">！</span><span lang="EN-US"><o:p></o:p></span></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 200%"></p></span><img src ="http://www.blogjava.net/wangxinsh55/aggbug/107228.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2007-03-29 14:46 <a href="http://www.blogjava.net/wangxinsh55/archive/2007/03/29/107228.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ASP.net 2.0资料吐血收藏 </title><link>http://www.blogjava.net/wangxinsh55/archive/2007/03/16/104138.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Fri, 16 Mar 2007 01:09:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2007/03/16/104138.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/104138.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2007/03/16/104138.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/104138.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/104138.html</trackback:ping><description><![CDATA[
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl00_TitleUrl" href="http://www.cnblogs.com/Clingingboy/archive/2006/07/30/463471.html" target="_blank">asp.net控件开发基础(1)</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl01_TitleUrl" href="http://eddie005.cnblogs.com/archive/2006/07/04/442845.html" target="_blank">GridView模版列嵌套GirdView显示主从表数据</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl02_TitleUrl" href="http://eddie005.cnblogs.com/archive/2006/07/04/GridView_CheckBox.html" target="_blank">GridView中添加一个CheckBox列</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl03_TitleUrl" href="http://epjnpe.cnblogs.com/archive/2006/06/28/434868.html" target="_blank">域环境中安装部署VSTS全过程</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl04_TitleUrl" href="http://linwinfan.cnblogs.com/archive/2006/05/30/412912.html" target="_blank">设置VSS使支持通过Internet访问</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl05_TitleUrl" href="http://blog.csdn.net/wangyihust/archive/2006/05/23/751650.aspx" target="_blank">浅析Microsoft .net PetShop程序中的购物车和订单处理模块（Profile技术，异步MSMQ消息）</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl06_TitleUrl" href="http://pfzhou.cnblogs.com/archive/2006/03/31/363342.html" target="_blank">ASP.NET 2.0 正式版中无刷新页面的开发</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl07_TitleUrl" href="http://weiweictgu.cnblogs.com/archive/2006/03/23/356511.html" target="_blank">ASP.NET 2.0中实现客户端回调的简化版</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl08_TitleUrl" href="http://weiweictgu.cnblogs.com/archive/2006/04/17/377062.html" target="_blank">ASP.NET 2.0 Treeview Checkboxes - Check All - Javascript</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl09_TitleUrl" href="http://zhouruifu.cnblogs.com/archive/2006/04/18/378564.html" target="_blank">ASP.NET 2.0 Language Swithcer and Theme Swicher 多语言转换和多样式主题转换</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl10_TitleUrl" href="http://ltp.cnblogs.com/archive/2006/04/17/377564.html" target="_blank">Microsoft .NET Pet Shop 4 架构与技术分析</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl11_TitleUrl" href="http://cncxz.cnblogs.com/archive/2006/04/13/374736.html" target="_blank">BinaryImage：直接显示以二进制形式存储在数据库中的图片</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl12_TitleUrl" href="http://bearstar.cnblogs.com/archive/2006/04/10/Theme.html" target="_blank">ASP.NET2.0中themes、Skins轻松实现网站换肤！</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl13_TitleUrl" href="http://pfzhou.cnblogs.com/archive/2006/03/31/363342.html" target="_blank">ASP.NET 2.0 正式版中无刷新页面的开发</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl14_TitleUrl" href="http://andyliu.cnblogs.com/archive/2006/03/28/360645.html" target="_blank">Asp.net 2.0 关于Header/title/Meta tages/Style操作的一点小技巧</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl15_TitleUrl" href="http://cleo.cnblogs.com/archive/2006/03/26/359454.html" target="_blank">今天拿到一个TFS Workgroup Edition，想从B3R升级，结果开始了一天的艰难之路。。</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl16_TitleUrl" href="http://cncxz.cnblogs.com/archive/2006/03/22/356210.html" target="_blank">asp.net2.0：扩展ImageButton控件定制自己需要的功能</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl17_TitleUrl" href="http://cwbboy.cnblogs.com/archive/2006/03/22/356017.html" target="_blank">.net 2.0 访问Oracle －－与Sql Server的差异，注意事项，常见异常</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl18_TitleUrl" href="http://activer.cnblogs.com/archive/2006/03/16/351274.html" target="_blank">ASP.NET 2.0中的跨页面提交</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl19_TitleUrl" href="http://jackyrong.cnblogs.com/archive/2006/03/16/351041.html" target="_blank">ASP.NET 2.0中使用multiview控件</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl20_TitleUrl" href="http://shanyou.cnblogs.com/archive/2006/03/15/350899.html" target="_blank">Asp.net 2.0的异常处理需要考虑的问题</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl21_TitleUrl" href="http://zhhui.cnblogs.com/archive/2006/03/15/350754.html" target="_blank">ASP.NET 2.0 Personal Web Site Starter Kit　主题的动态切换（增加八种主题）</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl22_TitleUrl" href="http://kk2000.cnblogs.com/archive/2006/03/03/341708.html" target="_blank">如何在DotNet 2的登录组件中检索用户的锁定状态及解锁？</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl23_TitleUrl" href="http://mqingqing123.cnblogs.com/archive/2005/12/14/296702.html" target="_blank">IIS和ASP.NET2.0</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl24_TitleUrl" href="http://mqingqing123.cnblogs.com/archive/2006/03/03/341726.html" target="_blank">ASP.NET2.0 HiddenField控件</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl25_TitleUrl" href="http://jackyrong.cnblogs.com/archive/2006/02/06/326153.html" target="_blank">asp.net 2.0中新增的web.config的默认namespace功能</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl26_TitleUrl" href="http://pantian.cnblogs.com/archive/2006/03/02/341453.html" target="_blank">在asp.net 2.0中使用CuteEditor 5.0的一个注意事项</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl27_TitleUrl" href="http://teddyma.cnblogs.com/archive/2006/02/27/338917.html" target="_blank">ASP.NET: Custom AutoCompleteTextBox WebControl [With Source Code]</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl28_TitleUrl" href="http://www.microsoft.com/china/msdn/library/webservices/asp.net/ASP2memroleman.mspx" target="_blank">使用 IIS 进行 Microsoft ASP.NET 2.0 成员/角色管理</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl29_TitleUrl" href="http://blog.csdn.net/downmoon/archive/2006/02/15/599845.aspx" target="_self">Visual Studio 2005 的 101 个示例 --MSDN </a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl30_TitleUrl" href="http://blog.csdn.net/downmoon/archive/2006/01/22/585951.aspx" target="_self">vs2003 和vs2005下的发送SMTP邮件 （downmoon原创） </a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl31_TitleUrl" href="http://dudu.cnblogs.com/archive/2006/02/18/333115.html" target="_blank">将博客园程序从Visual Studio 2003迁移到Visual Studio 2005的尝试</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl32_TitleUrl" href="http://freeliver54.cnblogs.com/archive/2006/02/09/327853.html" target="_blank">VS2005中GridView簡單應用</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl33_TitleUrl" href="http://andrewbao.cnblogs.com/archive/2006/01/05/311721.html" target="_blank">VS2005中通过code snippet定制类模板</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl34_TitleUrl" href="http://andrewbao.cnblogs.com/archive/2005/01/28/98878.html" target="_blank">创建自定义的Visual Studio项模板</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl35_TitleUrl" href="http://andrewbao.cnblogs.com/archive/2006/01/05/311721.html" target="_blank">VS2005中通过code snippet定制类模板</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl36_TitleUrl" href="http://didasoft.cnblogs.com/archive/2005/12/30/308311.html" target="_blank">配置VSS2005的Internet访问</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl37_TitleUrl" href="http://xuzs.cnblogs.com/archive/2005/12/27/306062.html" target="_blank">VS.NET2005中的WEBPART初步(二) </a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl38_TitleUrl" href="http://flier.cnblogs.com/archive/2005/12/27/305233.html" target="_blank">ASP.NET 2.0 异步页面原理浅析 [1]</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl39_TitleUrl" href="http://myth.cnblogs.com/archive/2005/12/26/304864.html" target="_blank">自动填写版权信息</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl40_TitleUrl" href="http://zmsx.cnblogs.com/archive/2005/12/21/301994.html" target="_blank">关于Web Part 通讯</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl41_TitleUrl" href="http://shanyou.cnblogs.com/archive/2005/11/25/284247.html" target="_blank">Net Framework 2.0 事务处理</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl42_TitleUrl" href="http://shanyou.cnblogs.com/archive/2005/12/03/290125.html" target="_blank">Asp.net 2.0 WebPart使用经验点滴</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl43_TitleUrl" href="http://shanyou.cnblogs.com/archive/2005/12/22/302936.html" target="_blank">GridView控件使用经验</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl44_TitleUrl" href="http://jackielin.cnblogs.com/archive/2005/12/16/298190.html" target="_blank">在MastPage中引用脚本资源</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl45_TitleUrl" href="http://caomao.cnblogs.com/archive/2005/12/09/293591.html" target="_blank">提供一种简单、直观、简单、可扩展的MasterPage方案</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl46_TitleUrl" href="http://ipointer.cnblogs.com/archive/2005/12/06/291825.html" target="_blank">Enterprise Library2.0研究（二）日志组件的开发说明</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl47_TitleUrl" href="http://lovecherry.cnblogs.com/archive/2005/12/05/291092.html" target="_blank">（翻译）怎么在ASP.NET 2.0中使用Membership</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl48_TitleUrl" href="http://ipointer.cnblogs.com/archive/2005/12/05/291116.html" target="_blank">Enterprise Library2.0研究（一）日志组件的使用场景</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl49_TitleUrl" href="http://wdxinren.cnblogs.com/archive/2005/12/03/289956.html" target="_blank">VC# 2005 Screen Starter kit里的Rss处理类分析</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl50_TitleUrl" href="http://xrinehart.cnblogs.com/archive/2005/12/03/289978.html" target="_blank">革新：.NET 2.0的自定义配置文件体系初探</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl51_TitleUrl" href="http://chwkai.cnblogs.com/archive/2005/11/27/285317.html" target="_blank">Asp.net网站的ClickOnce自动部署（3）－虚拟目录的配置</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl52_TitleUrl" href="http://wdxinren.cnblogs.com/archive/2005/07/12/191652.html" target="_blank">C#2.0介绍之Iterators(迭代器)</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl53_TitleUrl" href="http://tonyqus.cnblogs.com/archive/2005/12/02/288886.html" target="_blank">ASP.NET 2.0基于SQLSERVER 2005的aspnetdb.mdf部署</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl54_TitleUrl" href="http://chinesewind.cnblogs.com/archive/2005/11/30/287957.html" target="_blank">DataTable中数据记录的统计</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl55_TitleUrl" href="http://sharpedge.cnblogs.com/archive/2005/12/01/288276.html" target="_blank">.NET配置文件解析过程详解</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl56_TitleUrl" href="http://welfare.cnblogs.com/archive/2005/11/30/287945.html" target="_blank">C# 2.0——匿名方法、迭代程序和局部类</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl57_TitleUrl" href="http://jackielin.cnblogs.com/archive/2005/11/29/286570.html" target="_blank">在自定义Server Control中捆绑JS文件 Step by Step</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl58_TitleUrl" href="http://andywu.cnblogs.com/archive/2005/11/28/286521.html" target="_blank">正式发布表达式计算引擎WfcExp V0.9(附源码)</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl59_TitleUrl" href="http://tishifu.cnblogs.com/archive/2005/11/29/286546.html" target="_blank">关于无aspx文件部署，我的一些探索心得</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl60_TitleUrl" href="http://teddyma.cnblogs.com/archive/2005/11/28/286196.html" target="_blank">深度解析Asp.Net2.0中的Callback机制</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl61_TitleUrl" href="http://jackielin.cnblogs.com/archive/2005/11/25/284626.html" target="_blank">Server Side ViewState 在服务器端存贮ViewState (ASP.NET 2.0)</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl62_TitleUrl" href="http://dudu.cnblogs.com/archive/2005/10/21/259328.html" target="_blank">解读System.Web.UI.Page中关键方法ProcessRequestMain()</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl63_TitleUrl" href="http://birdshome.cnblogs.com/archive/2004/12/19/79309.html" target="_blank">使用ASP.NET 2.0提供的WebResource管理资源</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl64_TitleUrl" href="http://jackyrong.cnblogs.com/archive/2005/09/21/241446.html" target="_blank">ASP.NET 2.0中使用自定义provider （2）</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl65_TitleUrl" href="http://hardrock.cnblogs.com/archive/2005/09/27/245255.html" target="_blank">转全角半角(C#，VB.NET)</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl66_TitleUrl" href="http://zhenyulu.cnblogs.com/articles/25326.html" target="_blank">小议数据库主键选取策略（原创）</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl67_TitleUrl" href="http://teddyma.cnblogs.com/archive/2005/10/25/261546.html" target="_blank">让人哭笑不得的“Unable to load one or more of the types in the assembly”问题的解决！</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl68_TitleUrl" href="http://pvistely.cnblogs.com/archive/2005/09/20/240054.html" target="_blank">继上次的GDI+做报表设计器后.............</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl69_TitleUrl" href="http://jackyrong.cnblogs.com/archive/2005/11/15/277119.html" target="_blank">Visual Studio 2005中编译调试新功能</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl70_TitleUrl" href="http://idior.cnblogs.com/archive/2005/08/15/214300.html" target="_blank">Transaction in ADO.net 2.0</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl71_TitleUrl" href="http://allenlooplee.cnblogs.com/archive/2005/08/16/216398.html" target="_blank">.NET v2.0 下的高精度计数器 —— Stopwatch [.NET v2.0, C#]</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl72_TitleUrl" href="http://idior.cnblogs.com/archive/2005/07/25/199946.html" target="_blank">.Net2.0 的新线程 ParameterizedThreadStart &amp;BackgroundWorker</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl73_TitleUrl" href="http://skyivben.cnblogs.com/archive/2005/09/17/238828.html" target="_blank">使用C#2.0进行文件压缩和解压</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl74_TitleUrl" href="http://nic.cnblogs.com/archive/2005/08/25/222277.html" target="_blank">在C#中使用Nullable类型</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl75_TitleUrl" href="http://pwqzc.cnblogs.com/archive/2005/11/25/284225.html" target="_blank">net2.0自定义注册控件</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl76_TitleUrl" href="http://shanyou.cnblogs.com/archive/2005/11/25/284247.html" target="_blank">Net Framework 2.0 事务处理</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl77_TitleUrl" href="http://quitgame.cnblogs.com/archive/2005/11/24/283910.html" target="_blank">体验.net2.0的优雅（3） -- 为您的 SiteMap 添加 控制转发功能</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl78_TitleUrl" href="http://hyphappy.cnblogs.com/archive/2005/11/24/283694.html" target="_blank">Composite UI Application Block学习笔记之Smart Part</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl79_TitleUrl" href="http://xrinehart.cnblogs.com/archive/2005/11/17/278207.html" target="_blank">为ASP.NET 2.0配置数据源</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl80_TitleUrl" href="http://quitgame.cnblogs.com/archive/2005/11/22/282181.html" target="_blank">体验 .net2.0 的优雅（2） -- ASP.net 主题和皮肤 </a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl81_TitleUrl" href="http://vitoriatang.cnblogs.com/archive/2005/11/22/282201.html" target="_blank">InternalsVisibleToAttribute，友元程序集访问属性</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl82_TitleUrl" href="http://fineboy.cnblogs.com/archive/2005/11/22/281998.html" target="_blank">NUnit实践的之路</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl83_TitleUrl" href="http://ly4cn.cnblogs.com/archive/2005/11/03/267832.html" target="_blank">.NET20 一种简单的窗口控件UI状态控制方法</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl84_TitleUrl" href="http://pwqzc.cnblogs.com/archive/2005/11/10/273277.html" target="_blank">Asp.Net2.0无刷新客户端回调</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl85_TitleUrl" href="http://blog.joycode.com/liuhuimiao/articles/50507.aspx" target="_self">ASP.NET2.0 新增控件(1)——ImageMap </a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl86_TitleUrl" href="http://jackyrong.cnblogs.com/archive/2005/09/02/228533.html" target="_blank">在asp.net 2.0中使用自定义的provider</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl87_TitleUrl" href="http://jackyrong.cnblogs.com/archive/2005/09/21/241446.html" target="_blank">ASP.NET 2.0中使用自定义provider （2）</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl88_TitleUrl" href="http://jackyrong.cnblogs.com/archive/2005/08/29/225521.html" target="_blank">在asp.net 2.0中使用SqlBulkCopy类迁移数据</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl89_TitleUrl" href="http://jackyrong.cnblogs.com/archive/2005/08/30/226412.html" target="_blank">使用asp.net 2.0和SQL SERVER 2005构建多层应用 </a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl90_TitleUrl" href="http://jackyrong.cnblogs.com/archive/2005/10/07/249719.html" target="_blank">asp.net 2.0中利用app_offline.htm功能</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl91_TitleUrl" href="http://jackyrong.cnblogs.com/archive/2005/11/15/277119.html" target="_blank">Visual Studio 2005中编译调试新功能</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl92_TitleUrl" href="http://jackyrong.cnblogs.com/archive/2005/11/09/272052.html" target="_blank">asp.net 2.0中扩展login控件</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl93_TitleUrl" href="http://hyphappy.cnblogs.com/archive/2005/11/17/278170.html" target="_blank">Composite UI Application Block学习笔记之Event Broker</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl94_TitleUrl" href="http://deepcast.cnblogs.com/archive/2005/08/02/205922.html" target="_blank">ASP.NET 2.0 QuickStart Tutorial--asp.net 2.0的速成教程</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl95_TitleUrl" href="http://luna.cnblogs.com/archive/2005/11/15/277214.html" target="_blank">VS2005 Web工程模版ClubSite中相册薄的一处BUG？</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl96_TitleUrl" href="http://jackyrong.cnblogs.com/archive/2005/11/15/277119.html" target="_blank">Visual Studio 2005中编译调试新功能</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl97_TitleUrl" href="http://sense.cnblogs.com/archive/2005/11/13/275339.html" target="_blank">使用ASP.NET 2.0 的一些问题！</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl98_TitleUrl" href="http://pwqzc.cnblogs.com/archive/2005/10/03/248345.html" target="_blank">使用　.net 2.0 中 linkLabel 控件要注意的一点</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl99_TitleUrl" href="http://pwqzc.cnblogs.com/archive/2005/11/10/273277.html" target="_blank">Asp.Net2.0无刷新客户端回调</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl100_TitleUrl" href="http://netufo.cnblogs.com/archive/2005/11/01/266283.html" target="_blank">为 asp.net 2.0 的菜单控件增加 target 属性</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl101_TitleUrl" href="http://waxdoll.cnblogs.com/archive/2005/04/03/131146.html" target="_blank">ASP.Net 2.0 MasterPage中路径的处理</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl102_TitleUrl" href="http://firmwolf.cnblogs.com/archive/2005/08/04/207062.html" target="_blank">SQL Server 2005中设置Reporting Services发布web报表的匿名访问</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl103_TitleUrl" href="http://tansm.cnblogs.com/archive/2005/11/01/266563.html" target="_blank">让你的控件属性注释支持多语言</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl104_TitleUrl" href="http://netufo.cnblogs.com/archive/2005/11/01/266283.html" target="_self">为 asp.net 2.0 的菜单控件增加 target 属性 </a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl105_TitleUrl" href="http://hedonister.cnblogs.com/category/36006.html" target="_self">发布一个原创的基于Ajax的通用(组合)查询 </a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl106_TitleUrl" href="http://interma.cnblogs.com/archive/2005/10/21/259524.html" target="_blank">试用VS2005中的Performance Tools</a>
				</h5>
		</div>
		<div class="post">
				<h5>
						<a id="FavoriteList1_Favorites_ctl107_TitleUrl" href="http://tonyqus.cnblogs.com/archive/2005/10/22/260000.html" target="_self">中文转换为完整拼音算法原理分析</a>
				</h5>
		</div>
<img src ="http://www.blogjava.net/wangxinsh55/aggbug/104138.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2007-03-16 09:09 <a href="http://www.blogjava.net/wangxinsh55/archive/2007/03/16/104138.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>aspjpeg组件安装使用</title><link>http://www.blogjava.net/wangxinsh55/archive/2007/02/26/100751.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Mon, 26 Feb 2007 07:47:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2007/02/26/100751.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/100751.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2007/02/26/100751.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/100751.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/100751.html</trackback:ping><description><![CDATA[
		<div class="cnt">
				<p>安装提示输入序列号，没有则保留空，我暂时随便输入12345-67890-12345，先看一下他的dll能不能像aspjpeg1.3那样直接使用。安装提示重起iis服务，选否，注册组件一般不需要重起</p>
				<p>如果以前装过其他版本的aspjpeg，需要先停止iis(net stop iisadmin /y)，卸载原来的组件(regsvr32 /u c:/windows/system32/aspjpeg.dll)，然后重起iis(net start w3svc)</p>
				<p>//By xlxcn 从这里开始,</p>
				<p>从aspjpeg1.5的安装目录复制aspjpeg.dll到系统文件加的system32目录</p>
				<p>运行regsvr32 c:/windows/system32/aspjpeg.dll （根据你的系统改你的目录）</p>
				<p>aspjpeg的文档中说需要官方提供的序列号才能正常使用，如果安装过程中有输入序列号</p>
				<p>在asp中运行下面的命令更改序列号（如果没有输入过，需要在注册表中添加如下项：HKEY_LOCAL_MACHINE\Software\Persits Software\AspJpeg\RegKey）</p>
				<p>Set Jpeg = Server.CreateObject("Persits.Jpeg")<br />Jpeg.RegKey = "你的序列号"<br />可以用下面的方式查看是否注册成功：</p>
				<p>Set Jpeg = Server.CreateObject("Persits.Jpeg")<br />Response.Write Jpeg.Expires <br />我没有注册，运行了这则代码，得到的结果是2005-1-19 19:15:49。意思好像是可以使用到1月19日。</p>
				<p>如果注册成功得到的应该是9/9/9999。我用48958-77556-02411注册以后得到了9999-9-9这个结果:)操作系统时间显示方式有所不同。</p>
				<p>以下是aspjpeg1.5的安装文件，dll文件和序列号</p>
				<p>直接安装只要在aspjpeg1.5.exe安装过程中输入序列号即可，但是可能会出现ntfs目录访问权限的问题，需要手动设置安装目录对Everyone有访问权限。</p>
				<p>如果用aspjpeg.dll，请按照上面的方法安装以及添加注册表项。</p>
				<p>
						<br />aspjpeg高级使用方法介绍</p>
				<p>aspjpeg是一款非常强大的图片处理组件，纯英文版本。不过早已经有免费版和破解版，但是对其进行详细与深入介绍的文章却是不多，即使有也只牵涉到图片缩略和图片水印。可能是因为纯英文的缘故。</p>
				<p>
						<br />这里我就是针对这些问题谈谈aspjpeg的高级用法。这里的技术主要包括： <br />图片缩略 <br />图片水印 <br />安全码技术 <br />图片切割 <br />图片合并 <br />数据库支持 <br />更多不常用的方法介绍 <br />以及相关的一些实用技术 </p>
				<p>
						<br />aspjpeg唯一点不足的就是输出方式比较单一。在这里，我们主要谈将图片处理保存后再调用的这种输出方法。另外，本人比较懒，所以有些代码仍然引用于原文档，不懂的地方偶会加以解释！ </p>
				<p>
						<br />学过vb或者.net的同志肯定一看就明白了。刷子来着。呵呵。 </p>
				<p>
						<br />一、图片缩略 </p>
				<p>&lt;% <br />Set Jpeg = Server.CreateObject("Persits.Jpeg") 调用组件 <br />Path = Server.MapPath("images") &amp; "\clock.jpg" 待处理图片路径 <br />Jpeg.Open Path 打开图片 <br />高与宽为原图片的1/2 <br />Jpeg.Width = Jpeg.OriginalWidth / 2 <br />Jpeg.Height = Jpeg.OriginalHeight / 2 <br />保存图片 <br />Jpeg.Save Server.MapPath("images") &amp; "\clock_small.jpg" <br />%&gt; <br />&lt;IMG src="http://www.blogjava.net/images/clock_small.jpg"&gt; 查看处理的图片 </p>
				<p> </p>
				<p>二、图片水印 </p>
				<p>&lt;% <br />Set Jpeg = Server.CreateObject("Persits.Jpeg") <br />Jpeg.Open Server.MapPath("images/dodge_viper.jpg") <br />开始写文字 <br />Jpeg.Canvas.Font.Color = &amp;000000' red 颜色 <br />Jpeg.Canvas.Font.Family = "Courier New" 字体 <br />Jpeg.Canvas.Font.Bold = True 是否加粗 <br />Jpeg.Canvas.Print 10, 10, "Copyright (c) XYZ, Inc." <br />打印坐标x 打印坐标y 需要打印的字符 <br />以下是对图片进行边框处理 <br />Jpeg.Canvas.Pen.Color = &amp;H000000' black 颜色 <br />Jpeg.Canvas.Pen.Width = 2 画笔宽度 <br />Jpeg.Canvas.Brush.Solid = False 是否加粗处理 <br />Jpeg.Canvas.Bar 1, 1, Jpeg.Width, Jpeg.Height <br />起始X坐标 起始Y坐标 输入长度 输入高度 <br />Jpeg.Save Server.MapPath("images/dodge_viper_framed.jpg") 保存 <br />%&gt; </p>
				<p> </p>
				<p>三、安全码 </p>
				<p>安全玛的道理和加水印差不多，很多朋友问我要具体的代码技术，在这里我就写出来和大家分享，一般人我还不告诉他。呵呵。 <br />&lt;% <br />生成安全码的函数 <br />function make_randomize(max_len,w_n) max_len 生成长度，w_n：0 可能包含字母，1：只为数字 <br />randomize <br />for intcounter=1 to max_len <br />whatnext=int((1-0+1)*rnd+w_n) <br />if whatnext=0 then <br />upper=122 <br />lower=97 <br />else <br />upper=57 <br />lower=48 <br />end if <br />strnewpass=strnewpass &amp; chr(int((upper-lower+1)*rnd)+lower) <br />next <br />make_randomize=strnewpass <br />end function <br />%&gt; </p>
				<p>生成安全码的图片。当然你要预先准备一张背景图哦 </p>
				<p>&lt;%random_num=make_randomize(4,1) 生成4位数字的安全码 <br />session("random_num")=random_num 为什么调用session，没有session的安全码是完全没有意义的。呵呵 </p>
				<p>Set Jpeg = Server.CreateObject("Persits.Jpeg") 调用组件 <br />Jpeg.Open Server.MapPath("infos/random_pic/random_index.gif") 打开准备的图片 <br />Jpeg.Canvas.Font.Color = &amp;H006699 <br />Jpeg.Canvas.Font.Family = "Arial Black" <br />Jpeg.Canvas.Font.Bold = false <br />Jpeg.Canvas.PrintText 0, -2, random_num <br />jpeg.save Server.MapPath("infos/random_pic/random_index.bmp") 保存 <br />%&gt; &lt;img src="/infos/random_pic/random_index.bmp" border="0" align="absmiddle"&gt; <br />自己做做看。呵呵。 </p>
				<p> </p>
				<p>
						<br />四、图片切割 </p>
				<p>一直以来，对aspjpeg不了解的人以为是无法用它来进行切割的。 <br />其实有这样的一个方法的 <br />crop x1,y1,x2,y2 <br />切割长方型左上角x坐标，y坐标 右下角x坐标 y坐标 <br />下面我就做一个演示哈 <br />Set Jpeg = Server.CreateObject("Persits.Jpeg") <br />jpeg.open server.MapPath("/pic/1.gif") <br />jpeg.width=70 <br />Jpeg.Height = Jpeg.OriginalHeight*70 / jpeg.Originawidth <br />jpeg.crop 0,0,70,52 开始切割其实是把超过52象素的下部分去掉 <br />jpeg.save server.MapPath("/temp_pic/small_1.gif") 保存 <br />怎么样，很简单吧 </p>
				<p> </p>
				<p>五、图片合并 </p>
				<p>我们这里是要把logo图片加到dodge_viper.jpg图片上去 <br />其实，图片合并的方法也可以用来动态打水印哦 <br />Set Photo = Server.CreateObject("Persits.Jpeg") <br />PhotoPath = Server.MapPath("images") &amp; "\dodge_viper.jpg" <br />Photo.Open PhotoPath <br />Set Logo = Server.CreateObject("Persits.Jpeg") <br />LogoPath = Server.MapPath("images") &amp; "\clock.jpg" <br />Logo.Open LogoPath </p>
				<p>Logo.Width = 70 <br />Logo.Height = Logo.Width * Logo.OriginalHeight / Logo.OriginalWidth </p>
				<p>Photo.DrawImage 0, 0, Logo </p>
				<p>Photo.SendBinary 这里用了sendBinary的输出方法。当然，你也可以先保存更改后的dodge_viper.jpg，再输入也可以。我个人不大喜欢用sendBinary方法，在网速慢的时候容易出错。在速度方面也不怎样。呵呵。 </p>
				<p> </p>
				<p>六、数据库支持 </p>
				<p>这里不多说了。其实就是Binary方法，大家知道图片存进数据库只能存为二进制的文件的。所以代码就懒的写了。 </p>
				<p> </p>
				<p>七、更多方法介绍 </p>
				<p>Canvas.Line(Left, Top, Right, Bottom) <br />画一条直线 <br />Canvas.Ellipse(Left, Top, Right, Bottom) <br />画出一个椭圆 <br />Canvas.Circle(X, Y, Radius) <br />画出一个圆 <br />Canvas.Bar(Left, Top, Right, Bottom) <br />画出一个长方形，上面有代码介绍了 <br />Canvas.Font.ShadowColor <br />文字阴影颜色 <br />Canvas.Font.ShadowXOffset As Long <br />阴影X坐标设定 <br />Canvas.Font.ShadowYOffset As Long <br />Y坐标设定 <br />Canvas.Font.BkMode As String <br />文字背景 </p>
		</div>
		<br />
<img src ="http://www.blogjava.net/wangxinsh55/aggbug/100751.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2007-02-26 15:47 <a href="http://www.blogjava.net/wangxinsh55/archive/2007/02/26/100751.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个大家不常用到，却很有用的页面间传值方法</title><link>http://www.blogjava.net/wangxinsh55/archive/2007/02/09/98898.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Fri, 09 Feb 2007 00:58:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2007/02/09/98898.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/98898.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2007/02/09/98898.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/98898.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/98898.html</trackback:ping><description><![CDATA[
		<p>一、目前在ASP.NET中页面传值共有这么几种方式：<br />1、表单提交，<br />   &lt;form action= "target.aspx" method = "post" name = "form1"&gt;<br /> &lt;input name = "param1" value = "1111"/&gt;<br /> &lt;input name = "param2" value = "2222"/&gt; <br />   &lt;/form&gt;<br />   ....<br />   form1.submit();<br />   ....<br />   此种方在ASP。NET中无效，因为ASP。NET的表单总是提交到自身页面，如果要提交到别一页面，需要特殊处理。<br />2、&lt;A href="target.aspx?param1=1111&amp;param2=2222"&gt;链接地址传送&lt;/A&gt;<br />接收页面： string str = Request["param1"]<br />3、Session共享<br />发送页面：Session("param1") = "1111";  <br />按收页面  string str = Session("param1").ToString();  <br />4、Application共享<br />发送页面： Application("param1") = "1111";   <br />按收页面： string str = Application("param1").ToString();  <br />此种方法不常使用，因为Application在一个应用程序域范围共享，所有用户可以改变及设置其值，故只应用计数器等需要全局变量的地方。<br />5、Cookie<br />6、Response.Redirect()方式<br />   Response.Redirect("target.aspx?param1=1111&amp;param2=2222")<br />   接收页面： string str = Request["param1"]<br />7、Server.Transfer()方式。<br />   Server.Transfer("target.aspx?param1=1111&amp;param2=2222")<br />   接收页面： string str = Request["param1"]</p>
		<p>二、如果在两个页面间需要大量的参数要传传递，如数据查询等页面时，用1 － 6的方法传值及其不便，而第 7 种方法确有一独特的优势！但使用该方法时需要一定的设置，现简单介绍一下该方法的使用方式：<br />   以查询数据页面为例：<br />   在查询页面中设置如下公有属性(QueryPage.aspx)：<br />    public class QueryPage : System.Web.UI.Page<br />{<br />protected System.Web.UI.WebControls.TextBox txtStaDate;<br />protected System.Web.UI.WebControls.TextBox txtEndDate;<br />   ...<br />/// &lt;summary&gt;<br />/// 开始时间<br />/// &lt;/summary&gt;<br />public string StaDate<br />{<br />get{ return this.txtStaDate.Text;}<br />set{this.txtStaDate.Text = value;}<br />}<br />/// &lt;summary&gt;<br />/// 结束时间<br />/// &lt;/summary&gt;<br />public string EndDate<br />{<br />get{ return this.txtEndDate.Text;}<br />set{this.txtEndDate.Text = value;}<br />}<br />....<br />private void btnEnter_Click(object sender, System.EventArgs e)<br />{<br />Server.Transfer("ResultPage.aspx");<br />}<br />}<br />   <br />   在显示查询结果页面(ResultPage.aspx)：<br />    public class ResultPage : System.Web.UI.Page<br />{<br />   private void Page_Load(object sender, System.EventArgs e)<br />   {</p>
		<p>//转换一下即可获得前一页面中输入的数据<br />QueryPage queryPage = ( QueryPage )Context.Handler;</p>
		<p>Response.Write( "StaDate：" );<br />Response.Write( queryPage.StaDate );<br />Response.Write( "&lt;br/&gt;EndDate：" );<br />Response.Write( queryPage.EndDate );<br />  }<br />}</p>
		<p>三、如果有许多查询页面共用一个结果页面的设置方法：<br />    在这种方式中关键在于“ QueryPage queryPage = ( QueryPage )Context.Handler; ”的转换，只有转换不依赖于特定的页面时即可实现。<br />如果让所有的查询页面都继承一个接口，在该接口中定义一个方法，该方法的唯一作用就是让结果页面获得构建结果时所需的参数,就可实现多页面共享一个结果页面操作！</p>
		<p>1、先定义一个类，用该类放置所有查询参数：<br />/// &lt;summary&gt;<br />/// 结果页面中要用到的值<br />/// &lt;/summary&gt;<br />public class QueryParams<br />{<br />private string staDate;<br />private string endDate;</p>
		<p>/// &lt;summary&gt;<br />/// 开始时间<br />/// &lt;/summary&gt;<br />public string StaDate<br />{<br />get{ return this.staDate;}<br />set{this.staDate = value;}<br />}<br />/// &lt;summary&gt;<br />/// 结束时间<br />/// &lt;/summary&gt;<br />public string EndDate<br />{<br />get{ return this.endDate;}<br />set{this.endDate = value;}<br />}<br />}</p>
		<p>2、接口定义：<br />/// &lt;summary&gt;<br />/// 定义查询接口。<br />/// &lt;/summary&gt;<br />public interface IQueryParams<br />{<br />/// &lt;summary&gt;<br />/// 参数<br />/// &lt;/summary&gt;<br />QueryParams Parameters{get;}<br />}</p>
		<p>3、查询页面继承IQueryParams接口(QueryPage.aspx)：<br />    <br />/// &lt;summary&gt;<br />///查询页面，继承接口<br />/// &lt;/summary&gt;<br />public class QueryPage : System.Web.UI.Page, IQueryParams<br />{<br />protected System.Web.UI.WebControls.TextBox txtStaDate;<br />protected System.Web.UI.WebControls.TextBox txtEndDate;</p>
		<p>private QueryParams queryParams;<br />   ...<br />/// &lt;summary&gt;<br />/// 结果页面用到的参数<br />/// &lt;/summary&gt;<br />   public QueryParams Parameters<br />{<br />get<br />{<br />return queryParams;<br />}<br />}<br />....<br />private void btnEnter_Click(object sender, System.EventArgs e)<br />{<br />//赋值<br />queryParams = new QueryParams();<br />queryParams.StaDate = this.txtStaDate.Text;<br />queryParams.EndDate = this.txtEndDate.Text</p>
		<p>Server.Transfer("ResultPage.aspx");<br />}<br />}<br />4、别外的页面也如此设置<br />5、接收页面(ResultPage.aspx)：<br />   <br />public class ResultPage : System.Web.UI.Page<br />{<br />   private void Page_Load(object sender, System.EventArgs e)<br />   {</p>
		<p>QueryParams queryParams = new QueryParams();<br />IQueryParams queryInterface;<br />//实现该接口的页面<br />if( Context.Handler is IQueryParams)<br />{<br />queryInterface = ( IQueryParams )Context.Handler;<br />queryParams = queryInterface.Parameters;<br />}</p>
		<p>Response.Write( "StaDate：" );<br />Response.Write( queryParams.StaDate );<br />Response.Write( "&lt;br/&gt;EndDate：" );<br />Response.Write( queryParams.EndDate );<br />  }<br />}</p>
		<p>三、本文起因:<br />      因在工作中要作一个数据查询，参数烦多，原先是用Session传递，用完该Session传来的参数后，还需清理Session，在用Session之前还得判断该Session是否存在，极其烦琐，我想应该还有更简便的方法来实现页面间的参数传递，故上网查找，终于找到这样一种方式来实现页面间的参数传递。<br />  有不到之处，请大家指正！<br /><br /><br />我说详细一点，现在有这样一种Web开发模式：</p>
		<p>Page - 窗体容器，从.net framework接受客户端请求，并最终向客户端输出html，承载UserControl容器并组装之<br />UserControl - 功能模块，对一个特定功能进行封装，承载WebControl的容器<br />WebControl - 封装了单一的业务逻辑，和与之对应对应的HTML输出、客户端交互UI</p>
		<p>所有的请求参数由Page得到，最终传递至UserControl容纳的WebControl内<br />在这个过程中，Page（甚至是UserControl）不提供任何逻辑进行干预，UserControl/WebControl的可变特性完全由持久化的HTML代码给出<br />——也就是说，所有的Page都没有代码，如何在一个系统中做到Transfer所需要的参数便于维护、调整？</p>
		<p>页面1:<br />public class Page1 : System.Web.UI.Page<br />{<br />public UserControl1 userControl1;<br />public UserControl2 userControl2;<br />}<br />用户控件1：<br />public class UserControl2 :System.Web.UI.UserControl<br />{<br />private void btnEnter_Click(object sender, System.EventArgs e)<br />{<br />Server.Transfer("Page2.aspx");<br />}<br />}<br />//－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－<br />页面2：<br />public class Page2 : System.Web.UI.Page<br />{<br />public UserControl3 userControl3;<br />public UserControl4 userControl4;<br />}</p>
		<p>用户控件3：<br />public class UserControl3 :System.Web.UI.UserControl<br />{<br />private void Page_Load(object sender, System.EventArgs e)<br />{<br />Page1 page1 = (Page1)Context.Handler;<br />Response.Write( "属性1" );<br />Response.Write( page1.userControl1.属性1 );<br />Response.Write( "&lt;br/&gt;属性2" );<br />Response.Write( page1.userControl2.属性2 );<br />}<br />}<br />//如果在页面1中没有声明用户控件1，在页面2中将引用不到页面1中用户控件1中的公共方法<br /><br /><br /><br /><br />另一种方法是<br />SourcePage设置一个<br />    public string Name<br />    {<br />        get { return txtName.Text; }<br />    }</p>
		<p>目标页面首先声明：<br />&lt;%@ PreviousPageType VirtualPath="~/SourcePage.aspx" %&gt; </p>
		<p>然后在后台代码直接使用</p>
		<p>Response.Write(PreviousPage.Name);<br /></p>
<img src ="http://www.blogjava.net/wangxinsh55/aggbug/98898.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2007-02-09 08:58 <a href="http://www.blogjava.net/wangxinsh55/archive/2007/02/09/98898.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Asp.net 实现验证码功能的Web控件</title><link>http://www.blogjava.net/wangxinsh55/archive/2007/02/01/97162.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Thu, 01 Feb 2007 02:43:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2007/02/01/97162.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/97162.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2007/02/01/97162.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/97162.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/97162.html</trackback:ping><description><![CDATA[
		<font color="#003300">
				<strong>     </strong>
				<font size="2">Asp.net的设计方式和设计理念和其他的如Asp,Jsp,Php,Perl</font>
		</font>
		<p>
				<font size="2">等都不一样，几乎是完全的面向对象设计！代码的复用就是其</font>
		</p>
		<p>
				<font size="2">中差异较大的特点之一，Asp.net除了可以用Include以外，还提供</font>
		</p>
		<p>
				<font size="2">了比较有特点的Web控件，包括：Ascx形式和带设计时支持的控</font>
		</p>
		<p>
				<font size="2">件[本文属于后者],为了熟悉这些新概念，我自己写了个Web控件。</font>
		</p>
		<p>
				<font size="2">在实际项目中运行使用良好，以后，要有时间，我还将不断改进。</font>
		</p>
		<p>
				<strong>
						<font color="#003300" size="3">
						</font>
				</strong>
		</p>
		<p>
				<font color="#000080" size="4">
						<strong>ValidateCode控件的使用方法:</strong>
				</font>
		</p>
		<p>
				<font color="#993366" size="3">
						<strong>第一步：</strong>
				</font>
		</p>
		<p>
				<font size="2">编译我提供的原代码, 然后,在Studio.net 2003工具栏上, 选择"添加/移除项", 选中编译好的dll文件。</font>
		</p>
		<p>
				<font color="#993366" size="3">
						<strong>第二步：</strong>
				</font>
		</p>
		<p>
				<font size="2">工具栏上就会多一个Web控件ValidateCode,做好一个Web窗体,在Studio.net 2003开发界面上,直接把控件拖到WebForm上,就OK！</font>
		</p>
		<p>
				<font color="#993366" size="3">
						<strong>第三步：</strong>
				</font>
		</p>
		<p>
				<font size="2">在该控件的GraphicOK事件中获取，验证码的字符信息，用于和用户录入做比较！</font>
		</p>
		<p>
				<font color="#993366" size="3">
						<strong>最后一步：</strong>
				</font>
		</p>
		<p>
				<font size="2">在网站的根目录下，建一个temp目录（也可以自己指定目录），用于存放验证码</font>
		</p>
		<p>
				<font size="2">图片，不用担心，代码会自动删除无用的图片！</font>
		</p>
		<p>
				<font size="2">
				</font>
		</p>
		<p>
				<font color="#339966" size="3">
						<strong>原代码如下：</strong>
				</font>
		</p>
		<p>using System;<br />using System.Web.UI;<br />using System.Web.UI.WebControls;<br />using System.ComponentModel;<br />using System.IO;<br />using System.Drawing;<br />using System.Drawing.Drawing2D;<br />using System.Drawing.Imaging;</p>
		<p>namespace WebValidateCode<br />{<br /> /// &lt;summary&gt;<br /> /// ValidateCode 的摘要说明。<br /> /// 设计者:王海波 2004-11-20<br /> /// &lt;/summary&gt;<br /> /// <br /> public enum GraphicType <br /> {<br />  Jpg = 0,<br />  Gif = 1,<br />  Png = 2,<br />  Bmp = 3,<br /> }</p>
		<p>
				<br /> //[ToolboxBitmap(@"D:\DotnetApp\ValidateCode\ValidateCode.bmp") ] //设置控件在工具箱上的图标<br /> public class ValidateCode : System.Web.UI.WebControls.WebControl ,INamingContainer <br /> {<br />  private int pCodelen=5;<br />  private int pChartWidth=100;<br />  private int pChartHeight=20;</p>
		<p>  private GraphicType pChartType;<br />  <br />  private string pAuthenCode;</p>
		<p>  private string pTempImageURLPath="/temp";<br />  private string pAuthenImageFullname;<br />  private string pAuthenImageFullURL;<br />   <br />  //生成校验码的变量 start<br />  private Bitmap validateImage;<br />  private Graphics g;<br />  //生成校验码的变量 End</p>
		<p>  private TextBox txt=new TextBox(); <br />  private System.Web.UI.WebControls.Image img= new System.Web.UI.WebControls.Image(); </p>
		<p>  #region 定义控件事件<br />  <br />  public delegate void GraphicCreated(object sender, EventArgs e);<br />  public event EventHandler GraphicOK;   //在校验图片生成结束以后触发</p>
		<p>  protected virtual void OnGraphicOK(object sender, EventArgs e)<br />  {   <br />   if (GraphicOK != null) <br />   {<br />    //Invokes the delegates.<br />    GraphicOK(sender, e); <br />   }  <br />  }<br /> <br />  #endregion<br />    <br />  #region 控件属性<br />  <br />  //生成校验码的长度<br />  [Bindable(true),Browsable(true),Category("Appearance"),DefaultValue(true),Description("需要验证码的长度,建议在5~8位之间!")]<br />  public int CodeLength<br />  {<br />   get<br />   {<br />    return pCodelen;<br />   }</p>
		<p>   set<br />   {<br />    pCodelen = value;<br />   }<br />  }</p>
		<p>  //生成校验码的长度<br />  [Bindable(true),Browsable(true),Category("Appearance"),DefaultValue(true),Description("生成验证码图片的临时存放路径,要求必须是网站下的虚拟目录!")]<br />  public string TempImageURLPath<br />  {<br />   get<br />   {<br />    return pTempImageURLPath;<br />   }</p>
		<p>   set<br />   {<br />    pTempImageURLPath = value;<br />   }<br />  }</p>
		<p>  [Bindable(true),Browsable(true),Category("Appearance"),DefaultValue(GraphicType.Jpg),Description("选择生成校验图文件的类型(Jpg;Gif;Png;Bmp)!")]<br />  public GraphicType ChartType<br />  {<br />   get<br />   {<br />    return pChartType;<br />   }</p>
		<p>   set<br />   {<br />    pChartType = value;<br />   }  <br />  }</p>
		<p>
				<br />  //生成校验码图片的宽度<br />  public int ChartWidth<br />  {<br />   get<br />   {<br />    return pChartWidth;<br />   }</p>
		<p>   set<br />   {<br />    pChartWidth = value;<br />   }<br />  }</p>
		<p>  //生成校验码图片的高度<br />  public int ChartHeight<br />  {<br />   get<br />   {<br />    return pChartHeight;<br />   }</p>
		<p>   set<br />   {<br />    pChartHeight = value;<br />   }<br />  }</p>
		<p>  //需要生成的校验码<br />  public string AuthenCode<br />  {<br />   get<br />   {<br />    return pAuthenCode;<br />   }</p>
		<p>   set<br />   {<br />    pAuthenCode = value;<br />   }<br />  }</p>
		<p>  #endregion</p>
		<p>  /// &lt;summary&gt;<br />  /// 将此控件呈现给指定的输出参数。<br />  /// &lt;/summary&gt;<br />  /// &lt;param name="output"&gt; 要写出到的 HTML 编写器 &lt;/param&gt;<br />  protected override void Render(HtmlTextWriter output)<br />  {<br />        <br />   System.Web.UI.WebControls.Image objImage;<br />         //TextBox objTxt;<br />     <br />     <br />   //绘制包含的控件   <br />   objImage  = (System.Web.UI.WebControls.Image) Controls[0]; <br />   //objTxt  = (TextBox) Controls[1];     <br />   <br />   if(pAuthenCode==null)<br />      pAuthenCode=GetValidateCode();<br />              <br />   OnGraphicOK(this,EventArgs.Empty );<br />   <br />   GetRandomImage(pAuthenCode);<br />   objImage.ImageUrl=pAuthenImageFullURL;</p>
		<p>   objImage.RenderControl(output); <br />                <br />  }</p>
		<p>  /// &lt;summary&gt;<br />  /// 给控件添加子控件<br />  /// &lt;/summary&gt;<br />  protected  override  void  CreateChildControls(    )<br />  {<br />   <br />   //Controls.Add(btn);<br />   Controls.Add(img);<br />   //Controls.Add(txt);<br />  }</p>
		<p>  /// &lt;summary&gt;<br />  /// 控件Load时候属性的初始化<br />  /// &lt;/summary&gt;<br />  /// &lt;param name="e"&gt;&lt;/param&gt;<br />  protected  override  void OnLoad(System.EventArgs e)<br />  {<br />      EraseOldGraphic();   //删除过期的图片<br />  }</p>
		<p>  /// &lt;summary&gt;<br />  /// 生成随机的<br />  /// &lt;/summary&gt;<br />  private void MakeRandomFileName()<br />  {<br />   string strRandName=DateTime.Now.Ticks.ToString()+".jpg";   <br />   pAuthenImageFullname=this.Page.MapPath(TempImageURLPath)+@"\"+strRandName;<br />   pAuthenImageFullURL=TempImageURLPath+"/"+strRandName;<br />  }</p>
		<p>
				<br />  private void GetRandomImage(string strValidateCode)<br />  {   <br />   //生成随即图片的全名,和全URL<br />   MakeRandomFileName();</p>
		<p>   validateImage = new Bitmap(pChartWidth, pChartHeight, PixelFormat.Format24bppRgb); // .Format24bppRgb);<br />   g = Graphics.FromImage(validateImage);<br /> <br />   g.Clear(Color.LightGray) ;</p>
		<p>   //g.DrawString(strValidateCode , new Font("宋体",16,FontStyle.Bold),new SolidBrush(Color.DarkRed),new PointF(2,2));</p>
		<p>   for(int i=0;i&lt;strValidateCode.Length;i++)<br />   {     <br />    Random r = new Random();<br />    PointF startPos=new PointF(r.Next(3,6)+(r.Next(12,14)*i ),r.Next(-1,2) ); <br />       <br />    g.DrawString(strValidateCode.Substring(i,1) , new Font("宋体",14,FontStyle.Italic),new SolidBrush(Color.Blue),startPos);<br />   }</p>
		<p>   <br />   //g.FillRectangle(new LinearGradientBrush(new Point(0,0), new Point(120,30), Color.FromArgb(0,0,0,0),Color.FromArgb(255,255,255,255)),0,0,120,30); <br />   switch(pChartType)<br />   {<br />    case GraphicType.Jpg:<br />    <br />     validateImage.Save(pAuthenImageFullname, ImageFormat.Jpeg);<br />     break;<br /> <br />    case GraphicType.Gif:</p>
		<p>     validateImage.Save(pAuthenImageFullname, ImageFormat.Gif);<br />     break;</p>
		<p>    case GraphicType.Png:</p>
		<p>     validateImage.Save(pAuthenImageFullname, ImageFormat.Png);<br />     break;<br /> <br />    case GraphicType.Bmp:</p>
		<p>     validateImage.Save(pAuthenImageFullname, ImageFormat.Bmp);<br />     break;<br /> <br />    default:<br />     validateImage.Save(pAuthenImageFullname, ImageFormat.Jpeg);<br />     break;<br />   <br />   }<br />       <br />   validateImage.Dispose(); </p>
		<p>   g.Dispose(); <br />   <br />   <br />  <br />  }</p>
		<p>  /// &lt;summary&gt;<br />  /// 动态从数字和字母组成的元素中动态选择生成校验码<br />  /// &lt;/summary&gt;<br />  private string GetValidateCode()<br />  {<br />   char[] s = new char[]{'0','1', '2','3','4','5','6','7','8','9','a'<br />          ,'b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q'<br />          ,'r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G'<br />          ,'H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W'<br />          ,'X','Y','Z'};<br />   string num = "";<br />   Random r = new Random();</p>
		<p>   //根据用户需要的长度来定义验证码的位数<br />   for(int i = 0; i &lt; CodeLength; i++)<br />   {<br />    num += s[r.Next(0, s.Length)].ToString(); <br />   }<br />   <br />   return num;<br />  }</p>
		<p>  /// &lt;summary&gt;<br />  /// 清除时间超过20秒的临时图片记录<br />  /// &lt;/summary&gt;<br />  /// &lt;returns&gt;成功返回true,失败返回false&lt;/returns&gt;<br />  public bool EraseOldGraphic()<br />  {</p>
		<p>   try<br />   {<br />    DirectoryInfo Dinfo=new DirectoryInfo(this.Page.MapPath(pTempImageURLPath));<br />    FileInfo[] FileSet; <br /> <br />    if(Dinfo.Exists)<br />    {    <br />     switch(pChartType)<br />     {<br />      case GraphicType.Jpg:<br />    <br />       FileSet=Dinfo.GetFiles("*.jpg");<br />       break;<br /> <br />      case GraphicType.Gif:</p>
		<p>       FileSet=Dinfo.GetFiles("*.gif");<br />       break;</p>
		<p>      case GraphicType.Png:</p>
		<p>       FileSet=Dinfo.GetFiles("*.png");<br />       break;<br /> <br />      case GraphicType.Bmp:</p>
		<p>       FileSet=Dinfo.GetFiles("*.bmp");<br />       break;<br /> <br />      default:<br />       FileSet=Dinfo.GetFiles("*.jpg");<br />       break;<br />   <br />     }</p>
		<p>     foreach(FileInfo fileInfo in FileSet)<br />     {<br />      if(fileInfo.Exists)<br />      {<br />       DateTime dts=DateTime.Now;<br />       DateTime dtc=fileInfo.CreationTime;</p>
		<p>       TimeSpan ts=dts-dtc;<br />  <br />       if(ts.Seconds&gt;20)<br />       {        <br />        fileInfo.Delete(); <br />       }<br />      }<br />     }<br />    }</p>
		<p>    return true;<br />   }<br />   catch(IOException ioe)<br />   {<br />       return false;<br />   }<br />  }<br />  <br /> }<br />}<br /></p>
		<p>
		</p>
		<br />
<img src ="http://www.blogjava.net/wangxinsh55/aggbug/97162.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2007-02-01 10:43 <a href="http://www.blogjava.net/wangxinsh55/archive/2007/02/01/97162.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ajax类库的使用 </title><link>http://www.blogjava.net/wangxinsh55/archive/2007/01/25/96000.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Thu, 25 Jan 2007 09:05:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2007/01/25/96000.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/96000.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2007/01/25/96000.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/96000.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/96000.html</trackback:ping><description><![CDATA[
		<div align="left">转自msdn </div>
		<div align="left">AJAX依靠代理（broker）指派和处理往返服务器的请求。对此，.NET包装器依靠客户端XmlHttpRequest对象。多数浏览器都支持XmlHttpRequest对象，这就是选择它的原因。因为包装器的目的是隐藏XmlHttpRequest的实现，我们就不再详细讨论它了。</div>
		<div align="left">包装器本身通过将.NET函数标记为AJAX方法来工作。标记之后，AJAX就创建对应的JavaScript函数，这些函数（和任何JavaScript函数一样）作为代理可以在客户端使用XmlHttpRequest调用。这些代理再映射回服务器端函数。</div>
		<div align="left">复杂吗？并不复杂。我们来看一个例子。假设有一个.NET函数：</div>
		<div align="left">
				<font color="#ff0000">ublic int Add(int firstNumber, int secondNumber)<br />{<br />return firstNumber + secondNumber;<br />}</font>
		</div>
		<div align="left">AJAX .NET包装器将自动创建名为“Add”、带有两个参数的JavaScript函数。使用JavaScript（在客户机上）调用该函数时，请求将传递给服务器并把结果返回给客户机。</div>
		<div align="left"> </div>
		<div align="left">
				<strong>初始设置</strong>
		</div>
		<div align="left">
				<strong>
				</strong>
		</div>
		<div align="left">我们首先介绍“安装”项目中使用的.dll的步骤。如果您很清楚如何添加.dll文件引用，可以跳过这一节。</div>
		<div align="left">首先，如果还没有的话，请下载最新的AJAX版本。解压下载的文件并把ajax.dll放到项目的引用文件夹中。在Visual Studio.NET中有机Solution Explorer的“References（引用）”节点并选择Add Reference（添加引用）。在打开的对话框中，单击Browse（浏览）并找到ref/ajax.dll文件。依次单击Open（打开）和Ok（确认）。这样就可以用AJAX .NET包装器编程了。</div>
		<div align="left">建立HttpHandler</div>
		<div align="left">为了保证正常工作，第一步是在web.config中设置包装器的HttpHandler。不需要详细解释HttpHandlers是什么及其如何工作，只要知道它们用于处理ASP.NET请求就足够了。比如，所有*.aspx页面请求都由System.Web.UI.PageHandlerFactory类处理。类似的，我们让所有对ajax/*.ashx的请求由Ajax.PageHandlerFactory处理：</div>
		<div align="left">
				<font color="#ff0000">&lt;configuration&gt;<br />  &lt;system.web&gt;<br />    &lt;httpHandlers&gt;<br />      &lt;add verb="POST,GET" path="ajax/*.ashx"<br />          type="Ajax.PageHandlerFactory, Ajax" /&gt;<br />    &lt;/httpHandlers&gt;  <br />    ...<br />  &lt;system.web&gt;<br />&lt;/configuration&gt;</font>
		</div>
		<div align="left">简言之，上面的代码告诉ASP.NET，和指定路径（ajax/*.ashx）匹配的任何请求都由Ajax.PageHandlerFactory而不是默认处理程序工厂来处理。不需要创建ajax子目录，使用这个神秘的目录只是为了让其他HttpHandlers能够在自己建立的子目录中使用.ashx扩展。</div>
		<div align="left"> </div>
		<div align="left">
				<strong>建立页面</strong>
		</div>
		<div align="left">
				<strong>
				</strong>
		</div>
		<div align="left">现在我们可以开始编码了。创建一个新页面或者打开已有的页面，在file后的代码中，为Page_Load事件添加以下代码：</div>
		<div align="left">
				<font color="#ff0000">public class Index : System.Web.UI.Page{<br />  private void Page_Load(object sender, EventArgs e){<br />      Ajax.Utility.RegisterTypeForAjax(typeof(Index));      <br />      //...    <br />  }<br />  //...  <br />}</font>
		</div>
		<div align="left">调用RegisterTypeForAjax将在页面上引发后面的JavaScript（或者在页面中手工加入以下两行代码）：</div>
		<div align="left">&lt;script language="javascript" src="ajax/common.ashx"&gt;&lt;/script&gt;<br />&lt;script language="javascript" <br />src="ajax/Namespace.PageClass,AssemblyName.ashx"&gt;&lt;/script&gt;</div>
		<div align="left">其中最后一行的含义是：</div>
		<ul type="disc">
				<li>Namespace.PageClass——当前页面的名称空间和类（<a href="mailto:通常是@Page指令中Inherits属性的值">通常是@Page指令中Inherits属性的值</a>） 
</li>
				<li>AssemblyName——当前页面所属程序集的名称（通常就是项目名） </li>
		</ul>
		<div align="left">下面是AjaxPlay项目中sample.aspx页面的结果例子：</div>
		<div align="left">
				<font color="#ff0000">&lt;%@ Page Inherits="AjaxPlay.Sample" Codebehind="sample.aspx.cs" ... %&gt;<br />&lt;html&gt;<br />&lt;head&gt;<br />  &lt;script language="javascript" src="ajax/common.ashx"&gt;&lt;/script&gt;<br />  &lt;script language="javascript"<br />          src="ajax/AjaxPlay.Sample,AjaxPlay.ashx"&gt;&lt;/script&gt;<br />&lt;/head&gt;<br />  &lt;body&gt;    <br />    &lt;form id="Form1" method="post" runat="server"&gt;<br />      ...<br />    &lt;/form&gt;    <br />  &lt;/body&gt;<br />&lt;/html&gt;</font>
		</div>
		<div align="left">可以在浏览器中手工导航到src路径（查看源代码，复制粘贴路径）检查是否一切正常。如果两个路径都输出一些（似乎）毫无意义的文本，就万事大吉了。如果什么也没输出或者出现ASP.NET错误，则表明有些地方出现问题。</div>
		<div align="left">即便不知道HttpHandlers如何工作，上面的例子也很容易理解。通过web.config，我们已经保证所有对ajax/*.ashx的请求都由自定义的处理程序处理。显然，这里的两个脚本标签将由自定义的处理程序处理。</div>
		<div align="left"> </div>
		<div align="left">
				<strong>创建服务器端函数</strong>
		</div>
		<div align="left">
				<strong>
				</strong>
		</div>
		<div align="left">现在来创建可从客户端调用中异步访问的服务器端函数。因为目前还不支持所有的返回类型（不用担心，将在目前的基础上开发新的版本），我们继续使用简单的ServerSideAdd函数吧。在file后的代码中，向页面添加下列代码：</div>
		<div align="left">[Ajax.AjaxMethod()]<br /><font color="#ff0000">public int ServerSideAdd(int firstNumber, int secondNumber)<br />{<br />  return firstNumber + secondNumber;<br />}</font></div>
		<div align="left">要注意，这些函数具有Ajax.AjaxMethod属性集。该属性告诉包装器这些方法创建javaScript代理，以便在客户端调用。</div>
		<div align="left"> </div>
		<div align="left">
				<strong>客户端调用</strong>
		</div>
		<div align="left">
				<strong>
				</strong>
		</div>
		<div align="left">最后一步是用JavaScript调用该函数。AJAX包装器负责创建带有两个参数的JavaScript函数Sample.ServerSideAdd。对这种最简单的函数，只需要调用该方法并传递两个数字：</div>
		<div align="left">
				<font color="#ff0000">&lt;%@ Page Inherits="AjaxPlay.Sample" Codebehind="sample.aspx.cs" ... %&gt;<br />&lt;html&gt;<br />&lt;head&gt;<br />  &lt;script language="javascript" src="ajax/common.ashx"&gt;&lt;/script&gt;<br />  &lt;script language="javascript" <br />          src="ajax/AjaxPlay.Sample,AjaxPlay.ashx"&gt;&lt;/script&gt;<br />&lt;/head&gt;<br />  &lt;body&gt;    <br />    &lt;form id="Form1" method="post" runat="server"&gt;<br />      &lt;script language="javascript"&gt;<br />        var response = Sample.ServerSideAdd(100,99);<br />        alert(response.value);<br />      &lt;/script&gt;<br />    &lt;/form&gt;    <br />  &lt;/body&gt;<br />&lt;/html&gt;</font>
		</div>
		<div align="left">当然，我们不希望仅仅用这种强大的能力来警告用户。这就是所有客户端代理（如JavaScript Sample.ServerSideAd函数）还接受其他特性的原因。这种特性就是为了处理响应而调用的回调函数：</div>
		<div align="left">
				<font color="#ff0000">Sample.ServerSideAdd(100,99, ServerSideAdd_CallBack);<br /><br />function ServerSideAdd_CallBack(response){<br /> if (response.error != null){<br />  alert(response.error);<br />  return;<br /> }<br /> alert(response.value);<br />}</font>
		</div>
		<div align="left">从上述代码中可以看到我们指定了另外一个参数。ServerSideAdd_CallBack（同样参见上述代码）是用于处理服务器响应的客户端函数。这个回调函数接收一个响应对象，该对象公开了三个主要性质</div>
		<ul type="disc">
				<li>
						<font color="#0000ff">Value</font>——服务器端函数实际返回的值（无论是字符串、自定义对象还是数据集）。 
</li>
				<li>
						<font color="#0000ff">Error</font>——错误消息，如果有的话。 
</li>
				<li>
						<font color="#0000ff">Request</font>——xml http请求的原始响应。 
</li>
				<li>
						<font color="#0000ff">Context</font>——上下文对象。 </li>
		</ul>
		<div align="left">首先我们检查error只看看是否出现了错误。通过在服务器端函数中抛出异常，可以很容易处理error特性。在这个简化的例子中，然后用这个值警告用户。Request特性可用于获得更多信息（参见下一节）。</div>
		<div align="left"> </div>
		<div align="left">
				<font color="#ff0000">
						<strong>处理类型</strong>
				</font>
		</div>
		<div align="left"> </div>
		<div align="left">
				<strong>返回复杂类型</strong>
		</div>
		<div align="left">
				<strong>
				</strong>
		</div>
		<div align="left">Ajax包装器不仅能处理ServerSideAdd函数所返回的整数。它目前还支持integers、strings、double、booleans、DateTime、DataSets和DataTables，以及自定义类和数组等基本类型。其他所有类型都返回它们的ToString值。</div>
		<div align="left">返回的DataSets和真正的.NET DataSet差不多。假设一个服务器端函数返回DataSet，我们可以通过下面的代码在客户端显示其中的内容：</div>
		<div align="left">
				<font color="#ff0000">&lt;script language="JavaScript"&gt;<br />//Asynchronous call to the mythical "GetDataSet" server-side function<br />function getDataSet(){<br />  AjaxFunctions.GetDataSet(GetDataSet_callback);    <br />}<br />function GetDataSet_callback(response){<br />  var ds = response.value;<br />  if(ds != null &amp;&amp; typeof(ds) == "object" &amp;&amp; ds.Tables != null){<br />    var s = new Array();<br />    s[s.length] = "&lt;table border=1&gt;";<br />    for(var i=0; i&lt;ds.Tables[0].Rows.length; i++){<br />      s[s.length] = "&lt;tr&gt;";<br />      s[s.length] = "&lt;td&gt;" + ds.Tables[0].Rows[i].FirstName + "&lt;/td&gt;";<br />      s[s.length] = "&lt;td&gt;" + ds.Tables[0].Rows[i].Birthday + "&lt;/td&gt;";<br />      s[s.length] = "&lt;/tr&gt;";<br />    }<br />    s[s.length] = "&lt;/table&gt;";<br />    tableDisplay.innerHTML = s.join("");<br />  }<br />  else { <br />    alert("Error. [3001] " + response.request.responseText); <br />  }<br />}<br />&lt;/script&gt;</font>
		</div>
		<div align="left">Ajax还可以返回自定义类，唯一的要求是必须用Serializable属性标记。假设有如下的类：</div>
		<div align="left">[Serializable()]<br /><font color="#ff0000">public class User{<br />  private int _userId;<br />  private string _firstName;<br />  private string _lastName;<br /><br />  public int userId{<br />    get { return _userId; }<br />  }<br />  public string FirstName{<br />    get { return _firstName; }<br />  }<br />  public string LastName{<br />    get { return _lastName; }<br />  }<br />  public User(int _userId, string _firstName, string _lastName){<br />    this._userId = _userId;<br />    this._firstName = _firstName;<br />    this._lastName = _lastName;<br />  }<br />  public User(){}<br />  [AjaxMethod()]<br />  public static User GetUser(int userId){<br />    //Replace this with a DB hit or something :)<br />    return new User(userId,"Michael", "Schwarz");<br />  }<br />}</font></div>
		<div align="left">我们可以通过调用RegisterTypeForAjax注册GetUser代理：</div>
		<div align="left">
				<font color="#ff0000">private void Page_Load(object sender, EventArgs e){<br />  Utility.RegisterTypeForAjax(typeof(User));<br />}</font>
		</div>
		<div align="left">这样就可以在客户端异步调用GetUser：</div>
		<div align="left">
				<font color="#ff0000">&lt;script language="javascript"&gt;<br />function getUser(userId){<br />  User.GetUser(GetUser_callback);<br />}<br />function GetUser_callback(response){<br />  if (response != null &amp;&amp; response.value != null){<br />    var user = response.value;<br />    if (typeof(user) == "object"){          <br />      alert(user.FirstName + " " + user.LastName);<br />    }<br />  }<br />}<br />getUser(1);<br />&lt;/script&gt;</font>
		</div>
		<div align="left">响应中返回的值实际上是一个对象，公开了和服务器端对象相同的属性（FirstName、LastName和UserId）。</div>
		<div align="left"> </div>
		<div align="left">
				<strong>自定义转换器</strong>
		</div>
		<div align="left">
				<strong>
				</strong>
		</div>
		<div align="left">我们已经看到，Ajax .NET包装器能够处理很多不同的.NET类型。但是除了大量.NET类和内建类型以外，包装器对不能正确返回的其他类型仅仅调用ToString()。为了避免这种情况，Ajax .NET包装器允许开发人员创建对象转换器，用于在服务器和客户机之间平滑传递复杂对象。</div>
		<div align="left"> </div>
		<div align="left">
				<strong>
						<font color="#ff0000">其他事项</font>
				</strong>
		</div>
		<div align="left"> </div>
		<div align="left">
				<strong>在其他类中注册函数</strong>
		</div>
		<div align="left"> </div>
		<div align="left">上面的例子中，我们的服务器端函数都放在执行页面背后的代码中。但是，没有理由不能把这些函数放在单独的类文件中。要记住，包装器的工作方式是在指定类中发现所有带Ajax.AjaxMethod的方法。需要的类通过第二个脚本标签指定。使用Ajax.Utility.RegisterTypeForAjax，我们可以指定需要的任何类。比如，将我们的服务器端函数作为单独的类是合情合理的：</div>
		<div align="left">
				<font color="#ff0000">Public Class AjaxFunctions<br />  &lt;Ajax.AjaxMethod()&gt; _<br />  Public Function Validate(username As String, password As String) As Boolean<br />    'do something<br />    'Return something<br />  End Function<br />End Class</font>
		</div>
		<div align="left">
				<font color="#ff0000">通过指定类的类型而不是页面就可以让Ajax包装器创建代理：</font>
		</div>
		<div align="left">
				<font color="#ff0000">private void Page_Load(object sender, EventArgs e){<br />  Ajax.Utility.RegisterTypeForAjax(typeof(AjaxFunctions));<br />  //...<br />}</font>
		</div>
		<div align="left">要记住，客户端代理的名称是&lt;ClassName&gt;.&lt;ServerSideFunctionName&gt;。因此，如果ServerSideAdd函数放在上面虚构的AjaxFunctions类中，客户端调用就应该是： AjaxFunctions.ServerSideAdd(1,2)。</div>
		<div align="left"> </div>
		<div align="left">
				<strong>代理到底是如何工作的</strong>
		</div>
		<div align="left"> </div>
		<div align="left">Ajax工具生成的第二个脚本标签（也可以手工插入）传递了页面的名称空间、类名和程序集。根据这些信息，Ajax.PageHandlerFactory就能够使用反射得到具有特定属性的任何函数的详细信息。显然，处理函数查找具有AjaxMethod属性的函数并得到它们的签名（返回类型、名称和参数），从能够创建必要的客户端代理。具体而言，包装器创建一个和类同名的JavaScript对象，该对象提供代理。换句话说，给定一个带有Ajax ServerSideAdd方法的服务器端类AjaxFunctions，我们就会得到公开ServerSideAdd函数的AjaxFunction JavaScript对象。如果将浏览器指向第二个脚本标签的路径就会看到这种动作。</div>
		<div align="left"> </div>
		<div align="left">
				<strong>返回Unicode字符</strong>
		</div>
		<div align="left"> </div>
		<div align="left">Ajax .NET包装器能够从服务器向客户机返回Unicode字符。为此，数据在返回之前必须在服务器上用html编码。比如：</div>
		<div align="left">[Ajax.AjaxMethod]<br /><font color="#ff0000">public string Test1(string name, string email, string comment){<br />  string html = "";<br />  html += "Hello " + name + "&lt;br&gt;";<br />  html += "Thank you for your comment &lt;b&gt;";<br />  html += System.Web.HttpUtility.HtmlEncode(comment);<br />  html += "&lt;/b&gt;.";<br />  return html;<br />}</font></div>
		<div align="left">
				<font color="#ff0000">
				</font>
		</div>
		<div align="left">
				<strong>SessionState</strong>
		</div>
		<div align="left"> </div>
		<div align="left">服务器端函数中很可能需要访问会话信息。为此，只需要通过传递给Ajax.AjaxMethod属性的一个参数告诉Ajax启用这种功能。</div>
		<div align="left">在考察包装器会话能力的同时，我们来看看其他几个特性。这个例子中我们有一个文档管理系统，用户编辑的时候会对文档加锁。其他用户可以请求在文档可用的时候得到通知。如果没有AJAX，我们就只能等待该用户再次返回来检查请求的文档是否可用。显然不够理想。使用支持会话状态的Ajax就非常简单了。</div>
		<div align="left">首先来编写服务器端函数，目标是循环遍历用户希望编辑的documentId（保存在会话中）并返回所有已释放的文档。</div>
		<div align="left">[Ajax.AjaxMethod(HttpSessionStateRequirement.Read)]<br /><font color="#ff0000">public ArrayList DocumentReleased(){<br />  if (HttpContext.Current.Session["DocumentsWaiting"] == null){<br />    return null;<br />  }<br />  ArrayList readyDocuments = new ArrayList();<br />  int[] documents = (int[])HttpContext.Current.Session["DocumentsWaiting"];<br />  for (int i = 0; i &lt; documents.Length; ++i){<br />    Document document = Document.GetDocumentById(documents[i]);<br />    if (document != null &amp;&amp; document.Status == DocumentStatus.Ready){<br />      readyDocuments.Add(document);<br />    }        <br />  }<br />  return readyDocuments;<br />  }<br />}</font></div>
		<div align="left">要注意，我们指定了HttpSessionStateRequirement.Read值（还可以用Write和ReadWrite）。</div>
		<div align="left">现在编写使用该方法的JavaScript：</div>
		<div align="left">
				<font color="#ff0000">&lt;script language="javascript"&gt;<br />function DocumentsReady_CallBack(response){<br />  if (response.error != null){<br />    alert(response.error);<br />    return;<br />  }<br />  if (response.value != null &amp;&amp; response.value.length &gt; 0){<br />    var div = document.getElementById("status");<br />    div.innerHTML = "The following documents are ready!&lt;br /&gt;";<br />    for (var i = 0; i &lt; response.value.length; ++i){<br />      div.innerHTML += "&lt;a href=\"edit.aspx?documentId=" + response.value[i].DocumentId + "\"&gt;" + response.value[i].Name + "&lt;/a&gt;&lt;br /&gt;";<br />    }      <br />  }<br />  setTimeout('page.DocumentReleased(DocumentsReady_CallBack)', 10000);<br />}<br />&lt;/script&gt;  <br />&lt;body onload="setTimeout('Document.DocumentReleased(DocumentsReady_CallBack)', 10000);"&gt;</font>
		</div>
		<div align="left">我们的服务器端函数在页面加载时调用一次，然后每隔10秒钟调用一次。回调函数检查响应看看是否有返回值，有的话则在div标签中显示该用户可使用的新文档。</div>
		<div align="left">结束语</div>
		<div>AJAX技术已经催生了原来只有桌面开发才具备的健壮而丰富的Web界面。Ajax .NET包装器让您很容易就能利用这种新的强大技术。请注意，Ajax .NET包装器和文档仍在开发之中。</div>
		<br />
		<br />
<img src ="http://www.blogjava.net/wangxinsh55/aggbug/96000.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2007-01-25 17:05 <a href="http://www.blogjava.net/wangxinsh55/archive/2007/01/25/96000.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使DataList控件有翻页功能</title><link>http://www.blogjava.net/wangxinsh55/archive/2007/01/25/95902.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Thu, 25 Jan 2007 05:10:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2007/01/25/95902.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/95902.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2007/01/25/95902.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/95902.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/95902.html</trackback:ping><description><![CDATA[Asp.net提供了三个功能强大的列表控件：DataGrid、DataList和Repeater控件，但其中只有DataGrid控件提供分页功能。相对DataGrid，DataList和Repeater控件具有更高的样式自定义性，所以很多时候我们喜欢使用DataList或Repeater控件来显示数据。<br /><br /><br /> 实现DataList或Repeater控件的分页显示有几种方法：<br /> 1、写一个方法或存储过程，根据传入的页数返回需要显示的数据表（DataTable）<br /> 2、使用PagedDataSource类<br /><br />     本篇文章主要说怎么使用PagedDataSource类实现DataList和Repeater控件的分页显示。DataGrid控件内部也使用了PagedDataSource类，PagedDataSource 类封装 DataGrid 控件的属性，这些属性使 DataGrid 可以执行分页。<br /><br /> PagedDataSource 类的部分公共属性：<br /> AllowCustomPaging  获取或设置指示是否启用自定义分页的值。 <br /> AllowPaging   获取或设置指示是否启用分页的值。 <br /> Count    获取要从数据源使用的项数。 <br /> CurrentPageIndex   获取或设置当前页的索引。 <br /> DataSource   获取或设置数据源。 <br /> DataSourceCount   获取数据源中的项数。 <br /> FirstIndexInPage   获取页中的第一个索引。 <br /> IsCustomPagingEnabled  获取一个值，该值指示是否启用自定义分页。 <br /> IsFirstPage   获取一个值，该值指示当前页是否是首页。 <br /> IsLastPage   获取一个值，该值指示当前页是否是最后一页。 <br /> IsPagingEnabled   获取一个值，该值指示是否启用分页。 <br /> IsReadOnly   获取一个值，该值指示数据源是否是只读的。 <br /> IsSynchronized   获取一个值，该值指示是否同步对数据源的访问（线程安全）。 <br /> PageCount   获取显示数据源中的所有项所需要的总页数。 <br /> PageSize   获取或设置要在单页上显示的项数。 <br /> VirtualCount   获取或设置在使用自定义分页时数据源中的实际项数。 <br /><br />      这些属性是否和DataGrid的属性很相似？没错，DataGrid控件就是使用PagedDataSource类来实现数据分页显示的 。下面举个使用PagedDataSource类实现DataList和Repeater控件的分页显示的例子：<br /><div class="UBBPanel"><div class="UBBTitle"><img style="MARGIN: 0px 2px -3px 0px" alt="程序代码" src="http://a.5dm.cn/blog/images/code.gif" /> 程序代码</div><div class="UBBContent"><br />public void Page_Load(Object src,EventArgs e) <br />{<br />OleDbConnection objConn=new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:\test.mdb");<br />OleDbDataAdapter objCommand=new OleDbDataAdapter("select * from Users",objConn);<br />DataSet ds=new DataSet();<br />objCommand.Fill(ds);<br /><br />//对PagedDataSource 对象的相关属性赋值<br />PagedDataSource objPds = new PagedDataSource();<br />objPds.DataSource = ds.Tables[0].DefaultView;<br />objPds.AllowPaging = true;<br />objPds.PageSize = 5;<br />int CurPage;<br /><br />//当前页面从Page查询参数获取<br />if (Request.QueryString["Page"] != null)<br />  CurPage=Convert.ToInt32(Request.QueryString["Page"]);<br />else<br />  CurPage=1;<br /><br />objPds.CurrentPageIndex = CurPage-1; <br />lblCurrentPage.Text = "Page: " + CurPage.ToString();<br /><br />if (!objPds.IsFirstPage)<br />  lnkPrev.NavigateUrl=Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(CurPage-1);<br /><br />if (!objPds.IsLastPage)<br />  lnkNext.NavigateUrl=Request.CurrentExecutionFilePath+ "?Page=" + Convert.ToString(CurPage+1);<br /><br />//把PagedDataSource 对象赋给Repeater控件<br />Repeater1.DataSource=objPds;<br />Repeater1.DataBind();<br />}<br /></div></div><br />这样就可以很简单的实现DataList和Repeater控件的分页显示。但这样做有个缺点，就是每次都要把所有页的数据Select出来，DataGrid也是这样，这样会降低一点效率（大多时候体会不出来差别）；如果使用第一种方法就可以只Select出当前页的数据（实现方法请查看有关文章）<img src ="http://www.blogjava.net/wangxinsh55/aggbug/95902.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2007-01-25 13:10 <a href="http://www.blogjava.net/wangxinsh55/archive/2007/01/25/95902.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ASP.NET程序中常用的三十三种代码</title><link>http://www.blogjava.net/wangxinsh55/archive/2007/01/25/95901.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Thu, 25 Jan 2007 05:02:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2007/01/25/95901.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/95901.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2007/01/25/95901.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/95901.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/95901.html</trackback:ping><description><![CDATA[
		<p style="LINE-HEIGHT: 18pt">
				<span lang="EN-US" style="FONT-SIZE: 11pt">1. 打开新的窗口并传送参数： <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?><o:p></o:p></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">　　传送参数：<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span lang="EN-US" style="FONT-SIZE: 11pt">response.write("＜script＞window.open(’*.aspx?id="+this.DropDownList1.SelectIndex+"&amp;id1="+...+"’)＜/script＞")<br />　　接收参数：<o:p></o:p></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span lang="EN-US" style="FONT-SIZE: 11pt">string a = Request.QueryString("id");<br />string b = Request.QueryString("id1");<br />　　2.为按钮添加对话框<o:p></o:p></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span lang="EN-US" style="FONT-SIZE: 11pt">Button1.Attributes.Add("onclick","return confirm(’确认?’)");<br />button.attributes.add("onclick","if(confirm(’are you sure...?’)){return true;}else{return false;}")<br />　　3.删除表格选定记录<o:p></o:p></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span lang="EN-US" style="FONT-SIZE: 11pt">int intEmpID = (int)MyDataGrid.DataKeys[e.Item.ItemIndex];<br />string deleteCmd = "DELETE from Employee where emp_id = " + intEmpID.ToString()<br />　　4.删除表格记录警告<o:p></o:p></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span lang="EN-US" style="FONT-SIZE: 11pt">private void DataGrid_ItemCreated(Object sender,DataGridItemEventArgs e)<br />{<br />　switch(e.Item.ItemType)<br />　{<br />　　case ListItemType.Item :<br />　　case ListItemType.AlternatingItem :<br />　　case ListItemType.EditItem:<br />　　　TableCell myTableCell;<br />　　　myTableCell = e.Item.Cells[14];<br />　　　LinkButton myDeleteButton ;<br />　　　myDeleteButton = (LinkButton)myTableCell.Controls[0];<br />　　　myDeleteButton.Attributes.Add("onclick","return confirm(’您是否确定要删除这条信息’);");<br />　　　break;<br />　　default:<br />　　　break;<br />　}<o:p></o:p></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span lang="EN-US" style="FONT-SIZE: 11pt">}<br />　　5.点击表格行链接另一页<o:p></o:p></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span lang="EN-US" style="FONT-SIZE: 11pt">private void grdCustomer_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)<br />{<br />　//点击表格打开<br />　if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)<br />　　e.Item.Attributes.Add("onclick","window.open(’Default.aspx?id=" + e.Item.Cells[0].Text + "’);");<br />}<br />　　双击表格连接到另一页<o:p></o:p></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">　　在<span lang="EN-US">itemDataBind事件中<o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span lang="EN-US" style="FONT-SIZE: 11pt">if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)<br />{<br />　string OrderItemID =e.item.cells[1].Text;<br />　...<br />　e.item.Attributes.Add("ondblclick", "location.href=’../ShippedGrid.aspx?id=" + OrderItemID + "’");<br />}<br />　　双击表格打开新一页<o:p></o:p></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span lang="EN-US" style="FONT-SIZE: 11pt">if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)<br />{<br />　string OrderItemID =e.item.cells[1].Text;<br />　...<br />　e.item.Attributes.Add("ondblclick", "open(’../ShippedGrid.aspx?id=" + OrderItemID + "’)");<br />}<o:p></o:p></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span lang="EN-US" style="FONT-SIZE: 11pt">6.表格超连接列传递参数<o:p></o:p></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">＜<span lang="EN-US">asp:HyperLinkColumn Target="_blank" headertext="ID号" DataTextField="id" NavigateUrl="aaa.aspx?id=’<br />　＜%# DataBinder.Eval(Container.DataItem, "数据字段1")%＞’ &amp; name=’＜%# DataBinder.Eval(Container.DataItem, "数据字段2")%＞’ /＞<br />　　7.表格点击改变颜色<o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span lang="EN-US" style="FONT-SIZE: 11pt">if (e.Item.ItemType == ListItemType.Item ||e.Item.ItemType == ListItemType.AlternatingItem)<br />{<br />　e.Item.Attributes.Add("onclick","this.style.backgroundColor=’#99cc00’;<br />　　　 this.style.color=’buttontext’;this.style.cursor=’default’;");<br />} <br />　　写在DataGrid的_ItemDataBound里<o:p></o:p></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span lang="EN-US" style="FONT-SIZE: 11pt">if (e.Item.ItemType == ListItemType.Item ||e.Item.ItemType == ListItemType.AlternatingItem)<br />{<br />e.Item.Attributes.Add("onmouseover","this.style.backgroundColor=’#99cc00’;<br />　　　this.style.color=’buttontext’;this.style.cursor=’default’;");<br />e.Item.Attributes.Add("onmouseout","this.style.backgroundColor=’’;this.style.color=’’;");<br />}<o:p></o:p></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">　　<span lang="EN-US">8.关于日期格式<o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">　　日期格式设定<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span lang="EN-US" style="FONT-SIZE: 11pt">DataFormatString="{0:yyyy-MM-dd}"<br />　　我觉得应该在itembound事件中<o:p></o:p></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span lang="EN-US" style="FONT-SIZE: 11pt">e.items.cell["你的列"].text=DateTime.Parse(e.items.cell["你的列"].text.ToString("yyyy-MM-dd"))<br />　　9.获取错误信息并到指定页面<o:p></o:p></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">　　不要使用<span lang="EN-US">Response.Redirect,而应该使用Server.Transfer<o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">　　<span lang="EN-US">e.g<o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span lang="EN-US" style="FONT-SIZE: 11pt">// in global.asax<br />protected void Application_Error(Object sender, EventArgs e) {<br />if (Server.GetLastError() is HttpUnhandledException)<br />Server.Transfer("MyErrorPage.aspx");<o:p></o:p></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span lang="EN-US" style="FONT-SIZE: 11pt">//其余的非HttpUnhandledException异常交给ASP.NET自己处理就okay了 :)<br />}<br />　　Redirect会导致post－back的产生从而丢失了错误信息，所以页面导向应该直接在服务器端执行，这样就可以在错误处理页面得到出错信息并进行相应的处理 <o:p></o:p></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">　　<span lang="EN-US">10.清空Cookie<o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span lang="EN-US" style="FONT-SIZE: 11pt">Cookie.Expires=[DateTime];<br />Response.Cookies("UserName").Expires = 0<br />　　11.自定义异常处理<o:p></o:p></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span lang="EN-US" style="FONT-SIZE: 11pt">//自定义异常处理类 <br />using System;<br />using System.Diagnostics;<o:p></o:p></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span lang="EN-US" style="FONT-SIZE: 11pt">namespace MyAppException<br />{<br />　/// ＜summary＞<br />　/// 从系统异常类ApplicationException继承的应用程序异常处理类。<br />　/// 自动将异常内容记录到Windows NT/2000的应用程序日志<br />　/// ＜/summary＞<br />　public class AppException:System.ApplicationException<br />　{<br />　　public AppException()<br />　　{<br />　　　if (ApplicationConfiguration.EventLogEnabled)LogEvent("出现一个未知错误。");<br />　　}<o:p></o:p></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">　<span lang="EN-US">public AppException(string message)<br />　{<br />　　LogEvent(message);<br />　}<o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">　<span lang="EN-US">public AppException(string message,Exception innerException)<br />　{<br />　　LogEvent(message);<br />　　if (innerException != null)<br />　　{<br />　　　LogEvent(innerException.Message);<br />　　}<br />　}<o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">　<span lang="EN-US">//日志记录类<br />　using System;<br />　using System.Configuration;<br />　using System.Diagnostics;<br />　using System.IO;<br />　using System.Text;<br />　using System.Threading;<o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">　<span lang="EN-US">namespace MyEventLog<br />　{<br />　　/// ＜summary＞<br />　　/// 事件日志记录类，提供事件日志记录支持 <br />　　/// ＜remarks＞<br />　　/// 定义了4个日志记录方法 (error, warning, info, trace) <br />　　/// ＜/remarks＞<br />　　/// ＜/summary＞<br />　　public class ApplicationLog<br />　　{<br />　　　/// ＜summary＞<br />　　　/// 将错误信息记录到Win2000/NT事件日志中<br />　　　/// ＜param name="message"＞需要记录的文本信息＜/param＞<br />　　　/// ＜/summary＞<br />　　　public static void WriteError(String message)<br />　　　{<br />　　　　WriteLog(TraceLevel.Error, message);<br />　　　}<o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">　　　<span lang="EN-US">/// ＜summary＞<br />　　　/// 将警告信息记录到Win2000/NT事件日志中<br />　　　/// ＜param name="message"＞需要记录的文本信息＜/param＞<br />　　　/// ＜/summary＞<br />　　　public static void WriteWarning(String message)<br />　　　{<br />　　　　WriteLog(TraceLevel.Warning, message);　　<br />　　　}<o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">　　　<span lang="EN-US">/// ＜summary＞<br />　　　/// 将提示信息记录到Win2000/NT事件日志中<br />　　　/// ＜param name="message"＞需要记录的文本信息＜/param＞<br />　　　/// ＜/summary＞<br />　　　public static void WriteInfo(String message)<br />　　　{<br />　　　　WriteLog(TraceLevel.Info, message);<br />　　　}<br />　　　/// ＜summary＞<br />　　　/// 将跟踪信息记录到Win2000/NT事件日志中<br />　　　/// ＜param name="message"＞需要记录的文本信息＜/param＞<br />　　　/// ＜/summary＞<br />　　　public static void WriteTrace(String message)<br />　　　{<br />　　　　WriteLog(TraceLevel.Verbose, message);<br />　　　}<o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">　　　<span lang="EN-US">/// ＜summary＞<br />　　　/// 格式化记录到事件日志的文本信息格式<br />　　　/// ＜param name="ex"＞需要格式化的异常对象＜/param＞<br />　　　/// ＜param name="catchInfo"＞异常信息标题字符串.＜/param＞<br />　　　/// ＜retvalue＞<br />　　　/// ＜para＞格式后的异常信息字符串，包括异常内容和跟踪堆栈.＜/para＞<br />　　　/// ＜/retvalue＞<br />　　　/// ＜/summary＞<br />　　　public static String FormatException(Exception ex, String catchInfo)<br />　　　{<br />　　　　StringBuilder strBuilder = new StringBuilder();<br />　　　　if (catchInfo != String.Empty)<br />　　　　{<br />　　　　　strBuilder.Append(catchInfo).Append("\r\n");<br />　　　　}<br />　　　　strBuilder.Append(ex.Message).Append("\r\n").Append(ex.StackTrace);<br />　　　　return strBuilder.ToString();<br />　　　}<o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">　　　<span lang="EN-US">/// ＜summary＞<br />　　　/// 实际事件日志写入方法<br />　　　/// ＜param name="level"＞要记录信息的级别（error,warning,info,trace).＜/param＞<br />　　　/// ＜param name="messageText"＞要记录的文本.＜/param＞<br />　　　/// ＜/summary＞<br />　　　private static void WriteLog(TraceLevel level, String messageText)<br />　　　{<br />　　　　try<br />　　　　{ <br />　　　　　EventLogEntryType LogEntryType;<br />　　　　　switch (level)<br />　　　　　{<br />　　　　　　case TraceLevel.Error:<br />　　　　　　　LogEntryType = EventLogEntryType.Error;<br />　　　　　　　break;<br />　　　　　　case TraceLevel.Warning:<br />　　　　　　　LogEntryType = EventLogEntryType.Warning;<br />　　　　　　　break;<br />　　　　　　case TraceLevel.Info:<br />　　　　　　　LogEntryType = EventLogEntryType.Information;<br />　　　　　　　break;<br />　　　　　　case TraceLevel.Verbose:<br />　　　　　　　LogEntryType = EventLogEntryType.SuccessAudit;<br />　　　　　　　break;<br />　　　　　　default:<br />　　　　　　　LogEntryType = EventLogEntryType.SuccessAudit;<br />　　　　　　　break;<br />　　　　　}<o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">　　　　　<span lang="EN-US">EventLog eventLog = new EventLog("Application", ApplicationConfiguration.EventLogMachineName, ApplicationConfiguration.EventLogSourceName );<br />　　　　　//写入事件日志<br />　　　　　eventLog.WriteEntry(messageText, LogEntryType);<o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">　　　　<span lang="EN-US">}<br />　　　catch {} //忽略任何异常<br />　　} <br />　} //class ApplicationLog<br />}<br />12.Panel 横向滚动，纵向自动扩展<o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">＜<span lang="EN-US">asp:panel style="overflow-x:scroll;overflow-y:auto;"＞＜/asp:panel＞<br />　　13.回车转换成Tab <o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">＜<span lang="EN-US">script language="javascript" for="document" event="onkeydown"＞<br />　if(event.keyCode==13 &amp;&amp; event.srcElement.type!=’button’ &amp;&amp; event.srcElement.type!=’submit’ &amp;&amp; 　　　　event.srcElement.type!=’reset’ &amp;&amp; event.srcElement.type!=’’&amp;&amp; event.srcElement.type!=’textarea’); <br />　　　event.keyCode=9;<br />＜/script＞<o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span lang="EN-US" style="FONT-SIZE: 11pt">onkeydown="if(event.keyCode==13) event.keyCode=9"<o:p></o:p></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">　　<span lang="EN-US">14.DataGrid超级连接列<o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span lang="EN-US" style="FONT-SIZE: 11pt">DataNavigateUrlField="字段名" DataNavigateUrlFormatString="<a href="http://xx/inc/delete.aspx?ID=%7B0"><span style="LETTER-SPACING: 0pt"><font color="#333333">http://xx/inc/delete.aspx?ID={0</font></span></a>}"<br />　　15.DataGrid行随鼠标变色<o:p></o:p></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span lang="EN-US" style="FONT-SIZE: 11pt">private void DGzf_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)<br />{<br />　if (e.Item.ItemType!=ListItemType.Header)<br />　{<br />　　e.Item.Attributes.Add( "onmouseout","this.style.backgroundColor=\""+e.Item.Style["BACKGROUND-COLOR"]+"\"");<br />　　e.Item.Attributes.Add( "onmouseover","this.style.backgroundColor=\""+ "#EFF3F7"+"\"");<br />　}<br />}<br />　　16.模板列<br />www.knowsky.com<o:p></o:p></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">＜<span lang="EN-US">ASP:TEMPLATECOLUMN visible="False" sortexpression="demo" headertext="ID"＞<br />＜ITEMTEMPLATE＞<br />＜ASP:LABEL text=’＜%# DataBinder.Eval(Container.DataItem, "ArticleID")%＞’ runat="server" width="80%" id="lblColumn" /＞<br />＜/ITEMTEMPLATE＞<br />＜/ASP:TEMPLATECOLUMN＞<o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">＜<span lang="EN-US">ASP:TEMPLATECOLUMN headertext="选中"＞<br />＜HEADERSTYLE wrap="False" horizontalalign="Center"＞＜/HEADERSTYLE＞<br />＜ITEMTEMPLATE＞<br />＜ASP:CHECKBOX id="chkExport" runat="server" /＞<br />＜/ITEMTEMPLATE＞<br />＜EDITITEMTEMPLATE＞<br />＜ASP:CHECKBOX id="chkExportON" runat="server" enabled="true" /＞<br />＜/EDITITEMTEMPLATE＞<br />＜/ASP:TEMPLATECOLUMN＞<br />　　后台代码<o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span lang="EN-US" style="FONT-SIZE: 11pt">protected void CheckAll_CheckedChanged(object sender, System.EventArgs e)<br />{<br />　//改变列的选定，实现全选或全不选。<br />　CheckBox chkExport ;<br />　if( CheckAll.Checked)<br />　{<br />　　foreach(DataGridItem oDataGridItem in MyDataGrid.Items)<br />　　{<br />　　　chkExport = (CheckBox)oDataGridItem.FindControl("chkExport");<br />　　　chkExport.Checked = true;<br />　　}<br />　}<br />　else<br />　{<br />　　foreach(DataGridItem oDataGridItem in MyDataGrid.Items)<br />　　{<br />　　　chkExport = (CheckBox)oDataGridItem.FindControl("chkExport");<br />　　　chkExport.Checked = false;<br />　　}<br />　}<br />}<br />　　17.数字格式化<o:p></o:p></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">　　【＜<span lang="EN-US">%#Container.DataItem("price")%＞的结果是500.0000，怎样格式化为500.00?】<o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">＜<span lang="EN-US">%#Container.DataItem("price","{0:￥#,##0.00}")%＞<o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span lang="EN-US" style="FONT-SIZE: 11pt">int i=123456;<br />string s=i.ToString("###,###.00");<br />18.日期格式化<o:p></o:p></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">　　【<span lang="EN-US">aspx页面内：＜%# DataBinder.Eval(Container.DataItem,"Company_Ureg_Date")%＞<o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">　　显示为：<span lang="EN-US"> 2004-8-11 19:44:28<o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">　　我只想要：<span lang="EN-US">2004-8-11 】<o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">＜<span lang="EN-US">%# DataBinder.Eval(Container.DataItem,"Company_Ureg_Date","{0:yyyy-M-d}")%＞<br />　　应该如何改？<o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">　　【格式化日期】<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">　　取出来<span lang="EN-US">,一般是object((DateTime)objectFromDB).ToString("yyyy-MM-dd");<o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">　　【日期的验证表达式】<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">　　<span lang="EN-US">A.以下正确的输入格式： [2004-2-29], [2004-02-29 10:29:39 pm], [2004/12/31] <o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span lang="EN-US" style="FONT-SIZE: 11pt">^((\d{2}(([02468][048])|([13579][26]))[\-\/\s]?((((0?[13578])|(1[02]))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\-\/\s]?((0?[1-9])|([1-2][0-9])))))|(\d{2}(([02468][1235679])|([13579][01345789]))[\-\/\s]?((((0?[13578])|(1[02]))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\-\/\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))(\s(((0?[1-9])|(1[0-2]))\:([0-5][0-9])((\s)|(\:([0-5][0-9])\s))([AM|PM|am|pm]{2,2})))?$<br />　　B.以下正确的输入格式：[0001-12-31], [9999 09 30], [2002/03/03] <o:p></o:p></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span lang="EN-US" style="FONT-SIZE: 11pt">^\d{4}[\-\/\s]?((((0[13578])|(1[02]))[\-\/\s]?(([0-2][0-9])|(3[01])))|(((0[469])|(11))[\-\/\s]?(([0-2][0-9])|(30)))|(02[\-\/\s]?[0-2][0-9]))$ <br />　　【大小写转换】<o:p></o:p></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span lang="EN-US" style="FONT-SIZE: 11pt">HttpUtility.HtmlEncode(string);<br />HttpUtility.HtmlDecode(string)<br />　　19.如何设定全局变量<o:p></o:p></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">　　<span lang="EN-US">Global.asax中<o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">　　<span lang="EN-US">Application_Start()事件中<o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">　　添加<span lang="EN-US">Application[属性名] ＝ xxx;<o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">　　就是你的全局变量<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">　　<span lang="EN-US">20.怎样作到HyperLinkColumn生成的连接后，点击连接，打开新窗口？<o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">　　<span lang="EN-US">HyperLinkColumn有个属性Target,将器值设置成"_blank"即可.(Target="_blank")<o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">　　【<span lang="EN-US">ASPNETMENU】点击菜单项弹出新窗口<o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">　　在你的<span lang="EN-US">menuData.xml文件的菜单项中加入URLTarget="_blank"，如：<o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">＜<span lang="EN-US">?xml version="1.0" encoding="GB2312"?＞<br />＜MenuData ImagesBaseURL="images/"＞ <br />＜MenuGroup＞<br />＜MenuItem Label="内参信息" URL="Infomation.aspx" ＞<br />＜MenuGroup ID="BBC"＞<br />＜MenuItem Label="公告信息" URL="Infomation.aspx" URLTarget="_blank" LeftIcon="file.gif"/＞<br />＜MenuItem Label="编制信息简报" URL="NewInfo.aspx" LeftIcon="file.gif" /＞<br />......<br />　　最好将你的aspnetmenu升级到1.2版<o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">　　<span lang="EN-US">21.读取DataGrid控件TextBox值<o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span lang="EN-US" style="FONT-SIZE: 11pt">foreach(DataGrid dgi in yourDataGrid.Items)<br />{<br />　TextBox tb = (TextBox)dgi.FindControl("yourTextBoxId");<br />　tb.Text....<br />}<br />　　23.在DataGrid中有3个模板列包含Textbox分别为 DG_ShuLiang (数量) DG_DanJian(单价) DG_JinE(金额)分别在5.6.7列，要求在录入数量及单价的时候自动算出金额即:数量*单价=金额还要求录入时限制为数值型.我如何用客户端脚本实现这个功能?<o:p></o:p></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">　　〖思归〗<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">＜<span lang="EN-US">asp:TemplateColumn HeaderText="数量"＞ <br />＜ItemTemplate＞<br />＜asp:TextBox id="ShuLiang" runat=’server’ Text=’＜%# DataBinder.Eval(Container.DataItem,"DG_ShuLiang")%＞’ <br />onkeyup="DoCal()"<br />/＞<o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">＜<span lang="EN-US">asp:RegularExpressionValidator id="revS" runat="server" ControlToValidate="ShuLiang" ErrorMessage="must be integer" ValidationExpression="^\d+$" /＞<br />＜/ItemTemplate＞<br />＜/asp:TemplateColumn＞<o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">＜<span lang="EN-US">asp:TemplateColumn HeaderText="单价"＞ <br />＜ItemTemplate＞<br />＜asp:TextBox id="DanJian" runat=’server’ Text=’＜%# DataBinder.Eval(Container.DataItem,"DG_DanJian")%＞’ <br />onkeyup="DoCal()"<br />/＞<o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">＜<span lang="EN-US">asp:RegularExpressionValidator id="revS2" runat="server" ControlToValidate="DanJian" ErrorMessage="must be numeric" ValidationExpression="^\d+(\.\d*)?$" /＞<o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">＜<span lang="EN-US">/ItemTemplate＞<br />＜/asp:TemplateColumn＞<o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">＜<span lang="EN-US">asp:TemplateColumn HeaderText="金额"＞ <br />＜ItemTemplate＞<br />＜asp:TextBox id="JinE" runat=’server’ Text=’＜%# DataBinder.Eval(Container.DataItem,"DG_JinE")%＞’ /＞<br />＜/ItemTemplate＞<br />＜/asp:TemplateColumn＞＜script language="javascript"＞<br />function DoCal()<br />{<br />　var e = event.srcElement;<br />　var row = e.parentNode.parentNode;<br />　var txts = row.all.tags("INPUT");<br />　if (!txts.length || txts.length ＜ 3)<br />　　return;<o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">　<span lang="EN-US">var q = txts[txts.length-3].value;<br />　var p = txts[txts.length-2].value;<o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">　<span lang="EN-US">if (isNaN(q) || isNaN(p))<br />　　return;<o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">　<span lang="EN-US">q = parseInt(q);<br />　p = parseFloat(p);<o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">　<span lang="EN-US">txts[txts.length-1].value = (q * p).toFixed(2);<br />}<br />＜/script＞<o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span lang="EN-US" style="FONT-SIZE: 11pt">24.datagrid选定比较底下的行时，为什么总是刷新一下，然后就滚动到了最上面，刚才选定的行因屏幕的关系就看不到了。<o:p></o:p></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span lang="EN-US" style="FONT-SIZE: 11pt">page_load <br />page.smartNavigation=true<br />　　25.在Datagrid中修改数据，当点击编辑键时，数据出现在文本框中，怎么控制文本框的大小 ? <o:p></o:p></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span lang="EN-US" style="FONT-SIZE: 11pt">private void DataGrid1_ItemDataBound(obj sender,DataGridItemEventArgs e)<br />{<br />　for(int i=0;i＜e.Item.Cells.Count-1;i++)<br />　　if(e.Item.ItemType==ListItemType.EditType)<br />　　{<br />　　　e.Item.Cells[i].Attributes.Add("Width", "80px")<br />　　} <br />}<br />　　26.对话框<o:p></o:p></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span lang="EN-US" style="FONT-SIZE: 11pt">private static string ScriptBegin = "＜script language=\"JavaScript\"＞";<br />private static string ScriptEnd = "＜/script＞";<o:p></o:p></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span lang="EN-US" style="FONT-SIZE: 11pt">public static void ConfirmMessageBox(string PageTarget,string Content)<br />{<br />　string ConfirmContent="var retValue=window.confirm(’"+Content+"’);"+"if(retValue){window.location=’"+PageTarget+"’;}";<o:p></o:p></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">　<span lang="EN-US">ConfirmContent=ScriptBegin + ConfirmContent + ScriptEnd;<o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">　<span lang="EN-US">Page ParameterPage = (Page)System.Web.HttpContext.Current.Handler;<br />　ParameterPage.RegisterStartupScript("confirm",ConfirmContent);<br />　//Response.Write(strScript);<br />}<br />　　27. 将时间格式化：string aa=DateTime.Now.ToString("yyyy年MM月dd日"); <o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">　　<span lang="EN-US">1.1 取当前年月日时分秒 <o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span lang="EN-US" style="FONT-SIZE: 11pt">currentTime=System.DateTime.Now;<br />　　1.2 取当前年 <o:p></o:p></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span lang="EN-US" style="FONT-SIZE: 11pt">int 年= DateTime.Now.Year;<br />　　1.3 取当前月 <o:p></o:p></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span lang="EN-US" style="FONT-SIZE: 11pt">int 月= DateTime.Now.Month; <br />　　1.4 取当前日 <o:p></o:p></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span lang="EN-US" style="FONT-SIZE: 11pt">int 日= DateTime.Now.Day; <br />　　1.5 取当前时 <o:p></o:p></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span lang="EN-US" style="FONT-SIZE: 11pt">int 时= DateTime.Now.Hour; <br />　　1.6 取当前分 <o:p></o:p></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span lang="EN-US" style="FONT-SIZE: 11pt">int 分= DateTime.Now.Minute; <br />　　1.7 取当前秒 <o:p></o:p></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span lang="EN-US" style="FONT-SIZE: 11pt">int 秒= DateTime.Now.Second; <br />　　1.8 取当前毫秒 <o:p></o:p></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span lang="EN-US" style="FONT-SIZE: 11pt">int 毫秒= DateTime.Now.Millisecond; <br />　　28．自定义分页代码：<o:p></o:p></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">　　先定义变量 ：<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span lang="EN-US" style="FONT-SIZE: 11pt">public static int pageCount; //总页面数 <br />public static int curPageIndex=1; //当前页面 <br />　　下一页： <o:p></o:p></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span lang="EN-US" style="FONT-SIZE: 11pt">if(DataGrid1.CurrentPageIndex ＜ (DataGrid1.PageCount - 1)) <br />{ <br />　DataGrid1.CurrentPageIndex += 1; <br />　curPageIndex+=1; <br />} <o:p></o:p></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span lang="EN-US" style="FONT-SIZE: 11pt">bind(); // DataGrid1数据绑定函数 <br />　　上一页： <o:p></o:p></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span lang="EN-US" style="FONT-SIZE: 11pt">if(DataGrid1.CurrentPageIndex ＞0) <br />{ <br />　DataGrid1.CurrentPageIndex += 1; <br />　curPageIndex-=1; <br />} <o:p></o:p></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span lang="EN-US" style="FONT-SIZE: 11pt">bind(); // DataGrid1数据绑定函数 <br />　　直接页面跳转： <o:p></o:p></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span lang="EN-US" style="FONT-SIZE: 11pt">int a=int.Parse(JumpPage.Value.Trim());//JumpPage.Value.Trim()为跳转值 <o:p></o:p></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span lang="EN-US" style="FONT-SIZE: 11pt">if(a＜DataGrid1.PageCount) <br />{ <br />　this.DataGrid1.CurrentPageIndex=a; <br />} <o:p></o:p></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span lang="EN-US" style="FONT-SIZE: 11pt">bind(); <br />29．DataGrid使用： <o:p></o:p></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">　　添加删除确认：<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span lang="EN-US" style="FONT-SIZE: 11pt">private void DataGrid1_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e) <br />{ <br />　foreach(DataGridItem di in this.DataGrid1.Items) <br />　{ <br />　　if(di.ItemType==ListItemType.Item||di.ItemType==ListItemType.AlternatingItem) <br />　　{ <br />　　　((LinkButton)di.Cells[8].Controls[0]).Attributes.Add("onclick","return confirm(’确认删除此项吗?’);"); <br />　　} <br />　} <br />} <br />　　样式交替： <o:p></o:p></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span lang="EN-US" style="FONT-SIZE: 11pt">ListItemType itemType = e.Item.ItemType; <o:p></o:p></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span lang="EN-US" style="FONT-SIZE: 11pt">if (itemType == ListItemType.Item ) <br />{ <br />　e.Item.Attributes["onmouseout"] = "this.style.backgroundColor=’#FFFFFF’;"; <br />　e.Item.Attributes["onmouseover"] = "this.style.backgroundColor=’#d9ece1’;cursor=’hand’;" ; <br />} <br />else if( itemType == ListItemType.AlternatingItem) <br />{ <br />　e.Item.Attributes["onmouseout"] = "this.style.backgroundColor=’#a0d7c4’;"; <br />　e.Item.Attributes["onmouseover"] = "this.style.backgroundColor=’#d9ece1’;cursor=’hand’;" ; <br />} <br />　　添加一个编号列： <o:p></o:p></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span lang="EN-US" style="FONT-SIZE: 11pt">DataTable dt= c.ExecuteRtnTableForAccess(sqltxt); //执行sql返回的DataTable <br />DataColumn dc=dt.Columns.Add("number",System.Type.GetType("System.String")); <o:p></o:p></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span lang="EN-US" style="FONT-SIZE: 11pt">for(int i=0;i＜dt.Rows.Count;i++) <br />{ <br />　dt.Rows[i]["number"]=(i+1).ToString(); <br />} <o:p></o:p></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span lang="EN-US" style="FONT-SIZE: 11pt">DataGrid1.DataSource=dt; <br />DataGrid1.DataBind(); <br />　　DataGrid1中添加一个CheckBox，页面中添加一个全选框 <o:p></o:p></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span lang="EN-US" style="FONT-SIZE: 11pt">private void CheckBox2_CheckedChanged(object sender, System.EventArgs e) <br />{ <br />　foreach(DataGridItem thisitem in DataGrid1.Items) <br />　{ <br />　　((CheckBox)thisitem.Cells[0].Controls[1]).Checked=CheckBox2.Checked; <br />　} <br />} <br />　　将当前页面中DataGrid1显示的数据全部删除 <o:p></o:p></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span lang="EN-US" style="FONT-SIZE: 11pt">foreach(DataGridItem thisitem in DataGrid1.Items) <br />{ <br />　if(((CheckBox)thisitem.Cells[0].Controls[1]).Checked) <br />　{ <br />　　string strloginid= DataGrid1.DataKeys[thisitem.ItemIndex].ToString(); <br />　　Del (strloginid); //删除函数 <br />　} <br />} <br />　　30．当文件在不同目录下，需要获取数据库连接字符串（如果连接字符串放在Web.config，然后在Global.asax中初始化） <o:p></o:p></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">　　在<span lang="EN-US">Application_Start中添加以下代码： <o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span lang="EN-US" style="FONT-SIZE: 11pt">Application["ConnStr"]=this.Context.Request.PhysicalApplicationPath+ConfigurationSettings.<br />　　　AppSettings["ConnStr"].ToString();<br />　　31． 变量.ToString() <o:p></o:p></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">　　字符型转换 转为字符串<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span lang="EN-US" style="FONT-SIZE: 11pt">12345.ToString("n"); //生成 12,345.00 <br />12345.ToString("C"); //生成 ￥12,345.00 <br />12345.ToString("e"); //生成 1.234500e+004 <br />12345.ToString("f4"); //生成 12345.0000 <br />12345.ToString("x"); //生成 3039 (16进制) <br />12345.ToString("p"); //生成 1,234,500.00% <br />　　32、变量.Substring(参数1,参数2); <o:p></o:p></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">　　截取字串的一部分，参数<span lang="EN-US">1为左起始位数，参数2为截取几位。 如：string s1 = str.Substring(0,2); <o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">　　<span lang="EN-US">33．在自己的网站上登陆其他网站：(如果你的页面是通过嵌套方式的话，因为一个页面只能有一个FORM，这时可以导向另外一个页面再提交登陆信息) <o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">＜<span lang="EN-US">SCRIPT language="javascript"＞ <br />＜!-- <br />　function gook(pws) <br />　{ <br />　　frm.submit(); <br />　} <br />//--＞ <o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">＜<span lang="EN-US">/SCRIPT＞＜body leftMargin="0" topMargin="0" "gook()" marginwidth="0" marginheight="0"＞ <br />＜form name="frm" action=" <a href="http://220.194.55.68:6080/login.php?retid=7259"><span style="LETTER-SPACING: 0pt"><font color="#333333">http://220.194.55.68:6080/login.php?retid=7259</font></span></a> " method="post"＞ <br />＜tr＞ <br />＜td＞<br />＜input id="f_user" type="hidden" size="1" name="f_user" runat="server"＞<br />＜input id="f_domain" type="hidden" size="1" name="f_domain" runat="server"＞<br />＜input class="box" id="f_pass" type="hidden" size="1" name="pwshow" runat="server"＞ <o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">＜<span lang="EN-US">INPUT id="lng" type="hidden" maxLength="20" size="1" value="5" name="lng"＞<br />＜INPUT id="tem" type="hidden" size="1" value="2" name="tem"＞ <o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">＜<span lang="EN-US">/td＞ <o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">＜<span lang="EN-US">/tr＞ <o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">＜<span lang="EN-US">/form＞ <br />　　文本框的名称必须是你要登陆的网页上的名称，如果源码不行可以用vsniffer 看看。 <o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span style="FONT-SIZE: 11pt">　　下面是获取用户输入的登陆信息的代码：<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span lang="EN-US" style="FONT-SIZE: 11pt">string name; <br />name=Request.QueryString["EmailName"]; <o:p></o:p></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span lang="EN-US" style="FONT-SIZE: 11pt">try <br />{ <br />　int a=name.IndexOf("@",0,name.Length); <br />　f_user.Value=name.Substring(0,a); <br />　f_domain.Value=name.Substring(a+1,name.Length-(a+1)); <br />　f_pass.Value=Request.QueryString["Psw"]; <br />} <o:p></o:p></span>
		</p>
		<p style="LINE-HEIGHT: 18pt">
				<span lang="EN-US" style="FONT-SIZE: 11pt">catch <br />{ <br />　Script.Alert("错误的邮箱!"); <br />　Server.Transfer("index.aspx"); <br />} <o:p></o:p></span>
		</p>
<img src ="http://www.blogjava.net/wangxinsh55/aggbug/95901.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2007-01-25 13:02 <a href="http://www.blogjava.net/wangxinsh55/archive/2007/01/25/95901.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个不错的asp.net教程网站 http://chs.gotdotnet.com/quickstart/aspplus/doc/writingservices.aspx</title><link>http://www.blogjava.net/wangxinsh55/archive/2007/01/24/95679.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Wed, 24 Jan 2007 02:34:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2007/01/24/95679.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/95679.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2007/01/24/95679.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/95679.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/95679.html</trackback:ping><description><![CDATA[
		<p>网址如题<a href="http://chs.gotdotnet.com/quickstart/aspplus/doc/writingservices.aspx">http://chs.gotdotnet.com/quickstart/aspplus/doc/writingservices.aspx</a></p>
<img src ="http://www.blogjava.net/wangxinsh55/aggbug/95679.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2007-01-24 10:34 <a href="http://www.blogjava.net/wangxinsh55/archive/2007/01/24/95679.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Microsoft Application Blocks for .NET</title><link>http://www.blogjava.net/wangxinsh55/archive/2007/01/22/95239.html</link><dc:creator>SIMONE</dc:creator><author>SIMONE</author><pubDate>Mon, 22 Jan 2007 03:06:00 GMT</pubDate><guid>http://www.blogjava.net/wangxinsh55/archive/2007/01/22/95239.html</guid><wfw:comment>http://www.blogjava.net/wangxinsh55/comments/95239.html</wfw:comment><comments>http://www.blogjava.net/wangxinsh55/archive/2007/01/22/95239.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangxinsh55/comments/commentRss/95239.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangxinsh55/services/trackbacks/95239.html</trackback:ping><description><![CDATA[
		<div class="postText">
				<h1 class="dtH1">
						<a name="daab-rm">
						</a>
						<font class="108v">Microsoft Application Blocks for .NET</font>
				</h1>
				<h4 class="dtH1">Data Access Application Block 概述</h4>
				<div>
				</div>
				<div>
				</div>
				<!--NONSCROLLING BANNER END-->
				<div id="nstext" valign="bottom">
						<div id="smpMgrCell" style="FLOAT: right; WIDTH: 230px">
						</div>
						<p>Chris Brooks、Graeme Malcolm、Alex Mackman、Edward Jezierski<br />Microsoft Corporation</p>
						<p>2002 年 4 月</p>
						<p>
								<strong>摘要：</strong>Data Access Application Block 是一个 .NET 组件，包含优化的数据访问代码，可以帮助用户调用存储过程以及向 SQL Server 数据库发出 SQL 文本命令。它返回 SqlDataReader、DataSet 和 XmlReader 对象。您可以在自己的 .NET 应用程序中将其作为构造块来使用，以减少需要创建、测试和维护的自定义代码的数量。您可以下载完整的 C# 和 Visual Basic .NET 源代码以及综合文档。 </p>
						<h2 class="dtH1">简介</h2>
						<p>您是否正在从事 .NET 应用程序数据访问代码的设计和开发？您是否觉得自己总是在反复编写相同的数据访问代码？您是否曾经将数据访问代码包装在 Helper 函数中，以便能够在一行中调用存储过程？如果是，那么 Microsoft® Data Access Application Block for .NET 正是为您设计的。</p>
						<p>Data Access Application Block 将访问 Microsoft SQL Server™ 数据库的性能和资源管理方面的最佳经验封装在一起。您可以很方便地在自己的 .NET 应用程序中将其作为构造块使用，从页减少了需要创建、测试和维护的自定义代码的数量。</p>
						<p>尤其是，Data Access Application Block 可以帮助您： </p>
						<ul type="disc">
								<li>调用存储过程或 SQL 文本命令。 
</li>
								<li>指定参数详细信息。 
</li>
								<li>返回 SqlDataReader、DataSet 或 XmlReader 对象。 </li>
						</ul>
						<p>例如，在引用了 Data Access Application Block 的应用程序中，您可以简单地在一行代码中调用存储过程并生成 DataSet，如下所示：</p>
						<pre class="code">[Visual Basic]
Dim ds As DataSet = SqlHelper.ExecuteDataset( _
      connectionString, _
      CommandType.StoredProcedure, _
      "getProductsByCategory", _
      new SqlParameter("@CategoryID", categoryID))
 
[C#]
DataSet ds = SqlHelper.ExecuteDataset( 
      connectionString,
      CommandType.StoredProcedure,
      "getProductsByCategory",
      new SqlParameter("@CategoryID", categoryID)); 
  
  </pre>
						<blockquote class="dtBlock">
								<strong class="le">注意：</strong>
								<code>
								</code>Application Block for .NET（用于 .NET 的应用程序块）是基于对成功的 .NET 应用程序进行详细研究而设计的。它以源代码的形式提供，您可以原样使用，也可以针对自己的应用程序进行自定义。该应用程序块并不代表未来 Microsoft ADO.NET 程序库的发展方向。Microsoft ADO.NET 程序库是为在各种使用情况下实现对数据访问行为的精确控制而建立的。将来的 ADO.NET 版本可能会使用不同的模型来实现这个方案。</blockquote>
						<p>本概述的其余部分包括以下内容：</p>
						<p>
								<a href="http://www.microsoft.com/china/msdn/archives/library/dnbda/html/daab-rm.asp#daab-rm_whatsincluded" target="_self">Data Access Application Block 包括哪些内容？</a>
						</p>
						<p>
								<a href="http://www.microsoft.com/china/msdn/archives/library/dnbda/html/daab-rm.asp#daab-rm_downloadingandinstallingthedaab" target="_self">下载和安装 Data Access Application Block</a>
						</p>
						<p>
								<a href="http://www.microsoft.com/china/msdn/archives/library/dnbda/html/daab-rm.asp#daab-rm_usingthedaab" target="_self">使用 Data Access Application Block</a>
						</p>
						<p>
								<a href="http://www.microsoft.com/china/msdn/archives/library/dnbda/html/daab-rm.asp#daab-rm_internaldesign" target="_self">内部设计</a>
						</p>
						<p>
								<a href="http://www.microsoft.com/china/msdn/archives/library/dnbda/html/daab-rm.asp#daab-rm_faq" target="_self">常见问题</a>
						</p>
						<p>
								<a href="http://www.microsoft.com/china/msdn/archives/library/dnbda/html/daab-rm.asp#daab-rm_feedbackandsupport" target="_self">反馈和支持</a>
						</p>
						<p>
								<a href="http://www.microsoft.com/china/msdn/archives/library/dnbda/html/daab-rm.asp#daab-rm_collaborators" target="_self">合作者</a>
						</p>
						<h2 class="dtH1">
								<a name="daab-rm_whatsincluded">
								</a>Data Access Application Block 包括哪些内容？</h2>
						<p>提供了 Data Access Application Block 的源代码以及快速入门示例应用程序，您可以使用这些应用程序测试其功能。Data Access Application Block 还包括综合文档，可以帮助您使用和了解所提供的代码。</p>
						<h3 class="dtH1">Visual Studio .NET 项目</h3>
						<p>提供了 Data Access Application Block 的 Microsoft Visual Basic® .NET 和 Microsoft Visual C#™ 源代码，以及每种语言的快速入门示例客户端应用程序，您可以使用这些应用程序测试常见的方案。这有助于加深您对 Data Access Application Block 的工作原理的了解。您还可以自定义源代码以满足自己的需要。</p>
						<p>您可以编译 Visual Basic 和 C# Microsoft.ApplicationBlocks.Data 项目，以生成一个名为 <strong>Microsoft.ApplicationBlocks.Data.dll</strong> 的程序集。该程序集包括一个 <strong>SqlHelper</strong> 类（其中包含用于执行数据库命令的核心功能）和一个 <strong>SqlhelperParameterCache</strong> 类（提供参数发现和缓存功能）。</p>
						<h3 class="dtH1">文档</h3>
						<p>Data Access Application Block 的文档主要包括以下内容： </p>
						<ul type="disc">
								<li>
										<strong>使用 Data Access Application Block 开发应用程序</strong>。本部分包括快速入门示例，其中包含多种常见的使用情况，可以帮助您快速轻松地掌握 Data Access Application Block（数据访问应用程序块）的使用。 
</li>
								<li>
										<strong>Data Access Application Block 的设计与实现</strong>。本部分包括背景设计原理信息，以便用户深入了解 Data Access Application Block 的设计与实现。 
</li>
								<li>
										<strong>部署和运行</strong>。本部分包括安装信息，其中包含部署和更新选项以及与安全性有关的信息。 
</li>
								<li>
										<strong>参考</strong>。本部分包含综合的 API 参考，其中详细介绍了构成 Data Access Application Block 的类和接口。 </li>
						</ul>
						<h3 class="dtH1">系统要求</h3>
						<p>要运行 Data Access Application Block，需要满足以下要求： </p>
						<ul type="disc">
								<li>Microsoft Windows® 2000、Windows XP Professional 
</li>
								<li>
										<a href="http://msdn.microsoft.com/downloads/default.asp?url=/downloads/sample.asp?url=/msdn-files/027/000/976/msdncompositedoc.xml&amp;frame=true">.NET Framework SDK</a>（英文）的 RTM 版本 
</li>
								<li>Visual Studio® .NET 的 RTM 版本（推荐，但不必需） 
</li>
								<li>SQL Server 7.0 或更高版本的数据库服务器 </li>
						</ul>
						<h2 class="dtH1">
								<a name="daab-rm_downloadingandinstallingthedaab">
								</a>下载并安装 Data Access Application Block</h2>
						<p>您可以获取一个包含已签名的 Data Access Application Block 程序集和综合文档的 Windows 安装程序文件。</p>
						<p>安装进程将在您的“程序”菜单中创建一个 <strong>Microsoft Application Blocks for .NET</strong>（用于 .NET 的 Microsoft 应用程序块）子菜单。该子菜单中有一个 <strong>Data Access</strong>（数据访问）子菜单，其中包括用于启动文档的选项和用于启动 Data Access Application Block Visual Studio .NET 解决方案的选项。</p>
						<p>请转到 <a href="http://msdn.microsoft.com/downloads/default.asp?URL=/downloads/sample.asp?url=/msdn-files/027/001/942/msdncompositedoc.xml">MSDN Downloads</a>（英文）进行下载。</p>
						<h2 class="dtH1">
								<a name="daab-rm_usingthedaab">
								</a>使用 Data Access Application Block</h2>
						<p>本节讨论如何使用 Data Access Application Block 来执行数据库命令和管理参数。图 1 显示了 Data Access Application Block 的主要元素。</p>
						<p class="fig">
								<code>
										<img alt="" src="http://www.microsoft.com/china/msdn/Archives/library/dnbda/images/daab-rm1.gif" border="0" />
								</code>
						</p>
						<p class="label">
								<strong>图 1：Data Access Application Block</strong>
						</p>
						<p>
								<strong>SqlHelper</strong> 类提供了一组静态方法，可以用来向 SQL Server 数据库发出许多各种不同类型的命令。</p>
						<p>
								<strong>SqlHelperParameterCache</strong> 类提供命令参数缓存功能，可以用来提高性能。该类由许多 <strong>Execute</strong> 方法（尤其是那些只运行存储过程的重写方法）在内部使用。数据访问客户端也可以直接使用它来缓存特定命令的特定参数集。</p>
						<h3 class="dtH1">使用 SqlHelper 类执行命令</h3>
						<p>
								<strong>SqlHelper</strong> 类提供了五种 <strong>Shared</strong> (Visual Basic) 或 <strong>static</strong> (C#) 方法，它们是：<strong>ExecuteNonQuery</strong>、<strong>ExecuteDataset</strong>、<strong>ExecuteReader</strong>、<strong>ExecuteScalar</strong> 和 <strong>ExecuteXmlReader</strong>。实现的每种方法都提供一组一致的重载。这提供了一种很好的使用 <strong>SqlHelper</strong> 类来执行命令的模式，同时为开发人员选择访问数据的方式提供了必要的灵活性。每种方法的重载都支持不同的方法参数，因此开发人员可以确定传递连接、事务和参数信息的方式。类中实现的所有方法都支持以下重载：</p>
						<pre class="code">[Visual Basic]
Execute* (ByVal connection As SqlConnection, _
          ByVal commandType As CommandType, _
          ByVal CommandText As String)

Execute* (ByVal connection As SqlConnection, _
          ByVal commandType As CommandType, _
          ByVal commandText As String, _
          ByVal ParamArray commandParameters() As SqlParameter)

Execute* (ByVal connection As SqlConnection, _
          ByVal spName As String, _
          ByVal ParamArray parameterValues() As Object)

Execute* (ByVal transaction As SqlTransaction, _
          ByVal commandType As CommandType, _
          ByVal commandText As String)

Execute* (ByVal transaction As SqlTransaction, _
          ByVal commandType As CommandType, _
          ByVal commandText As String, _
          ByVal ParamArray commandParameters() As SqlParameter)

Execute* (ByVal transaction As SqlTransaction, _
          ByVal spName As String, _
          ByVal ParamArray parameterValues() As Object)

[C#]
Execute* (SqlConnection connection, CommandType commandType, 
          string commandText)

Execute* (SqlConnection connection, CommandType commandType,
          string commandText, params SqlParameter[] commandParameters)

Execute* (SqlConnection connection, string spName, 
          params object[] parameterValues)

Execute* (SqlConnection connection, 
          CommandType commandType, string commandText)

Execute* (SqlConnection connection,
          CommandType commandType, string commandText, 
          params SqlParameter[] commandParameters)

Execute* (SqlConnection connection,
          string spName, params object[] parameterValues)
</pre>
						<p>除这些重载以外，除 <strong>ExecuteXmlReader</strong> 之外的其他方法还提供了另一种重载：允许将连接信息作为连接字符串而不是连接对象来传递，如下面的方法签名所示：</p>
						<pre class="code">[Visual Basic]
Execute* (ByVal connectionString As String, _
          ByVal commandType As CommandType, _
          ByVal commandText As String)

Execute* (ByVal connectionString As String, _
          ByVal commandType As CommandType, _
          ByVal commandText As String, _
          ByVal ParamArray commandParameters() As SqlParameter)

Execute* (ByVal connectionString As String, _
          ByVal spName As String, _
          ByVal ParamArray parameterValues() As Object)

[C#]
Execute* (string connectionString, CommandType commandType, 
          string commandText)

Execute* (string connectionString, CommandType commandType, 
          string commandText, 
          params SqlParameter[] commandParameters)

Execute* (string connectionString, string spName, 
          params object[] parameterValues)
</pre>
						<blockquote class="dtBlock">
								<strong>
										<strong class="le">注意：</strong>
										<code>
										</code>
								</strong>
								<strong>ExecuteXmlReader</strong> 不支持连接字符串，因为：与 <strong>SqlDataReader</strong> 对象不同，<strong>XmlReader</strong> 对象在 <strong>XmlReader</strong> 关闭时没有提供自动关闭连接的方法。如果客户端传递了连接字符串，那么当客户端完成对 <strong>XmlReader</strong> 的操作后，将无法关闭与 <strong>XmlReader</strong> 相关联的连接对象。</blockquote>
						<p>通过参考 Data Access Application Block 程序集并导入 Microsoft.ApplicationBlocks.Data 命名空间，您可以轻松编写使用任何一种 <strong>SqlHelper</strong> 类方法的代码，如下面的代码示例所示：</p>
						<pre class="code">[Visual Basic]
Imports Microsoft.ApplicationBlocks.Data

[C#]
using Microsoft.ApplicationBlocks.Data;
  </pre>
						<p>导入命名空间后，您可以调用任何 Execute* 方法，如下面的代码示例所示：</p>
						<pre class="code">[Visual Basic]
Dim ds As DataSet = SqlHelper.ExecuteDataset( _
   "SERVER=(local);DATABASE=Northwind;INTEGRATED SECURITY=True;",
     _
   CommandType.Text, "SELECT * FROM Products")

[C#]
DataSet ds = SqlHelper.ExecuteDataset( 
   "SERVER=DataServer;DATABASE=Northwind;INTEGRATED
     SECURITY=sspi;", _
   CommandType.Text, "SELECT * FROM Products");
</pre>
						<h3 class="dtH1">使用 SqlHelperParameterCache 类管理参数</h3>
						<p>
								<strong>SqlHelperParameterCache</strong> 类提供了三种可以用来管理参数的公共共享方法。它们是： </p>
						<ul type="disc">
								<li>
										<strong>CacheParameterSet</strong>。用于将 <strong>SqlParameters</strong> 数组存储到缓存中。 
</li>
								<li>
										<strong>GetCachedParameterSet</strong>。用于检索缓存的参数数组的副本。 
</li>
								<li>
										<strong>GetSpParameterSet</strong>。一种重载方法，用于检索指定存储过程的相应参数（首先查询一次数据库，然后缓存结果以便将来查询）。 </li>
						</ul>
						<h4 class="dtH1">缓存和检索参数</h4>
						<p>通过使用 <strong>CacheParameterSet</strong> 方法，可以缓存 <strong>SqlParameter</strong> 对象数组。此方法通过将连接字符串和命令文本连接起来创建一个键，然后将参数数组存储在 <strong>Hashtable</strong> 中。</p>
						<p>要从缓存中检索参数，请使用 <strong>GetCachedParameterSet</strong> 方法。此方法将返回一个 SqlParameter 对象数组，这些对象已使用缓存（与传递给该方法的连接字符串和命令文本相对应）中的参数的名称、值、方向和数据类型等进行了初始化。</p>
						<blockquote class="dtBlock">
								<strong class="le">注意：</strong>
								<code>
								</code>用作参数集的键的连接字符串通过简单的字符串比较进行匹配。用于从 GetCachedParameterSet 中检索参数的连接字符串必须与用来通过 CacheParameterSet 来存储这些参数的连接字符串完全相同。语法不同的连接字符串即使语义相同，也不会被认为是匹配的。</blockquote>
						<p>以下代码显示了如何使用 SqlHelperParameterCache 类来缓存和检索 Transact-SQL 语句的参数。</p>
						<pre class="code">[Visual Basic]
' 初始化连接字符串和命令文本
' 它们将构成用来存储和检索参数的键
Const CONN_STRING As String = _
  "SERVER=(local); DATABASE=Northwind; INTEGRATED SECURITY=True;"
Dim sql As String = _
       "SELECT ProductName FROM Products " + _
       "WHERE Category=@Cat AND SupplierID = @Sup"

' 缓存参数
Dim paramsToStore(1) As SqlParameter
paramsToStore(0) = New SqlParameter("@Cat", SqlDbType.Int)
paramsToStore(1) = New SqlParameter("@Sup", SqlDbType.Int)
SqlHelperParameterCache.CacheParameterSet(CONN_STRING, _
                                          sql, _
                                          paramsToStore)

' 从缓存中检索参数
Dim storedParams(1) As SqlParameter
storedParams = SqlHelperParameterCache.GetCachedParameterSet( _
                                                 CONN_STRING, sql)
storedParams(0).Value = 2
storedParams(1).Value = 3

' 在命令中使用参数
Dim ds As DataSet
ds = SqlHelper.ExecuteDataset(CONN_STRING, _
                              CommandType.Text, _
                              sql, storedParams)

[C#]
// 初始化连接字符串和命令文本
// 它们将构成用来存储和检索参数的键
const string CONN_STRING =
  "SERVER=(local); DATABASE=Northwind; INTEGRATED SECURITY=True;";
string spName = "SELECT ProductName FROM Products " + 
                "WHERE Category=@Cat AND SupplierID = @Sup";

// 缓存参数
SqlParameter[] paramsToStore = new SqlParameter[2];
paramsToStore[0] = New SqlParameter("@Cat", SqlDbType.Int);
paramsToStore[1] = New SqlParameter("@Sup", SqlDbType.Int);
SqlHelperParameterCache.CacheParameterSet(CONN_STRING, 
                                          sql, 
                                          paramsToStore);

// 从缓存中检索参数
SqlParameter storedParams = new SqlParameter[2];
storedParams = SqlHelperParameterCache.GetCachedParameterSet(
                                              CONN_STRING, sql);
storedParams(0).Value = 2;
storedParams(1).Value = 3;

// 在命令中使用参数
DataSet ds;
ds = SqlHelper.ExecuteDataset(CONN_STRING, 
                              CommandType.StoredProcedure,
                              sql, storedParams);
</pre>
						<h4 class="dtH1">检索存储过程参数</h4>
						<p>
								<strong>SqlHelperParameterCache</strong> 还提供了针对特定存储过程检索参数数组的方法。一种名为 <strong>GetSpParameterSet</strong> 的重载方法提供了此功能，它包含两种实现。该方法尝试从缓存中检索特定存储过程的参数。如果这些参数尚未被缓存，则使用 .NET 的 SqlCommandBuilder 类从内部检索，并将它们添加到缓存中，以便用于后续的检索请求。然后，为每个参数指定相应的参数设置，最后将这些参数以数组形式返回给客户端。以下代码显示了如何检索 Northwind 数据库中 <strong>SalesByCategory</strong> 存储过程的参数。</p>
						<pre class="code">[Visual Basic]
' 初始化连接字符串和命令文本
' 它们将构成用来存储和检索参数的键
Const CONN_STRING As String = _
  "SERVER=(local); DATABASE=Northwind; INTEGRATED SECURITY=True;"
Dim spName As String = "SalesByCategory"

' 检索参数
Dim storedParams(1) As SqlParameter
storedParams = SqlHelperParameterCache.GetSpParameterSet( _
                                          CONN_STRING, spName)
storedParams(0).Value = "Beverages"
storedParams(1).Value = "1997"

' 在命令中使用参数
Dim ds As DataSet
ds = SqlHelper.ExecuteDataset(CONN_STRING, _
                              CommandType.StoredProcedure, _
                              spName, storedParams)

[C#]
// 初始化连接字符串和命令文本
// 它们将构成用来存储和检索参数的键
const string CONN_STRING = 
  "SERVER=(local); DATABASE=Northwind; INTEGRATED SECURITY=True;";
string spName = "SalesByCategory";

// 检索参数
SqlParameter storedParams = new SqlParameter[2];
storedParams = SqlHelperParameterCache.GetSpParameterSet(
                                          CONN_STRING, spName);
storedParams[0].Value = "Beverages";
storedParams[1].Value = "1997";

// 在命令中使用参数
DataSet ds;
ds = SqlHelper.ExecuteDataset(CONN_STRING, 
                              CommandType.StoredProcedure,
                              spName, storedParams);
</pre>
						<h2 class="dtH1">
								<a name="daab-rm_internaldesign">
								</a>内部设计</h2>
						<p>Data Access Application Block 包含了完整的源代码和有关其设计的综合指南。本节介绍有关主要实现的详细信息。</p>
						<h3 class="dtH1">SqlHelper 类实现详细信息</h3>
						<p>
								<strong>SqlHelper</strong> 类用于通过一组静态方法来封装数据访问功能。该类不能被继承或实例化，因此将其声明为包含专用构造函数的不可继承类。</p>
						<p>在 <strong>SqlHelper</strong> 类中实现的每种方法都提供了一组一致的重载。这提供了一种很好的使用 <strong>SqlHelper</strong> 类来执行命令的模式，同时为开发人员选择访问数据的方式提供了必要的灵活性。每种方法的重载都支持不同的方法参数，因此开发人员可以确定传递连接、事务和参数信息的方式。在 <strong>SqlHelper</strong> 类中实现的方法包括： </p>
						<ul type="disc">
								<li>
										<strong>ExecuteNonQuery</strong>。此方法用于执行不返回任何行或值的命令。这些命令通常用于执行数据库更新，但也可用于返回存储过程的输出参数。 
</li>
								<li>
										<strong>ExecuteReader</strong>。此方法用于返回 <strong>SqlDataReader</strong> 对象，该对象包含由某一命令返回的结果集。 
</li>
								<li>
										<strong>ExecuteDataset</strong>。此方法返回 <strong>DataSet</strong> 对象，该对象包含由某一命令返回的结果集。 
</li>
								<li>
										<strong>ExecuteScalar</strong>。此方法返回一个值。该值始终是该命令返回的第一行的第一列。 
</li>
								<li>
										<strong>ExecuteXmlReader</strong>。此方法返回 <strong>FOR XML</strong> 查询的 XML 片段。 </li>
						</ul>
						<p>除了这些公共方法外，<strong>SqlHelper</strong> 类还包含一些专用函数，用于管理参数和准备要执行的命令。不管客户端调用什么样的方法实现，所有命令都通过 <strong>SqlCommand</strong> 对象来执行。在 <strong>SqlCommand</strong> 对象能够被执行之前，所有参数都必须添加到 <strong>Parameters</strong> 集合中，并且必须正确设置 <strong>Connection</strong>、<strong>CommandType</strong>、<strong>CommandText</strong> 和 <strong>Transaction</strong> 属性。<strong>SqlHelper</strong> 类中的专用函数主要用于提供一种一致的方式，以便向 SQL Server 数据库发出命令，而不考虑客户端应用程序调用的重载方法实现。SqlHelper 类中的专用实用程序函数包括： </p>
						<ul type="disc">
								<li>
										<strong>AttachParameters</strong>：该函数用于将所有必要的 SqlParameter 对象连接到正在运行的 SqlCommand。 
</li>
								<li>
										<strong>AssignParameterValues</strong>：该函数用于为 SqlParameter 对象赋值。 
</li>
								<li>
										<strong>PrepareCommand</strong>：该函数用于对命令的属性（如连接、事务环境等）进行初始化。 
</li>
								<li>
										<strong>ExecuteReader</strong>：此专用 ExecuteReader 实现用于通过适当的 <strong>CommandBehavior</strong> 打开 SqlDataReader 对象，以便最有效地管理与阅读器关联的连接的有效期。 </li>
						</ul>
						<h3 class="dtH1">SqlHelperParameterCache 类实现详细信息</h3>
						<p>参数数组缓存在专用 <strong>Hashtable</strong> 中。从缓存中检索的参数进行内部复制，这样客户端应用程序能够更改参数值以及进行其他操作，而不会影响缓存的参数数组。专用共享函数 <strong>CloneParameters</strong> 可以实现此目的。</p>
						<h2 class="dtH1">
								<a name="daab-rm_faq">
								</a>常见问题</h2>
						<h3 class="dtH1">此版本包含哪些新增功能？</h3>
						<p>与 Data Access Application Block Beta 2.0 版本相比，该 RTM 版本包含以下新增功能和变化： </p>
						<ul type="disc">
								<li>
										<strong>SqlHelper</strong> 类方法的事务型重载不再需要 <strong>SqlConnection</strong> 参数。在此版本中，连接信息从 <strong>SqlTransaction</strong> 对象中派生，因此不必在方法签名中包含 <strong>SqlConnection</strong> 对象参数。 
</li>
								<li>现在，<strong>GetSpParameterSet</strong> 方法使用 ADO.NET <strong>CommandBuilder</strong> 类的 <strong>DeriveParameters</strong> 方法来确定存储过程所需要的参数。这比 Beta 2.0 版本中直接通过查询数据库来检索信息的效率更高。 </li>
						</ul>
						<h3 class="dtH1">可以使用 XCOPY 部署方法来部署 Data Access Application Block 程序集吗？</h3>
						<p>可以。Microsoft.ApplicationBlocks.Data.dll 程序集在编译后可以使用 XCOPY 进行部署。</p>
						<h3 class="dtH1">什么时候应该使用 ExecuteDataset 方法，什么时候应该使用 ExecuteReader 方法？</h3>
						<p>这个问题实际上是什么时候应该返回 DataSet 对象中的多个数据行，什么时候应该使用 DataReader。答案取决于您的应用程序的特定需要，以及您在灵活性和原始性能之间的取舍。DataSet 为您提供数据的灵活的且断开连接的关系视图，而 DataReader 为您提供性能卓越的、只读的、仅向前光标。有关 DataSet 和 DataReader 的全面比较，请参阅 <a href="http://msdn.microsoft.com/library/en-us/dnbda/html/daag.asp">Data Access Architecture Guide</a>（英文）。</p>
						<h3 class="dtH1">如何使用 ExecuteDataset 返回包含多个表的数据集？</h3>
						<p>通过创建一个可以返回多个行集的存储过程（通过执行多个 SELECT 语句或者对其他存储过程进行嵌套调用），并使用 ExecuteDataset 方法执行该过程，您可以检索包含多个表的数据集。</p>
						<p>例如，假设您的数据库包含以下存储过程。</p>
						<pre class="code">CREATE PROCEDURE GetCategories
AS
SELECT * FROM Categories
GO
CREATE PROCEDURE GetProducts
AS
SELECT * FROM Products
  </pre>
						<p>您可以创建一个主存储过程来对这些过程进行嵌套调用，如下面的代码示例所示。</p>
						<pre class="code">CREATE PROCEDURE GetCategoriesAndProducts
AS
BEGIN
  EXEC GetCategories
  EXEC GetProducts
END
  </pre>
						<p>使用 ExecuteDataset 方法执行此主存储过程将返回一个 DateSet，其中包含两个表：一个表包含分类数据，另一个表包含产品数据。</p>
						<blockquote class="dtBlock">
								<strong class="le">注意：</strong>
								<code>
								</code>ExecuteDataset 方法不提供为返回的表指定自定义名称的方法。第一个表的编号始终为 <strong>0</strong>，名称为 <strong>Table</strong>，第二个表的编号为 <strong>1</strong>，名称为 <strong>Table1</strong>，依此类推。</blockquote>
						<h3 class="dtH1">还有其他的应用程序块吗？</h3>
						<p>Data Access Application Block 是即将发布的几个应用程序块之一。这些应用程序块可以解决开发人员在不同项目中遇到的共同问题。它们可以快速方便地插入到 .NET 应用程序中。</p>
						<h2 class="dtH1">
								<a name="daab-rm_feedbackandsupport">
								</a>反馈和支持</h2>
						<p>如果您对 Data Access Application Block 有任何问题、意见和建议，请向 <a href="mailto:devfdbck@microsoft.com">devfdbck@microsoft.com</a> 发送电子邮件，我们将及时提供反馈。</p>
						<p>Application Blocks for .NET 旨在协助开发 .NET 分布式应用程序。示例代码和文档都按原样提供。尽管已经过测试并被认为是稳定的代码集，但我们并不象传统的 Microsoft 产品那样对其提供支持。</p>
						<p>我们还创建了一个新闻组，可以帮助您使用 Application Blocks for .NET（.NET 应用程序块）。您可以通过新闻组在联机的开放论坛中向同行、同事和 Microsoft 支持专家咨询。</p>
						<p>其他人也可以从您的问题和评论中获益，我们的开发小组将每天查看新闻组：<br />新闻组：基于 Web 的读者<br /><a href="http://msdn.microsoft.com/newsgroups/loadframes.asp?icp=msdn&amp;slcid=us&amp;newsgroup=microsoft.public.dotnet.distributed_apps">http://msdn.microsoft.com/newsgroups/loadframes.asp?icp=msdn&amp;slcid=us&amp;newsgroup=microsoft.public.dotnet.distributed_apps</a>（英文）</p>
						<p>新闻组：NNTP 读者<br /><a href="news://msnews.microsoft.com/microsoft.public.dotnet.distributed_apps">news://msnews.microsoft.com/microsoft.public.dotnet.distributed_apps</a>（英文）</p>
						<p>您想学习和利用 .NET 的功能吗？欢迎您与 Microsoft Technology Centers 的技术专家并肩工作，您将学到最好的开发经验。有关详细信息，请访问 <a href="http://www.microsoft.com/business/services/mtc.asp">http://www.microsoft.com/business/services/mtc.asp</a>（英文）。</p>
						<p>您需要更多的帮助吗？请访问新增的客户支持服务 Advisory Services，该解决方案可以满足您小规模的咨询需要。有关 Advisory Services 的详细信息，请访问 <a href="http://support.microsoft.com/default.aspx?id=fh;EN-US;advisoryservice">http://support.microsoft.com/default.aspx?id=fh;EN-US;advisoryservice</a>（英文）。</p>
						<h2 class="dtH1">更多信息</h2>
						<p>Data Access Application Block 的设计和开发是建立在 <a href="http://msdn.microsoft.com/library/en-us/dnbda/html/daag.asp">Data Access in .NET Architecture Guide</a>（英文）中讨论的最佳开发经验和通用设计原则基础之上的。请阅读该指南，以了解有关数据访问的详细信息。</p>
				</div>
		</div>
<img src ="http://www.blogjava.net/wangxinsh55/aggbug/95239.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangxinsh55/" target="_blank">SIMONE</a> 2007-01-22 11:06 <a href="http://www.blogjava.net/wangxinsh55/archive/2007/01/22/95239.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>