﻿<?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-黄小二的讀書筆記-文章分类-ASP.NET</title><link>http://www.blogjava.net/kiant/category/35695.html</link><description>有才而性缓定属大才，有智而气和斯为大智。人偏狭我受之以宽容，人险仄我持之以坦荡。缓事宜急干，敏则有功；急事宜缓办，忙则多措。
--李叔同</description><language>zh-cn</language><lastBuildDate>Wed, 12 May 2010 12:18:47 GMT</lastBuildDate><pubDate>Wed, 12 May 2010 12:18:47 GMT</pubDate><ttl>60</ttl><item><title>[笔记] 技巧/诀窍：在ASP.NET中重写URL </title><link>http://www.blogjava.net/kiant/articles/320564.html</link><dc:creator>黄小二</dc:creator><author>黄小二</author><pubDate>Tue, 11 May 2010 02:52:00 GMT</pubDate><guid>http://www.blogjava.net/kiant/articles/320564.html</guid><wfw:comment>http://www.blogjava.net/kiant/comments/320564.html</wfw:comment><comments>http://www.blogjava.net/kiant/articles/320564.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kiant/comments/commentRss/320564.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kiant/services/trackbacks/320564.html</trackback:ping><description><![CDATA[<br />
原文地址：<br />
技巧/诀窍：在ASP.NET中重写URL <a href="http://blog.joycode.com/scottgu/archive/2007/03/01/94004.aspx" target="_blank">http://blog.joycode.com/scottgu/archive/2007/03/01/94004.aspx</a><br />
<br />
<a href="#1">方法一：使用Request.PathInfo 参数而不是查询字符串<br />
</a><a href="#2">方法二：使用HttpModule实现URL重写<br />
</a><a href="#3">方法三：在IIS7中使用HttpModule 实现无扩展名的URL重写<br />
</a><a href="#4">方法四：在IIS5和IIS6中使用 ISAPIRewrite 来实现无扩展名的URL重写</a>&nbsp;<br />
<a href="#5">在URL重写里处理ASP.NET PostBack<br />
</a><a href="#6">正确地处理CSS和图像引用</a><br />
<br />
<br />
例程的URL重写场景<br />
<a href="http://www.store.com/products.aspx?category=books">http://www.store.com/products.aspx?category=books</a><br />
http://www.store.com/products.aspx?category=DVDs<br />
http://www.store.com/products.aspx?category=CDs<br />
<br />
<strong><a id="1" name="1"></a><br />
方法一：使用Request.PathInfo 参数而不是查询字符串</strong> <br />
<br />
http://www.store.com/products.aspx/Books<br />
http://www.store.com/products.aspx/DVDs<br />
http://www.store.com/products.aspx/CDs
<hr color="#3366ff" size="2" />
&nbsp; <br />
<strong><a id="2" name="2"></a><br />
方法二：使用HttpModule实现URL重写</strong> <br />
<br />
http://www.store.com/products/Books.aspx<br />
http://www.store.com/products/DVDs.aspx<br />
http://www.store.com/products/CDs.aspx
<hr color="#3366ff" size="2" />
&nbsp; <br />
<strong><a id="3" name="3"></a><br />
方法三：在IIS7中使用HttpModule 实现无扩展名的URL重写</strong> <br />
<br />
http://www.store.com/products/Books<br />
http://www.store.com/products/DVDs<br />
http://www.store.com/products/CDs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IIS 7.0使得处理这类情形容易之极。你现在可以在 IIS 请求管道的任何地方执行一个HttpModule，这意味着你可以使用上面的URLRewriter 模块来处理和重写无扩展名的URL(甚至是带有 .asp，.php，或 .jsp 扩展名的URL)。下面示范了你在IIS7中该如何配置：
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">&lt;?</span><span style="color: #ff00ff">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000ff">?&gt;</span><span style="color: #000000"><br />
<br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">configuration</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<br />
&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">configSections</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">section&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="rewriter"</span><span style="color: #ff0000">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;requirePermission</span><span style="color: #0000ff">="false"</span><span style="color: #ff0000">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type</span><span style="color: #0000ff">="Intelligencia.UrlRewriter.Configuration.RewriterConfigurationSectionHandler,&nbsp;Intelligencia.UrlRewriter"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">configSections</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">system</span><span style="color: #ff0000">.web</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">httpModules</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">add&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="UrlRewriter"</span><span style="color: #ff0000">&nbsp;type</span><span style="color: #0000ff">="Intelligencia.UrlRewriter.RewriterHttpModule,&nbsp;Intelligencia.UrlRewriter"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">httpModules</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">system.web</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<br />
&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">system</span><span style="color: #ff0000">.webServer</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">modules&nbsp;</span><span style="color: #ff0000">runAllManagedModulesForAllRequests</span><span style="color: #0000ff">="true"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">add&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="UrlRewriter"</span><span style="color: #ff0000">&nbsp;type</span><span style="color: #0000ff">="Intelligencia.UrlRewriter.RewriterHttpModule"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">modules</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">validation&nbsp;</span><span style="color: #ff0000">validateIntegratedModeConfiguration</span><span style="color: #0000ff">="false"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">system.webServer</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<br />
&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">rewriter</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">rewrite&nbsp;</span><span style="color: #ff0000">url</span><span style="color: #0000ff">="~/products/(.+)"</span><span style="color: #ff0000">&nbsp;to</span><span style="color: #0000ff">="~/products.aspx?category=$1"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">rewriter</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;<br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">configuration</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;</span></div>
<hr color="#3366ff" size="2" />
<br />
<strong><a id="4" name="4"></a><br />
方法四：在IIS5和IIS6中使用 ISAPIRewrite 来实现无扩展名的URL重写</strong> <br />
<br />
<hr color="#3366ff" size="2" />
<br />
<strong><a id="5" name="5"></a><br />
在URL重写里处理ASP.NET PostBack</strong> <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当使用URL重写时，会出现这样的问题，&lt;form&gt; 控件显示的URL不是原先请求的URL(譬如，/products/books)，而是重写过后的URL(譬如，/products.aspx?category=books)。这意味着，当你做一个postback到服务器时，URL不再是你原先干净利落的那个了。 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在ASP.NET 2.0中，有个比较干净的诀窍你可以用来重写&lt;form&gt;控件的action属性。具体地来说，你可利用新的ASP.NET 2.0控件适配器扩展架构来定制控件的输出，用你提供的值来覆盖action属性的值。这不要求在你的.aspx页面里做任何编码改动，而只要在你的/app_browsers文件夹里添加一个.browser文件，注册使用一个控件适配类即可输出新的action属性。<br />
<img alt="" src="http://www.blogjava.net/images/blogjava_net/kiant/2010.05/UrlRewrite.jpg" border="0" />
<hr color="#3366ff" size="2" />
<br />
&nbsp; <strong><a id="6" name="6"></a><br />
正确地处理CSS和图像引用<br />
</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 不少人在第一次使用URL重写时，有时会遇上一个疑难杂症，就是他们发现他们的图像和CSS样式表引用有时会停止工作。这是因为他们在HTML网页里有对这些文件的相对引用，当你开始在应用里重写URL时，你需要意识到浏览器经常会在不同的逻辑层次结构层上(logical hierarchy levels)请求文件，而不是实际存储在服务器上的东西。 <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 譬如，如果我们上面的/products.aspx网页对.aspx 网页里的logo.jpg有一个相对引用，但是通过 /products/books.aspx这个URL来请求的，那么浏览器在显示网页时，将会发出一个对/products/logo.jpg的请求，而不是对/logo.jpg的请求。要正确地引用这个文件，确认你用根目录限定了(root qualify)CSS和图像引用(&#8220;/style.css&#8221;，而不是 &#8220;style.css&#8221;)。对于ASP.NET控件，你也可以使用&#8220;~&#8221;句法从你应用的根目录来引用文件(譬如，&lt;asp:image imageurl="~/images/logo.jpg" runat="server"/&gt;) 。 <br />
<br />
&nbsp; 附：<a href="/Files/kiant/2010.05/UrlRewrite_HttpModule1.FormRewriter.cs.zip">/Files/kiant/2010.05/UrlRewrite_HttpModule1.FormRewriter.cs.zip</a>&nbsp; 附加CS版的文件<br />
<img src ="http://www.blogjava.net/kiant/aggbug/320564.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kiant/" target="_blank">黄小二</a> 2010-05-11 10:52 <a href="http://www.blogjava.net/kiant/articles/320564.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ASP.NET 会话状态</title><link>http://www.blogjava.net/kiant/articles/320456.html</link><dc:creator>黄小二</dc:creator><author>黄小二</author><pubDate>Mon, 10 May 2010 02:34:00 GMT</pubDate><guid>http://www.blogjava.net/kiant/articles/320456.html</guid><wfw:comment>http://www.blogjava.net/kiant/comments/320456.html</wfw:comment><comments>http://www.blogjava.net/kiant/articles/320456.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kiant/comments/commentRss/320456.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kiant/services/trackbacks/320456.html</trackback:ping><description><![CDATA[<br />
<a href="#1">1、ASP.NET 会话状态<br />
</a><a href="#2">2、会话状态模式</a><br />
<a href="#3">3、ASP.NET在不同应用程序之间共享Session</a><br />
<a href="#4">4、Session无故丢失</a><br />
<a href="#5">5、客户端使用Cookieless的方式存储Session信息<br />
</a><a href="#6">6、Session.SessionID 固定<br />
</a><br />
<br />
<a id="1" name="1"></a><br />
<p><strong>1、ASP.NET 会话状态</strong><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 会话状态可在以下情况下使用：存储特定于单独会话的短期信息，并且需要较高的安全性。不要在会话状态中存储大量的信息。需要注意，将为应用程序中每一会话的生存期创建并维护会话状态对象。在支持许多用户的应用程序中，这可能会占用大量服务器资源并影响可缩放性。*p1 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ASP.NET 默认情况下将会话信息存储在 ASP.NET 应用程序的内存空间。您可以使用一个独立的服务存储会话信息以便重新启动 ASP.NET 应用程序后会话信息仍然保留；或将会话信息存储在 SQL Server 中以便会话信息可供网络场中的多个 Web 服务器使用（重新启动 ASP.NET 应用程序后会话信息也会保留）；或将会话信息存储在自定义数据存储区。有关更多信息，请参见<a href="http://msdn.microsoft.com/zh-cn/library/ms178586(v=VS.80).aspx" target="_blank">会话状态模式</a>。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 除了会话状态外，ASP.NET 还提供在应用程序中保留数据的一些其他方式。有关每种方式的比较，请参见 <a href="http://msdn.microsoft.com/zh-cn/library/z1hkazw7(v=VS.80).aspx" target="_blank">ASP.NET 状态管理建议</a>。*p2<br />
<br />
注:<br />
*p1：ASP.NET 状态管理建议&nbsp;<a href="http://msdn.microsoft.com/zh-cn/library/z1hkazw7(v=VS.80).aspx">http://msdn.microsoft.com/zh-cn/library/z1hkazw7(v=VS.80).aspx</a><br />
*p2：ASP.NET 会话状态&nbsp;<a href="http://msdn.microsoft.com/zh-cn/library/87069683(v=VS.80).aspx">http://msdn.microsoft.com/zh-cn/library/87069683(v=VS.80).aspx</a>
<hr color="#3366ff" size="2" />
<a id="2" name="2"></a><br />
<strong>2、会话状态模式<br />
</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ASP.NET 会话状态支持若干用于会话数据的存储选项。每个选项都由 SessionStateMode 枚举中的一个值标识。下面的列表描述了可用的会话状态模式：
<p>&nbsp;</p>
<ul>
    <li>InProc 模式，此模式将会话状态存储在 Web 服务器上的内存中。这是默认设置。注意：它是唯一支持 Session_OnEnd 事件的模式。<br />
    <br />
    <li>StateServer 模式，此模式将会话状态存储在一个名为 ASP.NET 状态服务的单独进程中。这确保了在重新启动 Web 应用程序时会保留会话状态，并让会话状态可用于网络场中的多个 Web 服务器。注意：如果模式设置为 StateServer，则存储在会话状态中的对象必须是可序列化的。<br />
    <br />
    <li>SQLServer 模式，将会话状态存储到一个 SQL Server 数据库中。这确保了在重新启动 Web 应用程序时会保留会话状态，并让会话状态可用于网络场中的多个 Web 服务器。注意：如果是 SQL Server 模式，则存储在会话状态中的对象必须是可序列化的。<br />
    <br />
    <li>Custom 模式，此模式允许您指定自定义存储提供程序。<br />
    <br />
    <li>Off 模式，此模式禁用会话状态。 </li>
</ul>
<p>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;通过在应用程序的 Web.config 文件中为 sessionState 元素的 mode 属性分配一个 SessionStateMode 枚举值，可以指定要让 ASP.NET 会话状态使用的模式。除了 InProc 和 Off 之外，其他模式都需要附加参数，例如将在本主题后面讨论的连接字符串值。通过访问 System.Web.SessionState.HttpSessionState.Mode 属性的值，可以查看当前选定的会话状态。*p3<br />
<br />
注：<br />
*p3：会话状态模式&nbsp;<a href="http://msdn.microsoft.com/zh-cn/library/ms178586(v=VS.80).aspx">http://msdn.microsoft.com/zh-cn/library/ms178586(v=VS.80).aspx</a> </p>
<hr color="#3366ff" size="2" />
<a id="3" name="3"></a><br />
<p><strong>3、ASP.NET在不同应用程序之间共享Session</strong> *p4<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 多个单独的应用程序，如何将这些模块集中身份验证与授权过程</p>
<p>方案1：<br />
将每个独立的Web应用程序放到统一的解决方案中，实现起来复杂，易用性不高。<br />
<br />
方案2：利用Session会话共享<br />
InProc模式，Session被存储在IIS进程中，每个虚拟目录是隔离的，所以无法共享Session。</p>
<p>StateServer 模式，虽然是独立的状态服务器（进程），但在内存中这些应用程序还是隔离的。</p>
<p>SQLServer 模式，由于对Session的全部操作都是由存储过程来实现的，而且存储过程未进行加密，可以通过修改存储过程的内部结构来达到共享的目的。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;ASPState数据库ASPStateTempApplications表中存储的是应用程序信息，每个应用程序在启动的时候在这里会注册一条记录，包括应用程序的ID（通过哈希算法生成的）和应用程序名称。有多少个应用程序，在这个表里就对应多少条记录。那我们现在要做的是把这些记录变成一条记录，也就是要欺骗Framework，让它认为这些不同的应用程序是同一个应用程序。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;TempGetAppID存储过程，这个存储过程是用于通过传递应用程序名称来得到应用程序ID信息的。每个应用程序在调用这个过程时，这个过程会去AspStateTempApplications中检查是否有相应的记录，如果没有，就插入记录，然后返回相应的ID。<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">ALTER</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">PROCEDURE</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">[</span><span style="color: #ff0000">dbo</span><span style="color: #ff0000">]</span><span style="color: #000000">.</span><span style="color: #ff0000">[</span><span style="color: #ff0000">TempGetAppID</span><span style="color: #ff0000">]</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">@appName</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;tAppName,<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">@appId</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-weight: bold; color: #000000">int</span><span style="color: #000000">&nbsp;OUTPUT<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">AS</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">SET</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@appName</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">LOWER</span><span style="color: #000000">(</span><span style="color: #008000">@appName</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080">--</span><span style="color: #008080">变量值固定，使所有应用程序通用为一个</span><span style="color: #008080"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">SET</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@appName</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">/lm/w3svc/650056020/root/personnel/share</span><span style="color: #ff0000">'</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">SET</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@appId</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">NULL</span><span style="color: #000000"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">SELECT</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@appId</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;AppId<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">FROM</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">[</span><span style="color: #ff0000">tempdb</span><span style="color: #ff0000">]</span><span style="color: #000000">.dbo.ASPStateTempApplications<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">WHERE</span><span style="color: #000000">&nbsp;AppName&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@appName</span><span style="color: #000000"><br />
</span></div>
<p><br />
注：<br />
*p4：ASP.NET在不同应用程序之间共享Session &nbsp;<a href="http://www.3qsoft.com/Article.aspx?ID=173">http://www.3qsoft.com/Article.aspx?ID=173</a> </p>
<hr color="#3366ff" size="2" />
<a id="4" name="4"></a><br />
<strong>4、Session无故丢失</strong> *p5<br />
<br />
mode="InProc"&nbsp; <br />
==&nbsp; <br />
默认的配置方式很容易丢失Session 请参考&nbsp;
<p>asp中Session的工作原理：&nbsp; <br />
asp的Session是具有进程依赖性的。ASP Session状态存于IIS的进程中，也就是inetinfo.exe这个程序。所以当inetinfo.exe进程崩溃时，这些信息也就丢失。另外，重起或者关闭IIS服务都会造成信息的丢失。&nbsp; </p>
<p>原因1：&nbsp; <br />
bin目录中的文件被改写，asp.net有一种机制，为了保证dll重新编译之后，系统正常运行，它会重新启动一次网站进程，这时就会导致Session丢失，所以如果有access数据库位于bin目录，或者有其他文件被系统改写，就会导致Session丢失&nbsp; </p>
<p>原因2：&nbsp; <br />
文件夹选项中，如果没有打开&#8220;在单独的进程中打开文件夹窗口&#8221;，一旦新建一个窗口，系统可能认为是新的Session会话，而无法访问原来的Session，所以需要打开该选项，否则会导致Session丢失&nbsp; </p>
<p>原因3：&nbsp; <br />
似乎大部分的Session丢失是客户端引起的，所以要从客户端下手，看看cookie有没有打开&nbsp; </p>
<p>原因4：&nbsp; <br />
Session的时间设置是不是有问题，会不会因为超时造成丢失&nbsp; </p>
<p>原因5：&nbsp; <br />
IE中的cookie数量限制（每个域20个cookie）可能导致session丢失&nbsp; </p>
<p>原因6：&nbsp; <br />
使用web garden模式，且使用了InProc mode作为保存session的方式&nbsp; </p>
<p>解决丢失的经验&nbsp; <br />
1. 判断是不是原因1造成的，可以在每次刷新页面的时候，跟踪bin中某个文件的修改时间&nbsp; <br />
2. 做Session读写日志，每次读写Session都要记录下来，并且要记录SessionID、Session值、所在页面、当前函数、函数中的第几次Session操作，这样找丢失的原因会方便很多&nbsp; <br />
3. 如果允许的话，建议使用state server或sql server保存session，这样不容易丢失&nbsp; <br />
4. 在global.asa中加入代码记录Session的创建时间和结束时间，超时造成的Session丢失是可以在SessionEnd中记录下来的。&nbsp; <br />
5. 如果有些代码中使用客户端脚本，如javascript维护Session状态，就要尝试调试脚本，是不是因为脚本错误引起Session丢失&nbsp; </p>
<p>问：为什么Session在有些机器上偶尔会丢失？&nbsp; <br />
答：可能和机器的环境有关系，比如：防火墙或者杀毒软件等，尝试关闭防火墙。&nbsp; </p>
<p>问：为什么当调用Session.Abandon时并没有激发Session_End方法？&nbsp; <br />
答：首先Session_End方法只支持InProc（进程内的）类型的Session。其次要激发Session_End方法，必须存在Session（即系统中已经使用Session了），并且至少要完成一次请求（在这次请求中会调用该方法）。&nbsp; </p>
<p>问：为什么当我在InProc模式下使用Session会经常丢失？&nbsp; <br />
答：该问题通常是由于应用程序被回收导致的，因为当使用进程内Session时，Session是保存在aspnet_wp进程中，当该进程被回收Session自然也就没有了，确定该进程是否被回收可以通过查看系统的事件查看器获得信息。&nbsp; <br />
具体信息请参考：&nbsp; <br />
Session variables are lost intermittently in ASP.NET applications&nbsp; <br />
http://support.microsoft.com/default.aspx?scid=kb;en-us;Q316148&nbsp; <br />
在1.0的时候也有一个bug会导致工作进程被回收并重启，该bug已经在1.1和sp2中修复。&nbsp; <br />
关于该bug的详细信息请参考：&nbsp; <br />
ASP.NET Worker Process (Aspnet_wp.exe) Is Recycled Unexpectedly.&nbsp; <br />
http://support.microsoft.com/default.aspx?scid=kb;en-us;Q321792&nbsp; </p>
<p><br />
问：什么类型的对象可以保存在Session里？&nbsp; <br />
答：这依赖使用的Session的模式，当使用的是进程内（InProc）的Session那么可以轻松的保存任何对象。如果你使用了非InProc的模式，则只能保存可以序列化和反序列化的对象，如果此时保存的对象不支持序列化，则不能保存到这种模式（非InProc）的Session里。&nbsp; </p>
<p>问：为什么在Session_End中不能使用Response.Redirect和Server.Transfer方法跳转页面？&nbsp; <br />
答：Session_End是一个在服务器内部激发的事件处理函数。它是基于一个服务器内部的计时器的，在激发该事件时服务器上并没有相关的HttpRequest对象，因此此时并不能使用Response.Redirect和Server.Transfer方法。&nbsp; </p>
<p>问：在Session_End中是否可以获得HttpContext对象？&nbsp; <br />
答：不行，因为这个事件并没有和任何的请求（Request）相关联，没有基于请求的上下文。&nbsp; </p>
<p>问：在Web Service中该如何使用Session？&nbsp; <br />
答：为了在Web Service中使用Session，需要在Web Service的调用方做一些额外的工作，必须保存和存储调用Web Service时使用的Cookie。详细信息请参考MSDN文档的HttpWebClientProtocol.CookieContainer属性。然而，如果你使用代理服务器访问Web Service由于框架的限制，两者不能共享Session。&nbsp; </p>
<p><br />
问：当我使用webfarm时，当我重定向到其他的Web服务器时Session为什么会丢失？&nbsp; <br />
答：详细信息请参考：&nbsp; <br />
PRB: Session State Is Lost in Web Farm If You Use SqlServer or StateServer Session Mode&nbsp; <br />
http://support.microsoft.com/default.aspx?scid=kb;en-us;325056&nbsp; </p>
<p>问：Session在global.asax中的那些事件中有效？&nbsp; <br />
答：Session只有在AcquireRequestState事件之后有效，该事件之后的事件都可以使用Session。&nbsp; </p>
<p><br />
问：为了可以顺序访问Session的状态值，Session是否提供了锁定机制？&nbsp; <br />
答：Session实现了Reader/Writer的锁机制：&nbsp; <br />
当页面对Session具有可写功能（即页面有 &lt;%@ Page EnableSessionState="True" %&gt;标记），此时直到请求完成该页面的Session持有一个写锁定。&nbsp; <br />
当页面对Session具有只读功能（即页面有 &lt;%@ Page EnableSessionState="ReadOnly" %&gt;标记），此时知道请求完成该页面的Session持有一个读锁定。&nbsp; <br />
读锁定将阻塞一个写锁定；读锁定不会阻塞读锁定；写锁定将阻塞所有的读写锁定。这就是为什么两个框架中的同一个页面都去写同一个Session时，其中一个要等待另一个（稍快的那个）完成后，才开始写。&nbsp; </p>
<p>问：Session平滑超时意味着什么？&nbsp; <br />
答：Session平滑超时意味着只要你的页面访问（使用）了Session，超时时间将被刷新（可以理解为重新计时），即从该页面请求开始，将重新计算超时时间。但是，该页面不能禁用Session。它会自动的访问当前页面的Session，刷新超时时间。&nbsp; </p>
<p>问：在global.asax中的事件处理函数中Session为什么无效？&nbsp; <br />
答：依赖于在哪个事件处理函数中使用Session，Session在AcquireRequestState事件之后才有效，该事件之后的所有事件处理函数都可以使用Session，之前的则不能。&nbsp; </p>
<p><br />
问：当我使用InProc模式保存Session时，此时的Session是保存在哪里？&nbsp; <br />
答：不同的IIS的处理方式不同，&nbsp; <br />
当使用的是IIS5的时候Session是保存在aspnet_wp.exe的进程空间里的。&nbsp; <br />
当使用的是IIS6时，默认情况下所有的应用程序共享应用程序池，Session保存在w3wp.exe的进程空间中。&nbsp; </p>
<p>问：当页面出现错误后我的Session是否将被保存？我需要在Session_End中处理一些清理工作，但是失败了，为什么？&nbsp; <br />
答：Session_End只有在Session运行在InProc模式下才会被执行。Session_End使用的帐号是运行aspnet_wp工作进程的帐号（这个可以在machine.config中设置）。因此，如果在Session_End方法里，使用集成安全性链接到SQL，它将使用aspnet_wp进程的帐号打开链接，此时成功与否则依赖于你的SQL的安全性设置。&nbsp; </p>
<p>问：在Session_End是我是否可以获得有效的HttpSessionState和HttpContext对象？&nbsp; <br />
答：你可以在这个方法中获得HttpSessionState对象，可以直接使用Session来访问即可。但是不能获得HttpContext对象，因为该事件并没有和任何请求相关联，因此不存在上下文对象。&nbsp; </p>
<p>问：在SQLServer模式下使用Session，为什么我的Session不过期？&nbsp; <br />
答：在SqlServer模式下，Session的过期是通过SQL Agent的注册工作完成的，请检查你的SQL Agent是否运行？&nbsp; </p>
<p>问：当我设置EnableSessionState为&#8220;ReadOnly&#8221;后，但是我在InProc模式下依然可以修改Session的值，这是为什么？&nbsp; <br />
答：即使EnableSessionState标示为ReadOnly，但是在InProc模式下用户依然可以编辑Session。唯一不同的是，在请求过程中Session将不会被锁住。&nbsp; </p>
<p>问：为什么在切换成SQLServer模式后我的请求被挂起了？&nbsp; <br />
答：检查在Session里面是否都保存的是可以保存在SQLServer模式下的对象，即这些对象必须支持序列化。&nbsp; </p>
<p><br />
问：当Session设置成cookieless后会有什么影响？&nbsp; <br />
答：当把cookieless设置成true时，主要会有下面的约束：&nbsp; <br />
1、在页面中不能使用绝对链接&nbsp; <br />
2、在应用程序中在除了Http和Https之间的切换时需要完成一些其他的步骤。&nbsp; <br />
如果发送一个链接给其他人，此时的URL里面将包含Session ID的信息，所以两个人将公用一个Session。&nbsp;&nbsp;<br />
<br />
注：<br />
*p5：Session丢失&nbsp;<a href="http://topic.csdn.net/u/20081208/14/c154543c-8e86-406b-82a2-d3cc6f736b0d.html">http://topic.csdn.net/u/20081208/14/c154543c-8e86-406b-82a2-d3cc6f736b0d.html</a> </p>
<hr color="#3366ff" size="2" />
<a id="5" name="5"></a><br />
<strong>5、客户端使用Cookieless的方式存储Session信息</strong><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sessionState中的cookieless="false"改为：cookieless="true"，这样，客户端的Session信息就不再使用Cookie存储了，而是将其通过URL存储。关闭当前的IE，打开一个新IE，重新访问刚才的Web应用程序，浏览器地址就会变为 http://localhost/MyTestApplication/(<strong>ulqsek45heu3ic2a5zgdl245</strong>)/default.aspx中黑体标出的就是客户端的Session ID。注意，这段信息是由IIS自动加上的，不会影响以前正常的连接。 *p6 <br />
<br />
问：当Session设置成cookieless后会有什么影响？&nbsp; <br />
答：当把cookieless设置成true时，主要会有下面的约束：&nbsp; <br />
1、在页面中不能使用绝对链接&nbsp; <br />
2、在应用程序中在除了Http和Https之间的切换时需要完成一些其他的步骤。&nbsp; <br />
如果发送一个链接给其他人，此时的URL里面将包含Session ID的信息，所以两个人将公用一个Session。 *p7<br />
<br />
注：<br />
*p6：[ASP.NET] Session 详解 &nbsp;<a href="http://www.blueidea.com/tech/program/2004/1856.asp">http://www.blueidea.com/tech/program/2004/1856.asp</a><br />
*p7：Session丢失&nbsp;<a href="http://topic.csdn.net/u/20081208/14/c154543c-8e86-406b-82a2-d3cc6f736b0d.html">http://topic.csdn.net/u/20081208/14/c154543c-8e86-406b-82a2-d3cc6f736b0d.html</a>
<hr color="#3366ff" size="2" />
<p>&nbsp;<a id="6" name="6"></a><br />
<strong>6、Session.SessionID 固定</strong></p>
<ul>
    <li>IsNewSession：取得值，指出工作階段是否以目前要求建立。<br />
    <br />
    <li>SessionID：取得工作階段的唯一工作階段識別項。 </li>
</ul>
<p>re: 因為Session在還沒裝物件之前, ID都不是固定的. 如果您賦予Session內容, ex: Session["xxx"]=123 , 您會發現ID就會固定. *p8<br />
<br />
注：<br />
*p8：[ASP.Net]Session.IsNewSession與Session.SessionID <a href="http://www.dotblogs.com.tw/yilinliu/archive/2009/04/24/8163.aspx">http://www.dotblogs.com.tw/yilinliu/archive/2009/04/24/8163.aspx</a><br />
<hr color="#3366ff" size="2" />
<p>&nbsp;</p>
<p>&nbsp;</p>
<img src ="http://www.blogjava.net/kiant/aggbug/320456.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kiant/" target="_blank">黄小二</a> 2010-05-10 10:34 <a href="http://www.blogjava.net/kiant/articles/320456.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>asp.net获取网站路径</title><link>http://www.blogjava.net/kiant/articles/320085.html</link><dc:creator>黄小二</dc:creator><author>黄小二</author><pubDate>Sat, 08 May 2010 16:02:00 GMT</pubDate><guid>http://www.blogjava.net/kiant/articles/320085.html</guid><wfw:comment>http://www.blogjava.net/kiant/comments/320085.html</wfw:comment><comments>http://www.blogjava.net/kiant/articles/320085.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kiant/comments/commentRss/320085.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kiant/services/trackbacks/320085.html</trackback:ping><description><![CDATA[<p><br />
引用自：<br />
asp.net获取网站路径<br />
http://hi.baidu.com/zhangfengbang/blog/item/5f99d74b0ce661f883025cbc.html<br />
HttpRequest 成员<br />
http://msdn.microsoft.com/zh-cn/library/system.web.httprequest_members(v=VS.80).aspx<br />
ASP.NET获取网站根目录的url的函数，很简单<br />
<a href="http://www.xueit.com/html/2009-03/21_932_00.html">http://www.xueit.com/html/2009-03/21_932_00.html</a><br />
&nbsp;<br />
</p>
<br />
<hr color="#999999" size="4" />
<strong>网站在服务器磁盘上的物理路径: HttpRuntime.AppDomainAppPath<br />
虚拟程序路径: HttpRuntime.AppDomainAppVirtualPath</strong>
<p><br />
任何于Request/HttpContext.Current等相关的方法, 都只能在有请求上下文或者页面时使用. 即在无请求上下文时,HttpContext.Current为null. 而上面提到的方法一直可用.</p>
<p>对于全局Cache对象的访问亦然.<br />
<br />
<br />
</p>
<p>
<hr color="#999999" size="4" />
<strong>示例：输出asp.net 网站路径。</strong>&nbsp;<br />
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;responseHtml()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.Text.StringBuilder&nbsp;sb&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;System.Text.StringBuilder();<br />
&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">输出:当前时间:&nbsp;2007-08-30&nbsp;11:03:49</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.Append(</span><span style="color: #0000ff">string</span><span style="color: #000000">.Format(</span><span style="color: #000000">"</span><span style="color: #000000">当前时间:&nbsp;{0}</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;Server.HtmlEncode(DateTime.Now.ToString())));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.Append(</span><span style="color: #000000">"</span><span style="color: #000000">&lt;br&nbsp;/&gt;</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<br />
&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">当前请求的虚拟路径:&nbsp;/aDirectory/Sample/responseHtml.aspx</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.Append(</span><span style="color: #0000ff">string</span><span style="color: #000000">.Format(</span><span style="color: #000000">"</span><span style="color: #000000">当前请求的虚拟路径:&nbsp;{0}</span><span style="color: #000000">"</span><span style="color: #000000">,Server.HtmlEncode(Request.CurrentExecutionFilePath)));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.Append(</span><span style="color: #000000">"</span><span style="color: #000000">&lt;br&nbsp;/&gt;</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<br />
&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">获取当前应用程序的根目录路径:&nbsp;/aDirectory</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.Append(</span><span style="color: #0000ff">string</span><span style="color: #000000">.Format(</span><span style="color: #000000">"</span><span style="color: #000000">获取当前应用程序的根目录路径:&nbsp;{0}</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;Server.HtmlEncode(Request.ApplicationPath)));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.Append(</span><span style="color: #000000">"</span><span style="color: #000000">&lt;br&nbsp;/&gt;</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<br />
&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">当前请求的虚拟路径:&nbsp;/aDirectory/Sample/responseHtml.aspx</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.Append(</span><span style="color: #0000ff">string</span><span style="color: #000000">.Format(</span><span style="color: #000000">"</span><span style="color: #000000">当前请求的虚拟路径:&nbsp;{0}</span><span style="color: #000000">"</span><span style="color: #000000">,Server.HtmlEncode(Request.FilePath)));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.Append(</span><span style="color: #000000">"</span><span style="color: #000000">&lt;br&nbsp;/&gt;</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<br />
&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">当前请求的虚拟路径:&nbsp;/aDirectory/Sample/responseHtml.aspx</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.Append(</span><span style="color: #0000ff">string</span><span style="color: #000000">.Format(</span><span style="color: #000000">"</span><span style="color: #000000">当前请求的虚拟路径:&nbsp;{0}</span><span style="color: #000000">"</span><span style="color: #000000">,Server.HtmlEncode(Request.Path)));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.Append(</span><span style="color: #000000">"</span><span style="color: #000000">&lt;br&nbsp;/&gt;</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<br />
&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">获取当前正在执行的应用程序的根目录的物理文件系统路径:&nbsp;E:\Visual&nbsp;Studio&nbsp;2005\</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.Append(</span><span style="color: #0000ff">string</span><span style="color: #000000">.Format(</span><span style="color: #000000">"</span><span style="color: #000000">获取当前正在执行的应用程序的根目录的物理文件系统路径:&nbsp;{0}</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;Server.HtmlEncode(Request.PhysicalApplicationPath)));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.Append(</span><span style="color: #000000">"</span><span style="color: #000000">&lt;br&nbsp;/&gt;</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<br />
&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">获取与请求的&nbsp;URL&nbsp;相对应的物理文件系统路径:&nbsp;E:\Visual&nbsp;Studio&nbsp;2005\\aDirectory\</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.Append(</span><span style="color: #0000ff">string</span><span style="color: #000000">.Format(</span><span style="color: #000000">"</span><span style="color: #000000">获取与请求的&nbsp;URL&nbsp;相对应的物理文件系统路径:&nbsp;{0}</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;Server.HtmlEncode(Request.PhysicalApplicationPath)));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.Append(</span><span style="color: #000000">"</span><span style="color: #000000">&lt;br&nbsp;/&gt;</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Response.Write(sb.ToString());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
<p>&nbsp;<br />
<br />
<br />
</p>
<hr color="#999999" size="4" />
<strong>在ASP.NET编程中经常需要用Request获取url的有关信息.<br />
<br />
</strong>测试的url地址是http://www.test.com/testweb/default.aspx, 结果如下：<br />
Request.ApplicationPath:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /testweb<br />
Request.CurrentExecutionFilePath:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /testweb/default.aspx<br />
Request.FilePath:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /testweb/default.aspx<br />
Request.Path:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /testweb/default.aspx<br />
Request.PathInfo: <br />
Request.PhysicalApplicationPath:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; E:\WWW\testweb\<br />
Request.PhysicalPath:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; E:\WWW\testweb\default.aspx<br />
Request.RawUrl:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /testweb/default.aspx<br />
Request.Url.AbsolutePath:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /testweb/default.aspx<br />
Request.Url.AbsoluteUri:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; http://www.test.com/testweb/default.aspx<br />
Request.Url.Host:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; www.test.com<br />
Request.Url.LocalPath:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /testweb/default.aspx&nbsp;<br />
<br />
当url中带参数时可以使用:<br />
HttpContext.Current.Request.Url.PathAndQuery.ToString()//<br />
<br />
本页地址:&nbsp;&nbsp; Request.URL;&nbsp; <br />
<br />
上页地址:&nbsp;&nbsp; <br />
Request.UrlReferrer&nbsp;&nbsp; <br />
Request.ServerViables["http_referer"]&nbsp;&nbsp; <br />
Request.RawUrl&nbsp;&nbsp; <br />
Request.RawUrl.QueryAndPath&nbsp;&nbsp; <br />
System.IO.Path.GetFileName(Request.FilePath.ToString())&nbsp; <br />
<br />
<br />
<br />
<hr color="#999999" size="4" />
<strong>获取网站根目录的url源代码</strong><span style="font-size: 8pt"><span style="font-size: 10pt">--2010.05.09</span><br />
<span style="font-size: 10pt">http://www.xueit.com/html/2009-03/21_932_00.html</span><br />
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;GetRootURI()<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;AppPath&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">""</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpContext&nbsp;HttpCurrent&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;HttpContext.Current;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpRequest&nbsp;Req;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(HttpCurrent&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Req&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;HttpCurrent.Request;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;UrlAuthority&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Req.Url.GetLeftPart(UriPartial.Authority);<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;(Req.ApplicationPath&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">||</span><span style="color: #000000">&nbsp;Req.ApplicationPath&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">/</span><span style="color: #000000">"</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">直接安装在&nbsp;&nbsp;&nbsp;Web&nbsp;&nbsp;&nbsp;站点&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AppPath&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;UrlAuthority;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">安装在虚拟子目录下&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AppPath&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;UrlAuthority&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;Req.ApplicationPath;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;AppPath;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
<br />
<span style="font-size: 12pt"><span style="font-size: 12pt">可修改为静态属性</span>&nbsp;
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff"><br />
private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;rootURI;<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;获得网站根目录的url的函数<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;</span><span style="color: #808080">&lt;returns&gt;</span><span style="color: #008000">应用程序根目录&nbsp;eg:&nbsp;&nbsp;</span><span style="color: #008000; text-decoration: underline"><a href="http://www.xxx.net:2156/im">http://www.xxx.net</span><span style="color: #008000">:2156/im</a> </span><span style="color: #808080">&lt;/returns&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">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;RootURI<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">get</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<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;(</span><span style="color: #0000ff">string</span><span style="color: #000000">.IsNullOrEmpty(rootURI))<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;HttpContext&nbsp;HttpCurrent&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;HttpContext.Current;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpRequest&nbsp;Req;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(HttpCurrent&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Req&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;HttpCurrent.Request;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;UrlAuthority&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Req.Url.GetLeftPart(UriPartial.Authority);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(Req.ApplicationPath&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">||</span><span style="color: #000000">&nbsp;Req.ApplicationPath&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">/</span><span style="color: #000000">"</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">直接安装在&nbsp;&nbsp;&nbsp;Web&nbsp;&nbsp;&nbsp;站点&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rootURI&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;UrlAuthority;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">安装在虚拟子目录下&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rootURI&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;UrlAuthority&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;Req.ApplicationPath;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;rootURI;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
<br />
</span></span>
<img src ="http://www.blogjava.net/kiant/aggbug/320085.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kiant/" target="_blank">黄小二</a> 2010-05-09 00:02 <a href="http://www.blogjava.net/kiant/articles/320085.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>asp.net对于图像文件的操作--存储、读取访问</title><link>http://www.blogjava.net/kiant/articles/320052.html</link><dc:creator>黄小二</dc:creator><author>黄小二</author><pubDate>Tue, 04 May 2010 07:41:00 GMT</pubDate><guid>http://www.blogjava.net/kiant/articles/320052.html</guid><wfw:comment>http://www.blogjava.net/kiant/comments/320052.html</wfw:comment><comments>http://www.blogjava.net/kiant/articles/320052.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kiant/comments/commentRss/320052.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kiant/services/trackbacks/320052.html</trackback:ping><description><![CDATA[<p>内容引用自：<br />
菜鸟问题,高分求解:关于SQL Server存储图片的问题<br />
http://topic.csdn.net/t/20050415/20/3940356.html</p>
<p>数据库中Image类型的数据的存取(For C#/ASP.NET)<br />
http://www.cnblogs.com/billsfeng/archive/2008/07/31/1257579.html</p>
<p>SQL Server存储图像数据的策略与方法 <br />
http://www.yesky.com/20030113/1648152.shtml<br />
<br />
How To Read and Write BLOB Data by Using ADO.NET with Visual C# .NET<br />
http://support.microsoft.com/default.aspx?scid=kb;EN-US;309158<br />
</p>
<br />
<br />
<hr color="#999999" size="4" />
<strong>1、图片存储</strong><br />
<br />
a.存储于数据库<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;在大多数情况下，最好把图片文件与其它数据一起存在数据库中。因为将影像数据文件存储在数据库中有许多优点：<br />
<br />
　　<strong>易于管理</strong>&nbsp;当BLOB与其他数据一起存储在数据库中时，BLOB和表格是数据一起备份和恢复。这样就降低了表格数据与BLOB数据不同步的机会，而且降低了其他用户无意中删除了文件系统中BLOB数据位置的路径和风险。另外，将数据存储在数据库中BLOB和其他数据的插入、更新和删除都在同一个事务中实现。这样就确保了数据的一致性和文件与数据库之间的一致性。还有一点好处是不需要为文件系统中的文件单独设置安全性。<br />
<br />
　　<strong>可伸缩性</strong>&nbsp;尽管文件系统被设计为能够处理大量不同大小的对象，但是文件系统不能对大量小文件进行优化。在这种情况下，数据库系统可以进行优化。<br />
<br />
　　<strong>可用性</strong>&nbsp;数据库具有比文件系统更多的可用性。数据库复制允许在分布式环境中复制、分配和潜在的修改数据。在主系统失效的情况下，日志转移提供了保留数据库备用副本的方法。</span></div>
<em style="font-size: 8pt">引自：SQL Server存储图像数据的策略与方法</em><br />
<br />
<br />
b.存储于文件系统
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">当然，在某些情况下，将图片存储在文件系统中将是更好的选择：<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />（</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000">）使用图片的应用程序需要数据流性能，例如实时的视频重现。<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />（</span><span style="font-weight: bold; color: #800000">2</span><span style="color: #000000">）象Microsoft&nbsp;PhotoDraw或者Adobe&nbsp;Photoshop这样的应用程序经常访问BLOB，这些应用程序只知道怎样访问文件。<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />（</span><span style="font-weight: bold; color: #800000">3</span><span style="color: #000000">）需要使用一些NTFS文件系统中的特殊功能，例如远程存储。</span></div>
<em style="font-size: 8pt">引自：SQL Server存储图像数据的策略与方法</em><br />
<br />
<br />
&nbsp;&nbsp;&nbsp; 建议：减轻数据库处理负担,也可以建立专门的文件服务器存放图片和视频.<br />
<br />
<br />
<br />
<hr color="#999999" size="4" />
<strong>2、数据库存储及读取图片数据</strong><br />
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000">.将Image图像文件存入到数据库中&nbsp;&nbsp;我们知道数据库里的Image类型的数据是"二进制数据",因此必须将图像文件转换成字节数组才能存入数据库中.<br />
<br />
</span><span style="font-weight: bold; color: #800000">2</span><span style="color: #000000">.从SQL&nbsp;Server数据库读取Image类型的数据,并转换成bytes</span><span style="color: #ff0000">[]</span><span style="color: #000000">或Image图像文件</span></div>
<em style="font-size: 8pt">引自：数据库中Image类型的数据的存取(For C#/ASP.NET)</em><br />
<br />
<br />
<br />
<hr color="#999999" size="4" />
<strong>3、asp.net中自定义对图片文件的访问</strong><br />
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">web.config<br />
<br />
&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">system</span><span style="color: #ff0000">.web</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;vs调试、iis6&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">httpHandlers</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">add&nbsp;</span><span style="color: #ff0000">path</span><span style="color: #0000ff">="*.jpg"</span><span style="color: #ff0000">&nbsp;verb</span><span style="color: #0000ff">="*"</span><span style="color: #ff0000">&nbsp;type</span><span style="color: #0000ff">="包名.ImageHandler,&nbsp;dll文件"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">add&nbsp;</span><span style="color: #ff0000">path</span><span style="color: #0000ff">="*.jpeg"</span><span style="color: #ff0000">&nbsp;verb</span><span style="color: #0000ff">="*"</span><span style="color: #ff0000">&nbsp;type</span><span style="color: #0000ff">="包名.ImageHandler,&nbsp;dll文件"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">add&nbsp;</span><span style="color: #ff0000">path</span><span style="color: #0000ff">="*.png"</span><span style="color: #ff0000">&nbsp;verb</span><span style="color: #0000ff">="*"</span><span style="color: #ff0000">&nbsp;type</span><span style="color: #0000ff">="包名.ImageHandler,&nbsp;dll文件"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">add&nbsp;</span><span style="color: #ff0000">path</span><span style="color: #0000ff">="*.bmp"</span><span style="color: #ff0000">&nbsp;verb</span><span style="color: #0000ff">="*"</span><span style="color: #ff0000">&nbsp;type</span><span style="color: #0000ff">="包名.ImageHandler,&nbsp;dll文件"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">httpHandlers</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">system.web</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">system</span><span style="color: #ff0000">.webServer</span><span style="color: #0000ff">&gt;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;iis7&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">handlers</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">add&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="jpgMark"</span><span style="color: #ff0000">&nbsp;path</span><span style="color: #0000ff">="*.jpg"</span><span style="color: #ff0000">&nbsp;verb</span><span style="color: #0000ff">="*"</span><span style="color: #ff0000">&nbsp;type</span><span style="color: #0000ff">="包名.ImageHandler,&nbsp;dll文件"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">add&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="jpegMark"</span><span style="color: #ff0000">&nbsp;path</span><span style="color: #0000ff">="*.jpeg"</span><span style="color: #ff0000">&nbsp;verb</span><span style="color: #0000ff">="*"</span><span style="color: #ff0000">&nbsp;type</span><span style="color: #0000ff">="包名.ImageHandler,&nbsp;dll文件"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">add&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="pngMark"</span><span style="color: #ff0000">&nbsp;path</span><span style="color: #0000ff">="*.png"</span><span style="color: #ff0000">&nbsp;verb</span><span style="color: #0000ff">="*"</span><span style="color: #ff0000">&nbsp;type</span><span style="color: #0000ff">="包名.ImageHandler,&nbsp;dll文件"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">add&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="bmpMark"</span><span style="color: #ff0000">&nbsp;path</span><span style="color: #0000ff">="*.bmp"</span><span style="color: #ff0000">&nbsp;verb</span><span style="color: #0000ff">="*"</span><span style="color: #ff0000">&nbsp;type</span><span style="color: #0000ff">="包名.ImageHandler,&nbsp;dll文件"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">handlers</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">system.webServer</span><span style="color: #0000ff">&gt;</span></div>
<br />
ImageHandler 图片缩放与水印效果<br />
http://www.blogjava.net/kiant/articles/317469.html<br />
<br />
<br />
<br />
<hr color="#999999" size="4" />
<strong>4、其他组件</strong><br />
<br />
Persits AspJpeg组件图片水印\缩略图\图片合并\图片切割\实例教程<br />
http://www.aspxhome.com/asp/component/200812/620614.htm<br />
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000"><strong>AspJpeg功能摘要</strong><br />
支持JPEG,&nbsp;GIF,&nbsp;BMP,&nbsp;TIFF&nbsp;和&nbsp;PNG&nbsp;格式图片.&nbsp;输出格式始终为&nbsp;JPEG<br />
源图片可以来源于磁盘、内存、或者记录集（数据库）<br />
缩略图片可以保存到磁盘、内存、或者HTTP流<br />
支持三种更改大小方式:&nbsp;nearest-neighbor,&nbsp;bilinear,&nbsp;and&nbsp;bicubic.&nbsp;<br />
可以在图片之上添加图片或者文字.&nbsp;<br />
支持画中画<br />
支持复制，反转，旋转，锐化，灰度调节.<br />
可以调节压缩比率，以得到最佳输出效果和大小.&nbsp;<br />
从Jpeg图片中抽取EXIF&nbsp;和&nbsp;IPTC数据.<br />
CMYK-RGB转换<br />
Read/write&nbsp;access&nbsp;to&nbsp;individual&nbsp;pixels&nbsp;of&nbsp;an&nbsp;image.&nbsp;（从图象中对任意象素进行读/写存取。）</span></div>
<br />
<br />
<br />
<hr color="#999999" size="4" />
<strong>5、C# 处理GIF 图片的问题？（分不够，还有）</strong><br />
http://topic.csdn.net/t/20060703/11/4856635.html<br />
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">8&nbsp;楼tzzzc（冷剑）回复于&nbsp;2006-07-03&nbsp;13:33:19&nbsp;得分&nbsp;0&nbsp;<br />
to:Knight94(愚翁)&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;Graphics&nbsp;&nbsp;&nbsp;myImg&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;Graphics.FromImage(zoomImg);//创建Graphics&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;在最后一句出现问题(处理GIF&nbsp;&nbsp;&nbsp;图片时候，提示无法从带有索引像素格式的图像创建&nbsp;&nbsp;&nbsp;Graphics)，老提示：A&nbsp;&nbsp;&nbsp;Graphics&nbsp;&nbsp;&nbsp;object&nbsp;&nbsp;&nbsp;cannot&nbsp;&nbsp;&nbsp;be&nbsp;&nbsp;&nbsp;created&nbsp;&nbsp;&nbsp;from&nbsp;&nbsp;&nbsp;an<br />
<br />
<br />
9&nbsp;楼Knight94（愚翁）回复于&nbsp;2006-07-03&nbsp;13:41:34&nbsp;得分&nbsp;0<br />
&nbsp;不要用gif图像直接生成graphics对象，&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;处理流程：&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;1、gif&nbsp;&nbsp;&nbsp;分解成png或者jpg文件组；&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;2、对每个png或者jpg文件进行处理；&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;3、把处理好的png或者jpg文件组，进行合成一个gif。&nbsp;&nbsp;&nbsp;</span></div>
<br />
<br />
<br />
<hr color="#999999" size="4" />
<strong>6、ASP.NET输出PNG图片时出现GDI+一般性错误的解决方法</strong><br />
详细出处参考：http://www.jb51.net/article/17063.htm<br />
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">Response.ContentType&nbsp;=&nbsp;"image/PNG";&nbsp;<br />
using&nbsp;(MemoryStream&nbsp;ms&nbsp;=&nbsp;new&nbsp;MemoryStream())&nbsp;<br />
{&nbsp;<br />
img.Save(ms,&nbsp;ChartFormat.Png);&nbsp;<br />
Response.OutputStream.Write(ms.GetBuffer(),&nbsp;0,&nbsp;(int)ms.Length);&nbsp;<br />
}&nbsp;<br />
<br />
就可以输入png图片了。&nbsp;<br />
这是由于Response.OutputStream这个流的无法往回读取造成的，也就是它的CanSeek属性是false。png图像生成的时候不像jpeg，不是流式的，已经写入的就不再管了，而是需要往回不断地写入结构数据。但是response流无法往回seek，所以直接用就不行了。改成一个可以seek的MemoryStream，先生成好png图片，然后再输出到response流。&nbsp;</span></div>
<img src ="http://www.blogjava.net/kiant/aggbug/320052.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kiant/" target="_blank">黄小二</a> 2010-05-04 15:41 <a href="http://www.blogjava.net/kiant/articles/320052.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转] DataBinder.Eval用法</title><link>http://www.blogjava.net/kiant/articles/319195.html</link><dc:creator>黄小二</dc:creator><author>黄小二</author><pubDate>Tue, 27 Apr 2010 05:15:00 GMT</pubDate><guid>http://www.blogjava.net/kiant/articles/319195.html</guid><wfw:comment>http://www.blogjava.net/kiant/comments/319195.html</wfw:comment><comments>http://www.blogjava.net/kiant/articles/319195.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kiant/comments/commentRss/319195.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kiant/services/trackbacks/319195.html</trackback:ping><description><![CDATA[<br />
转自：<br />
[ASP.NET]DataBinder.Eval用法<br />
http://www.cnblogs.com/march3/archive/2007/05/22/755534.html<br />
<br />
<p>&nbsp;</p>
<p>&lt;%# Bind("Subject") %&gt; //绑定字段<br />
&lt;%# Container.DataItemIndex + 1%&gt; //实现自动编号<br />
&lt;%# DataBinder.Eval(Container.DataItem, "[n]") %&gt; </p>
<p>通常使用的方法<br />
&lt;%# DataBinder.Eval(Container.DataItem, "ColumnName") %&gt; <br />
&lt;%# DataBinder.Eval(Container.DataItem, "ColumnName", null) %&gt; <br />
&lt;%# DataBinder.Eval(Container, "DataItem.ColumnName", null) %&gt; </p>
<p>其他用法<br />
&lt;%# ((DataRowView)Container.DataItem)["ColumnName"] %&gt; <br />
&lt;%# ((DataRowView)Container.DataItem).Row["ColumnName"] %&gt; <br />
&lt;%# ((DataRowView)Container.DataItem)["adtitle"] %&gt; <br />
&lt;%# ((DataRowView)Container.DataItem)[n] %&gt; <br />
&lt;%# ((DbDataRecord)Container.DataItem)[0] %&gt; <br />
&lt;%# (((自定义类型)Container.DataItem)).属性.ToString() %&gt;//如果属性为字符串类型就不用ToString()了</p>
<p>DataBinder.Eval用法范例<br />
&lt;%# DataBinder.Eval(Container.DataItem, "IntegerValue", "{0:c}") %&gt;<br />
格式化字符串参数是可选的。如果忽略参数，DataBinder.Eval 返回对象类型的值，</p>
<p>//显示二位小数<br />
&lt;%# DataBinder.Eval(Container.DataItem, "UnitPrice", "${0:F2}") %&gt; <br />
//{0:G}代表显示True或False<br />
&lt;ItemTemplate&gt;<br />
&nbsp;&lt;asp:Image Width="12" Height="12" Border="0" runat="server"<br />
&nbsp;AlternateText='&lt;%# DataBinder.Eval(Container.DataItem, "Discontinued", "{0:G}") %&gt;'<br />
&nbsp;ImageUrl='&lt;%# DataBinder.Eval(Container.DataItem, "Discontinued", "~/images/{0:G}.gif") %&gt;' /&gt;<br />
&lt;/ItemTemplate&gt;<br />
//转换类型<br />
((string)DataBinder.Eval(Container, "DataItem.P_SHIP_TIME_SBM8")).Substring(4,4)<br />
{0:d} 日期只显示年月日<br />
{0:yyyy-mm-dd} 按格式显示年月日<br />
{0:c} 货币样式<br />
&lt;%#Container.DataItem("price","{0:￥#,##0.00}")%&gt;<br />
&lt;%# DataBinder.Eval(Container.DataItem,"Company_Ureg_Date","{0:yyyy-M-d}")%&gt;</p>
<p><br />
Specifier Type&nbsp;&nbsp;&nbsp;&nbsp; Format&nbsp;&nbsp; Output (Passed Double 1.42)&nbsp; Output (Passed Int -12400) <br />
c&nbsp; Currency&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {0:c}&nbsp;&nbsp;&nbsp;&nbsp; $1.42&nbsp;&nbsp;&nbsp;&nbsp; -$12,400 <br />
d&nbsp; Decimal&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {0:d}&nbsp;&nbsp;&nbsp; System.FormatException&nbsp; -12400 <br />
e&nbsp; Scientific&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {0:e}&nbsp;&nbsp;&nbsp; 1.420000e+000&nbsp;&nbsp;&nbsp; -1.240000e+004 <br />
f&nbsp; Fixed point&nbsp;&nbsp;&nbsp;&nbsp; {0:f}&nbsp; 1.42&nbsp;&nbsp;&nbsp; -12400.00 <br />
g&nbsp; General&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {0:g}&nbsp; 1.42&nbsp;&nbsp;&nbsp;&nbsp; -12400 <br />
n&nbsp; Number with commas for thousands&nbsp; {0:n}&nbsp; 1.42&nbsp;&nbsp;&nbsp;&nbsp; -12,400 <br />
r&nbsp; Round trippable&nbsp;&nbsp;&nbsp; {0:r}&nbsp; 1.42&nbsp;&nbsp;&nbsp;&nbsp; System.FormatException <br />
x&nbsp; Hexadecimal&nbsp;&nbsp;&nbsp; {0:x4}&nbsp; System.FormatException&nbsp;&nbsp; cf90 </p>
<p><br />
{0:d} 日期只显示年月日<br />
{0:yyyy-mm-dd} 按格式显示年月日</p>
<p><br />
样式取决于 Web.config 中的设置</p>
<p>{0:c}&nbsp; 或 {0:￡0,000.00} 货币样式&nbsp; 标准英国货币样式<br />
&lt;system.web&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="en-US" uiCulture="en-US" /&gt;<br />
&lt;/system.web&gt;<br />
显示为 ￡3,000.10</p>
<p>{0:c}&nbsp; 或 string.Format("{0:C}", price); 中国货币样式<br />
&lt;system.web&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="zh-cn" uiCulture="zh-cn" /&gt;<br />
&lt;/system.web&gt;<br />
显示为 ￥3,000.10</p>
<p>{0:c}&nbsp; 或 string.Format("{0:C}", price); 美国货币样式<br />
&lt;system.web&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;globalization requestEncoding="utf-8" responseEncoding="utf-8" /&gt;<br />
&lt;/system.web&gt;<br />
显示为 $3,000.10</p>
<p>&nbsp;</p>
<p><strong>DataBinder.Eval(Container.DataItem,"Name")和Container.DataItem("Name")有什么区别？</strong><br />
DataBinder是System.Web里面的一个静态类，它提供了<span style="color: #0000ff">Eval方法用于简化数据绑定表达式的编写</span>，但是它使用的方式是通过Reflection等开销比较大的方法来达到易用性，因此其性能并不是最好的。而Container则根本不是任何一个静态的对象或方法，它是ASP.NET页面编译器在数据绑定事件处理程序内部声明的局部变量，其类型是可以进行数据绑定的控件的数据容器类型（如在Repeater内部的数据绑定容器叫RepeaterItem），在这些容器类中基本都有DataItem属性，因此你可以写Container.DataItem，这个属性返回的是你正在被绑定的数据源中的那个数据项。如果你的数据源是DataTable，则这个数据项的类型实际是DataRowView。<br />
<br />
<br />
<br />
<hr color="#999999" size="4" />
<strong>数据绑定以及Container.DataItem几种方式与用法分析</strong><br />
http://blog.csdn.net/jelink/archive/2006/08/25/1118839.aspx<br />
<br />
<p>&nbsp;</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">绑定到集合:</span><span style="color: #000000">&lt;</span><span style="color: #000000">asp:ListBox&nbsp;id</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">ListBox1</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;datasource</span><span style="color: #000000">=</span><span style="color: #000000">'</span><span style="color: #000000">&lt;%#&nbsp;myArray%&gt;</span><span style="color: #000000">'</span><span style="color: #000000">&nbsp;runat</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">server</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<br />
</span><span style="color: #000000">&lt;%</span><span style="color: #000000">@&nbsp;Import&nbsp;</span><span style="color: #0000ff">namespace</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">System.Data</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">%&gt;</span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #000000">&lt;%</span><span style="color: #000000">#&nbsp;((DataRowView)Container.DataItem)[</span><span style="color: #000000">"</span><span style="color: #000000">xxxx</span><span style="color: #000000">"</span><span style="color: #000000">]</span><span style="color: #000000">%&gt;</span><span style="color: #000000">&nbsp;</span></div>
<p><br />
<br />
<hr color="#999999" size="4" />
<strong>What's the deal with Databinder.Eval and Container.DataItem?</strong><br />
http://weblogs.asp.net/rajbk/archive/2004/07/20/what-s-the-deal-with-databinder-eval-and-container-dataitem.aspx<br />
<br />
</p>
<p>&nbsp;</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">&lt;</span><span style="color: #800000">a&nbsp;</span><span style="color: #ff0000">href</span><span style="color: #0000ff">='&lt;%#&nbsp;&nbsp;</span><span style="color: #ff0000">Databinder.Eval(Container.DataItem,"ID","default.aspx?CategoryId</span><span style="color: #0000ff">={0}"&nbsp;</span><span style="color: #ff0000">)&nbsp;%</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">'&gt;<br />
<br />
<br />
re:&nbsp;What's&nbsp;the&nbsp;deal&nbsp;with&nbsp;Databinder.Eval&nbsp;and&nbsp;Container.DataItem?&nbsp;<br />
<br />
Answering&nbsp;the&nbsp;question<img src="http://www.blogjava.net/Images/dot.gif"  alt="" />.<br />
<br />
</span><span style="color: #000000; background-color: #ffff00">&lt;%</span><span style="color: #000000; background-color: #f5f5f5">#&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">If</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;DataBinder.Eval(Container.DataItem,&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">DATAFIELD</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">)&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">&lt;&gt;</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">""</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">Then</span><span style="color: #000000; background-color: #f5f5f5"><br />
<br />
&nbsp;&nbsp;&nbsp;Response.Write(</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">something</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">)<br />
<br />
</span><span style="color: #0000ff; background-color: #f5f5f5">End</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">If</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;</span><span style="color: #000000; background-color: #ffff00">%&gt;</span><span style="color: #000000"><br />
<br />
Try&nbsp;this<img src="http://www.blogjava.net/Images/dot.gif"  alt="" />.<br />
<br />
</span><span style="color: #000000; background-color: #ffff00">&lt;%</span><span style="color: #000000; background-color: #f5f5f5">#&nbsp;DataBinder.Eval(Container.DataItem,&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">DataField</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">).Equals(</span><span style="color: #000000; background-color: #f5f5f5">""</span><span style="color: #000000; background-color: #f5f5f5">)?</span><span style="color: #000000; background-color: #f5f5f5">""</span><span style="color: #000000; background-color: #f5f5f5">:</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">Something</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #ffff00">%&gt;</span><span style="color: #000000"><br />
<br />
<br />
Thursday,&nbsp;August&nbsp;02,&nbsp;2007&nbsp;11:23&nbsp;PM&nbsp;by&nbsp;someone&nbsp;</span></div>
<p><br />
</p>
<img src ="http://www.blogjava.net/kiant/aggbug/319195.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kiant/" target="_blank">黄小二</a> 2010-04-27 13:15 <a href="http://www.blogjava.net/kiant/articles/319195.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]Response.Redirect(),Server.Transfer(),Server.Execute()的区别</title><link>http://www.blogjava.net/kiant/articles/319194.html</link><dc:creator>黄小二</dc:creator><author>黄小二</author><pubDate>Fri, 23 Apr 2010 05:56:00 GMT</pubDate><guid>http://www.blogjava.net/kiant/articles/319194.html</guid><wfw:comment>http://www.blogjava.net/kiant/comments/319194.html</wfw:comment><comments>http://www.blogjava.net/kiant/articles/319194.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kiant/comments/commentRss/319194.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kiant/services/trackbacks/319194.html</trackback:ping><description><![CDATA[<br />
内容转自：<br />
Response.Redirect(),Server.Transfer(),Server.Execute()的区别<br />
http://www.cnblogs.com/3stones/archive/2008/03/20/1114645.html<br />
<br />
<br />
<p><strong>1、Response.Redirect():</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Response.Redirect方法导致浏览器链接到一个指定的URL。当Response.Redirect()方法被调用时，它会创建一个应答，应答头中指出了状态代码302（表示目标已经改变）以及新的目标URL。浏览器从服务器收到该应答，利用应答头中的信息发出一个对新URL的请求。<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;这就是说，使用Response.Redirect方法时重定向操作发生在客户端，<span style="color: #0000ff">总共涉及到两次与服务器的通信（两个来回）：</span>第一次是对原始页面的请求，得到一个302应答，第二次是请求302应答中声明的新页面，得到重定向之后的页面。<br />
</p>
<p><strong>2、Server.Transfer</strong>&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;Server.transfer是IIS 5.0新增加的一个功能。它解决了Response.Redirect的两个重要的缺陷：<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;1）在Response.Redirect中，我们得不到任何第一页的输出<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;2）Response.Redirect会丢失request中的所有属性，当然我们可以通过一些其他的办法，比如session来搞定，可是，有些页的参数是在request中传过来的，这样的话，就不行了<br />
&nbsp;&nbsp;&nbsp; &nbsp;3) &nbsp;Response.Redirect需要client端再发起一个请求。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;Server.transfer就很好地解决了这些问题。它是从server端直接向下一页发起请求，不需要client再次发送请求。如果你的网页非常依赖response.redirect，这个小小的改变可以提高将近25%的效率（根据微软文档）。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Server.Transfer方法<span style="color: #0000ff">把执行流程从当前的ASPX文件转到同一服务器上的另一个ASPX页面</span>。调用Server.Transfer时，当前的ASPX页面终止执行，执行流程转入另一个ASPX页面，但新的ASPX页面仍使用前一ASPX页面创建的应答流。<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果用Server.Transfer方法实现页面之间的导航，<span style="color: #0000ff">浏览器中的URL不会改变</span>，因为重定向完全在服务器端进行，浏览器根本不知道服务器已经执行了一次页面变换。<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;默认情况下，Server.Transfer方法不会把表单数据或查询字符串从一个页面传递到另一个页面，但只要把该方法的第二个参数设置成True，就<span style="color: #0000ff">可以保留第一个页面的表单数据和查询字符串</span>。<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;同时，使用Server.Transfer时应<span style="color: #ff0000">注意一点</span>：目标页面将使用原始页面创建的应答流，这导致ASP.NET的机器验证检查（Machine Authentication Check，MAC）认为新页面的ViewState已被篡改。因此，如果要保留原始页面的表单数据和查询字符串集合，必须把目标页面Page指令的 EnableViewStateMac属性设置成False。</p>
<p>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;Server.Transfer()有一个<span style="color: #ff0000">不足就是：</span>当用户在a.aspx中提交了一个表单,然后用Server.Transfer()进入 b.aspx，这时如果用户刷新一下页面，浏览器便会问用户是否&#8220;重试&#8221;发送表单，如果用户点击&#8220;是&#8221;，那么，表单中的数据被重新发送到服务器。如发送表单的作用就是为了向数据库中插入一条记录，结果导不希望发生的事——同一表单被多次加入到数据库中。</p>
<p><br />
<br />
<strong>3、Server.Execute</strong>&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Server.Execute方法允许<span style="color: #0000ff">当前的ASPX页面执行一个同一Web服务器上的指定ASPX页面</span>，当指定的ASPX页面执行完毕，控制流程重新返回原页面发出Server.Execute调用的位置。这种页面导航方式类似于针对ASPX页面的一次函数调用，<span style="color: #ff0000">被调用的页面能够访问发出调用页面的表单数据和查询字符串集合</span>，所以要把被调用页面Page指令的EnableViewStateMac属性设置成False。<br />
<br />
</p>
<p><strong>4.</strong><br />
Server.Execute("another.aspx")和Server.Transfer("another.aspx")区别:&nbsp; <br />
Execute是从当前页面转移到指定页面,并将执行返回到当前页面&nbsp; <br />
Transfer是将执行完全转移到指定页面 </p>
<p><br />
<strong>总结：<br />
</strong>在网络状态较好的情况下,Redirect(url)方法效率最高!! 可重定向到同一台或非同一台服务器上的aspx或非aspx（html）资源&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">&nbsp;*重定向<br />
</span>Server.Transfer方法和Server.Execute方法最灵活!! 但只能转到同一Application目录下，也有可能导致不期望的结果发生&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">*转发<br />
</span>Server.Execute方法占用资源最多.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">*包含<br />
</span><br />
<font color="#0000ff">ps. *项为笔记</font></p>
 <img src ="http://www.blogjava.net/kiant/aggbug/319194.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kiant/" target="_blank">黄小二</a> 2010-04-23 13:56 <a href="http://www.blogjava.net/kiant/articles/319194.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Enterprise Library 4 之 DAAB使用</title><link>http://www.blogjava.net/kiant/articles/317510.html</link><dc:creator>黄小二</dc:creator><author>黄小二</author><pubDate>Mon, 05 Apr 2010 14:26:00 GMT</pubDate><guid>http://www.blogjava.net/kiant/articles/317510.html</guid><wfw:comment>http://www.blogjava.net/kiant/comments/317510.html</wfw:comment><comments>http://www.blogjava.net/kiant/articles/317510.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kiant/comments/commentRss/317510.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kiant/services/trackbacks/317510.html</trackback:ping><description><![CDATA[<br />
引用自：<br />
Enterprise Library 2.0 -- Data Access Application Block　和　加密数据库连接字符串<br />
http://www.cnblogs.com/adamoooo/articles/892618.html<br />
<br />
<br />
<br />
取得存储过程的返回值、输出参数<br />
<hr />
<strong>&nbsp;带输出参数的：</strong><br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Database&nbsp;db&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;DatabaseFactory.CreateDatabase();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DbCommand&nbsp;cmd&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;db.GetStoredProcCommand(</span><span style="color: #000000">"</span><span style="color: #000000">usp_xxx</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db.AddParameter(cmd,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">@UserID</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;DbType.Int32,&nbsp;ParameterDirection.InputOutput,&nbsp;</span><span style="color: #000000">""</span><span style="color: #000000">,&nbsp;DataRowVersion.Current,&nbsp;dict.Get(</span><span style="color: #000000">"</span><span style="color: #000000">UserID</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db.AddInParameter(cmd,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">@LoginName</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;DbType.String,&nbsp;dict[</span><span style="color: #000000">"</span><span style="color: #000000">LoginName</span><span style="color: #000000">"</span><span style="color: #000000">]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db.ExecuteNonQuery(cmd);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;DictionaryEx.Create(</span><span style="color: #000000">"</span><span style="color: #000000">UserID</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;db.GetParameterValue(cmd,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">@UserID</span><span style="color: #000000">"</span><span style="color: #000000">));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(Exception)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></div>
<br />
<br />
<br />
带返回值：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">try</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Database&nbsp;db&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;DatabaseFactory.CreateDatabase();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DbCommand&nbsp;cmd&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;db.GetStoredProcCommand(</span><span style="color: #000000">"</span><span style="color: #000000">usp_xxx</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db.AddInParameter(cmd,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">@UserID</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;DbType.Int32,&nbsp;dict[</span><span style="color: #000000">"</span><span style="color: #000000">UserID</span><span style="color: #000000">"</span><span style="color: #000000">]);</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db.AddParameter(cmd,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">@ret</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;DbType.Int32,&nbsp;ParameterDirection.ReturnValue,&nbsp;</span><span style="color: #000000">""</span><span style="color: #000000">,&nbsp;DataRowVersion.Default,&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db.ExecuteNonQuery(cmd);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;cmd.Parameters[</span><span style="color: #000000">"</span><span style="color: #000000">@ret</span><span style="color: #000000">"</span><span style="color: #000000">].Value;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(Exception)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
<br />
<br />
<br />
查询返回结果集：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">try</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Database&nbsp;db&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;DatabaseFactory.CreateDatabase();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DbCommand&nbsp;cmd&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;db.GetStoredProcCommand(</span><span style="color: #000000">"</span><span style="color: #000000">usp_xxx</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db.AddInParameter(cmd,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">@rowStart</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;DbType.Int32,&nbsp;dict.Get(</span><span style="color: #000000">"</span><span style="color: #000000">rowStart</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db.AddInParameter(cmd,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">@rowEnd</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;DbType.Int32,&nbsp;dict.Get(</span><span style="color: #000000">"</span><span style="color: #000000">rowEnd</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">));<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;db.ExecuteDataSet(cmd);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(Exception)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
<br />
 <img src ="http://www.blogjava.net/kiant/aggbug/317510.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kiant/" target="_blank">黄小二</a> 2010-04-05 22:26 <a href="http://www.blogjava.net/kiant/articles/317510.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>存储过程返回的多结果集数据，ado 访问调用</title><link>http://www.blogjava.net/kiant/articles/294666.html</link><dc:creator>黄小二</dc:creator><author>黄小二</author><pubDate>Fri, 11 Sep 2009 00:17:00 GMT</pubDate><guid>http://www.blogjava.net/kiant/articles/294666.html</guid><wfw:comment>http://www.blogjava.net/kiant/comments/294666.html</wfw:comment><comments>http://www.blogjava.net/kiant/articles/294666.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kiant/comments/commentRss/294666.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kiant/services/trackbacks/294666.html</trackback:ping><description><![CDATA[&nbsp;引用自：<br />
<a href="http://topic.csdn.net/t/20050226/13/3808248.html" target="_blank">存储过程返回的多结果集数据，ado怎么打开这些结果集并取得数据？</a><br />
<br />
<br />
SqlDataAdapter&nbsp;&nbsp; myDataAdapter&nbsp;&nbsp; =&nbsp;&nbsp; new&nbsp;&nbsp; SqlDataAdapter("GetRecordFromPage2",myConnection);&nbsp;&nbsp; <br />
&nbsp; myDataAdapter.SelectCommand.CommandType&nbsp;&nbsp; =&nbsp;&nbsp; CommandType.StoredProcedure;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp; myDataAdapter.SelectCommand.Parameters.Add("@sqlstr",sqlstr);&nbsp;&nbsp; <br />
&nbsp; myDataAdapter.SelectCommand.Parameters.Add("@pagecount",pagecount);&nbsp;&nbsp; <br />
&nbsp; myDataAdapter.SelectCommand.Parameters.Add("@pagesize",pagesize);&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp; DataSet&nbsp;&nbsp; ds&nbsp;&nbsp; =&nbsp;&nbsp; new&nbsp;&nbsp; DataSet();&nbsp;&nbsp; <br />
&nbsp; myDataAdapter.Fill(ds);&nbsp;&nbsp; <br />
&nbsp; return&nbsp;&nbsp; ds;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp; ds.Tables[0],ds.Tables[1],ds.Tables[2],分别对应三个结果集<br />
<br />
<br />
<br />
<strong>asp 下：</strong><br />
<br />
&lt;%&nbsp;&nbsp; set&nbsp;&nbsp; cmm=server.createobject("adodb.command")&nbsp;&nbsp; <br />
&nbsp; set&nbsp;&nbsp; rs=server.createobject("adodb.recordset")&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp; cmm.commandtype=4&nbsp;&nbsp; <br />
&nbsp; cmm.activeconnection=conn&nbsp;&nbsp; <br />
&nbsp; cmm.commandtext="proc_name"&nbsp;&nbsp; <br />
&nbsp; set&nbsp;&nbsp; rs=cmm.execute&nbsp;&nbsp; <br />
&nbsp; cmm.execute&nbsp;&nbsp; %&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;%&nbsp;&nbsp; while&nbsp;&nbsp; not&nbsp;&nbsp; rs.eof&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; response.write&nbsp;&nbsp; rs(0)&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; rs.movenext&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wend&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; %&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;%&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set&nbsp;&nbsp; rs2=rs.NextRecordset()&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while&nbsp;&nbsp; not&nbsp;&nbsp; rs2.eof&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; response.write&nbsp;&nbsp; rs2(0)&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rs2.movenext&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wend&nbsp;&nbsp; <br />
&nbsp; ...........&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rs2.close&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set&nbsp;&nbsp; rs2=nothing&nbsp;&nbsp; %&gt;<br />
<img src ="http://www.blogjava.net/kiant/aggbug/294666.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kiant/" target="_blank">黄小二</a> 2009-09-11 08:17 <a href="http://www.blogjava.net/kiant/articles/294666.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Enterprise Library 企业库笔记</title><link>http://www.blogjava.net/kiant/articles/289017.html</link><dc:creator>黄小二</dc:creator><author>黄小二</author><pubDate>Thu, 30 Jul 2009 02:25:00 GMT</pubDate><guid>http://www.blogjava.net/kiant/articles/289017.html</guid><wfw:comment>http://www.blogjava.net/kiant/comments/289017.html</wfw:comment><comments>http://www.blogjava.net/kiant/articles/289017.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kiant/comments/commentRss/289017.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kiant/services/trackbacks/289017.html</trackback:ping><description><![CDATA[<p>建议主机安装 企业库和 MySQL连接</p>
<p>&nbsp;</p>
<p><strong>1.</strong><br />
Enterprise Library启用签名后发生 PublicKeyToken错误，HRESULT:0x80131040解决<br />
http://blog.csdn.net/cnming/archive/2007/07/15/1691714.aspx</p>
<p>ps:我的解决方法 PublicKeyToken=null, 不设置秘钥</p>
<p>&nbsp;</p>
<p><strong>2.对数据库操作</strong></p>
<p>http://pw.cnblogs.com/archive/2006/06/02/415431.html </p>
<p>&nbsp;</p>
<p><strong>3.</strong><br />
Microsoft.Practices.ObjectBuilder2.BuildFailedException: The current build operation (build key Build Key[Microsoft.Practices.EnterpriseLibrary.Data.Database, HRPConnection]) failed: 找不到请求的 .Net Framework 数据提供程序。可能没有安装。 (Strategy type ConfiguredObjectStrategy, index 2) ---&gt; System.ArgumentException: 找不到请求的 .Net Framework 数据提供程序。可能没有安装。</p>
<p><br />
&lt;section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=4.1.0.0, Culture=neutral, PublicKeyToken=null" /&gt;<br />
改为(参见: x:\EntLib41Src\Quick Starts\Data\CS\DataAccessQuickStart\app.config 示例)<br />
&lt;section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data" /&gt;<br />
=======================================================<br />
或者说最大的可能是没有相应的数据库链接驱动<br />
比如: 我的项目中使用的是 mysql 配置文件里 providerName="System.Data.SqlClient"<br />
如果没有装相应的驱动 mysql-connector-net-6.0.3.zip就有可能报这个错误.</p>
<p>&nbsp;</p>
<p><strong>4. 数据库连接 "未将对象引用到实例" 错</strong><br />
在家里机器上 "数据连接--MySQL Database--Server Name" 一栏填上本机 IP地址 "10.0.0.99" 会提示错误信息 "未将对象引用到实例", 改为 "localhost" 就可以, 但是在公司机器上却没这个问题. <br />
(难道是因为公司主机有提供 mysql服务, 所以直接连接主机能成功.<br />
而个人家里面用的是精简版, 没安装服务, 所以直接打 IP地址是连接不上, 需改为 localhost)</p>
<p><br />
<strong>5. 步骤</strong><br />
使用microsoft EnterpriseLibrary连接不同数据库简单应用 <br />
文章出处：http://www.diybl.com/course/4_webprogram/asp.net/netjs/20081216/154074.html</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<img src ="http://www.blogjava.net/kiant/aggbug/289017.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kiant/" target="_blank">黄小二</a> 2009-07-30 10:25 <a href="http://www.blogjava.net/kiant/articles/289017.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C# XML的一点记录</title><link>http://www.blogjava.net/kiant/articles/289010.html</link><dc:creator>黄小二</dc:creator><author>黄小二</author><pubDate>Thu, 30 Jul 2009 02:11:00 GMT</pubDate><guid>http://www.blogjava.net/kiant/articles/289010.html</guid><wfw:comment>http://www.blogjava.net/kiant/comments/289010.html</wfw:comment><comments>http://www.blogjava.net/kiant/articles/289010.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kiant/comments/commentRss/289010.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kiant/services/trackbacks/289010.html</trackback:ping><description><![CDATA[<br />
C#读取XML点滴<br />
http://www.cnblogs.com/sopper/archive/2006/11/03/549435.html <br />
<br />
<br />
<hr />
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XmlDocument doc = new XmlDocument();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XmlElement root = doc.CreateElement("root");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XmlElement companyId = doc.CreateElement("companyId");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; companyId.InnerText = "1";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; root.AppendChild(companyId);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; doc.AppendChild(root);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string kk = doc.OuterXml;<br />
<br />
<br />
</p>
<p>///////////////////////////<br />
<p>try<br />
&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; XmlDocument doc = new XmlDocument();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XmlElement root = doc.CreateElement("root");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; foreach (var item in dict)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XmlElement e = doc.CreateElement(item.Key);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.InnerText = item.Value;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; root.AppendChild(e);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; doc.AppendChild(root);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return doc.OuterXml;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (Exception)<br />
&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; return "";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p><br />
<br />
<br />
<hr />
<strong>写</strong><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XDocument doc = new XDocument(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new XDeclaration("1.0", "utf-8", "yes"),<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new XElement("root",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new XElement("companyId", "1")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; );
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string kk = doc.ToString();<br />
<br />
---------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XDocument doc = new XDocument(new XDeclaration("1.0", "utf-8", "yes"));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XElement root = new XElement("root");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XElement element = new XElement("companyId");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; element.Value = 1 + "";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; root.Add(element);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; doc.Add(root);</p>
<p><br />
<hr />
<strong>元素读取</strong><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XElement els = XElement.Parse(msg);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var companyId = from e in els.Elements("companyId")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; select e;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string kk = companyId.First().Value;<br />
<br />
<p>&nbsp;</p>
<img src ="http://www.blogjava.net/kiant/aggbug/289010.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kiant/" target="_blank">黄小二</a> 2009-07-30 10:11 <a href="http://www.blogjava.net/kiant/articles/289010.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Xml 处理类(更新中...)</title><link>http://www.blogjava.net/kiant/articles/286878.html</link><dc:creator>黄小二</dc:creator><author>黄小二</author><pubDate>Wed, 15 Jul 2009 07:09:00 GMT</pubDate><guid>http://www.blogjava.net/kiant/articles/286878.html</guid><wfw:comment>http://www.blogjava.net/kiant/comments/286878.html</wfw:comment><comments>http://www.blogjava.net/kiant/articles/286878.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kiant/comments/commentRss/286878.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kiant/services/trackbacks/286878.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: using&nbsp;System;using&nbsp;System.Collections.Generic;using&nbsp;System.Text;using&nbsp;System.Xml.Linq;using&nbsp;System.Data;using&nbsp;System.Linq;using&nbsp;System.IO;using&nbsp;Sy...&nbsp;&nbsp;<a href='http://www.blogjava.net/kiant/articles/286878.html'>阅读全文</a><img src ="http://www.blogjava.net/kiant/aggbug/286878.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kiant/" target="_blank">黄小二</a> 2009-07-15 15:09 <a href="http://www.blogjava.net/kiant/articles/286878.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C# 定时器使用一例</title><link>http://www.blogjava.net/kiant/articles/282489.html</link><dc:creator>黄小二</dc:creator><author>黄小二</author><pubDate>Mon, 15 Jun 2009 16:11:00 GMT</pubDate><guid>http://www.blogjava.net/kiant/articles/282489.html</guid><wfw:comment>http://www.blogjava.net/kiant/comments/282489.html</wfw:comment><comments>http://www.blogjava.net/kiant/articles/282489.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kiant/comments/commentRss/282489.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kiant/services/trackbacks/282489.html</trackback:ping><description><![CDATA[<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Collections.Generic;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Linq;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Text;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">namespace</span><span style="color: #000000">&nbsp;ConsoleApplication1<br />
<img id="Codehighlighter1_117_1225_Open_Image" onclick="this.style.display='none'; Codehighlighter1_117_1225_Open_Text.style.display='none'; Codehighlighter1_117_1225_Closed_Image.style.display='inline'; Codehighlighter1_117_1225_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_117_1225_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_117_1225_Closed_Text.style.display='none'; Codehighlighter1_117_1225_Open_Image.style.display='inline'; Codehighlighter1_117_1225_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_117_1225_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_117_1225_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Program<br />
<img id="Codehighlighter1_141_688_Open_Image" onclick="this.style.display='none'; Codehighlighter1_141_688_Open_Text.style.display='none'; Codehighlighter1_141_688_Closed_Image.style.display='inline'; Codehighlighter1_141_688_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_141_688_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_141_688_Closed_Text.style.display='none'; Codehighlighter1_141_688_Open_Image.style.display='inline'; Codehighlighter1_141_688_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_141_688_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_141_688_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Main(</span><span style="color: #0000ff">string</span><span style="color: #000000">[]&nbsp;args)<br />
<img id="Codehighlighter1_191_682_Open_Image" onclick="this.style.display='none'; Codehighlighter1_191_682_Open_Text.style.display='none'; Codehighlighter1_191_682_Closed_Image.style.display='inline'; Codehighlighter1_191_682_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_191_682_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_191_682_Closed_Text.style.display='none'; Codehighlighter1_191_682_Open_Image.style.display='inline'; Codehighlighter1_191_682_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_191_682_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_191_682_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AddRoomTimer&nbsp;timer&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;AddRoomTimer();<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">true</span><span style="color: #000000">)<br />
<img id="Codehighlighter1_283_510_Open_Image" onclick="this.style.display='none'; Codehighlighter1_283_510_Open_Text.style.display='none'; Codehighlighter1_283_510_Closed_Image.style.display='inline'; Codehighlighter1_283_510_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_283_510_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_283_510_Closed_Text.style.display='none'; Codehighlighter1_283_510_Open_Image.style.display='inline'; Codehighlighter1_283_510_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_283_510_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_283_510_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(AddRoomTimer.COUNT&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">)<br />
<img id="Codehighlighter1_345_496_Open_Image" onclick="this.style.display='none'; Codehighlighter1_345_496_Open_Text.style.display='none'; Codehighlighter1_345_496_Closed_Image.style.display='inline'; Codehighlighter1_345_496_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_345_496_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_345_496_Closed_Text.style.display='none'; Codehighlighter1_345_496_Open_Image.style.display='inline'; Codehighlighter1_345_496_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_345_496_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_345_496_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span style="color: #0000ff">string</span><span style="color: #000000">.Format(</span><span style="color: #000000">"</span><span style="color: #000000">第{0}次调用</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">101</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;AddRoomTimer.COUNT));<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AddRoomTimer.COUNT</span><span style="color: #000000">--</span><span style="color: #000000">;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite);</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;AddRoomTimer<br />
<img id="Codehighlighter1_725_1223_Open_Image" onclick="this.style.display='none'; Codehighlighter1_725_1223_Open_Text.style.display='none'; Codehighlighter1_725_1223_Closed_Image.style.display='inline'; Codehighlighter1_725_1223_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_725_1223_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_725_1223_Closed_Text.style.display='none'; Codehighlighter1_725_1223_Open_Image.style.display='inline'; Codehighlighter1_725_1223_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_725_1223_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_725_1223_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">静态计数器变量</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;COUNT&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public static System.Threading.Timer&nbsp;timer;<br />
<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">静态构造,&nbsp;最多运行一次</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;AddRoomTimer()<br />
<img id="Codehighlighter1_844_1013_Open_Image" onclick="this.style.display='none'; Codehighlighter1_844_1013_Open_Text.style.display='none'; Codehighlighter1_844_1013_Closed_Image.style.display='inline'; Codehighlighter1_844_1013_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_844_1013_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_844_1013_Closed_Text.style.display='none'; Codehighlighter1_844_1013_Open_Image.style.display='inline'; Codehighlighter1_844_1013_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_844_1013_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_844_1013_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">多线程定时器,&nbsp;每隔&nbsp;10000毫秒调用一次被委托的方法&nbsp;TimerCallBack</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;timer&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;System.Threading.Timer(TimerCallBack,&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">10000</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&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">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;TimerCallBack(</span><span style="color: #0000ff">object</span><span style="color: #000000">&nbsp;obj)<br />
<img id="Codehighlighter1_1078_1217_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1078_1217_Open_Text.style.display='none'; Codehighlighter1_1078_1217_Closed_Image.style.display='inline'; Codehighlighter1_1078_1217_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1078_1217_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1078_1217_Closed_Text.style.display='none'; Codehighlighter1_1078_1217_Open_Image.style.display='inline'; Codehighlighter1_1078_1217_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1078_1217_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_1078_1217_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">打印一次时间,&nbsp;测试用</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(DateTime.Now.ToString());<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&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 />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;COUNT&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">100</span><span style="color: #000000">;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div>
<img src ="http://www.blogjava.net/kiant/aggbug/282489.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kiant/" target="_blank">黄小二</a> 2009-06-16 00:11 <a href="http://www.blogjava.net/kiant/articles/282489.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Connector/Net 连接 MySQL远程服务器出现 "Unable to connect to any of the specified MySQL hosts" 解决方法</title><link>http://www.blogjava.net/kiant/articles/270714.html</link><dc:creator>黄小二</dc:creator><author>黄小二</author><pubDate>Thu, 14 May 2009 13:32:00 GMT</pubDate><guid>http://www.blogjava.net/kiant/articles/270714.html</guid><wfw:comment>http://www.blogjava.net/kiant/comments/270714.html</wfw:comment><comments>http://www.blogjava.net/kiant/articles/270714.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/kiant/comments/commentRss/270714.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kiant/services/trackbacks/270714.html</trackback:ping><description><![CDATA[<p><br />
今天做项目时候就遇到这问题<br />
中文提示&#8220;找不到相应的主机。&#8221;</p>
<p>这时候请检查数据库服务器上 MySql.Data.dll 文件版本和项目 bin 目录下的版本是否一致。</p>
<p>如果远程主机版本是 6.0.3<br />
而项目引用的是 5.0.3<br />
则会出现以上的错误提示</p>
<p>但是如果本机主机上版本是 6.0.3<br />
即使项目引用的是 5.0.3<br />
也能正常连接数据库，不清楚是什么原因</p>
<img src ="http://www.blogjava.net/kiant/aggbug/270714.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kiant/" target="_blank">黄小二</a> 2009-05-14 21:32 <a href="http://www.blogjava.net/kiant/articles/270714.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于 WinForm 里 DataGridView , TreeView 的一点记录</title><link>http://www.blogjava.net/kiant/articles/270124.html</link><dc:creator>黄小二</dc:creator><author>黄小二</author><pubDate>Mon, 11 May 2009 14:38:00 GMT</pubDate><guid>http://www.blogjava.net/kiant/articles/270124.html</guid><wfw:comment>http://www.blogjava.net/kiant/comments/270124.html</wfw:comment><comments>http://www.blogjava.net/kiant/articles/270124.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kiant/comments/commentRss/270124.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kiant/services/trackbacks/270124.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 一、编程方式修改被绑定的数据对象&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//利用&nbsp;DataBindingComplete&nbsp;在数据绑定操作完成之后发生&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;void&nbsp;dataGridView1...&nbsp;&nbsp;<a href='http://www.blogjava.net/kiant/articles/270124.html'>阅读全文</a><img src ="http://www.blogjava.net/kiant/aggbug/270124.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kiant/" target="_blank">黄小二</a> 2009-05-11 22:38 <a href="http://www.blogjava.net/kiant/articles/270124.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>asp.net 项目的一点总结 点卡销售/CRM </title><link>http://www.blogjava.net/kiant/articles/250980.html</link><dc:creator>黄小二</dc:creator><author>黄小二</author><pubDate>Mon, 12 Jan 2009 07:35:00 GMT</pubDate><guid>http://www.blogjava.net/kiant/articles/250980.html</guid><wfw:comment>http://www.blogjava.net/kiant/comments/250980.html</wfw:comment><comments>http://www.blogjava.net/kiant/articles/250980.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kiant/comments/commentRss/250980.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kiant/services/trackbacks/250980.html</trackback:ping><description><![CDATA[总感觉这两个项目练习做起来很没有动力? 是因为项目本身大量重复利用 GridView 展示数据使我感觉到厌烦没有挑战性，还是我能力不够不能想到更有效率的数据应用？？？总之，能多练习还是不错的，希望下次能在枯燥的任务下多尝试下有趣的新东西.....<br />
<br />
<br />
&nbsp;遇到问题与解决存档<br />
<br />
1、出错一次之后 linq 不自动释放, 然后老是提示插入已经存在的实体<br />
<br />
<br />
<br />
2、2个层相连接 中间的细线问题<br />
<br />
&lt;div&gt;&lt;img alt="登陆" height="26" src="images/login.gif" /&gt;&lt;/div&gt;<br />
<br />
div 高度根据内容自适应问题<br />
<br />
height:100%<br />
<br />
<br />
css中如何使div居中(垂直水平居中)<br />
http://www.7say.com/article.asp?id=184<br />
<br />
<br />
3、FileUpload 与 提交面板冲突<br />
commandName 与 回传页判断冲突&nbsp; （需在回传的时候在一次绑定 Gv数据源，comman事件才起作用）<br />
<br />
<br />
<br />
4、用 Response.Write("") 传输脚本&lt;script&gt;文件 会影响CSS架构<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ScriptManager.RegisterStartupScript(this.butInsert, this.GetType(), "ok",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "alert('增加成功');", true);<br />
<br />
<br />
5、自动刷新页面<br />
<br />
&nbsp;&nbsp; &lt;script language=javascript&gt;window.location.href=document.URL;<br />
&nbsp;&nbsp;&nbsp; &lt;/script&gt;" ); <br />
<br />
&nbsp;Response.AddHeader( "Refresh","0" ); <br />
Response.Redirect(&nbsp;Request.Url.ToString(&nbsp;)&nbsp;); <br />
<br />
<br />
6、My97DatePicker 日历插件<br />
&lt;script language="javascript" type="text/javascript" src="../My97DatePicker/WdatePicker.js"&gt;&lt;/script&gt;<br />
<br />
&nbsp;onFocus="new WdatePicker(this,'%Y-%M-%D %h:%m:%s',true,'default')" <br />
<br />
<br />
<br />
7、LINQ 修改一个实体的外键 需用到的表达式（奇怪的 ORM思想表现方式）<br />
Lambda 用在基于方法的 LINQ 查询中，作为诸如 Where 和 Where 等标准查询运算符方法的参数。 <br />
old.xxx = db.RoleInfo.Single(p =&gt; p.RoleId == (int)RoleInfoType.超级管理员); <br />
<br />
linq to sql 怎么修改有外键约束的列<br />
http://forums.microsoft.com/china/ShowPost.aspx?PostID=4084266&amp;SiteID=15<br />
<br />
新Orcas语言特性：Lambda表达式<br />
http://blog.joycode.com/scottgu/archive/2007/04/09/100744.aspx<br />
<br />
Lambda 表达式（C# 编程指南）<br />
http://msdn.microsoft.com/zh-cn/library/bb397687.aspx<br />
<br />
<br />
<br />
8、Asp.Net 的用户凭证<br />
string strRedirect = Request.QueryString["ReturnUrl"];<br />
System.Web.Security.FormsAuthentication.SetAuthCookie(instance.RoleInfo.RoleName, true);<br />
if (strRedirect != null)<br />
&nbsp;&nbsp; Response.Redirect(strRedirect);<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Web.Security.FormsAuthentication.SignOut();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Response.Redirect("~/Default.aspx");<br />
<br />
<br />
&nbsp;&nbsp;&nbsp; &lt;authentication mode="Forms"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;forms loginUrl="~/Default.aspx" timeout="60"&gt;&lt;/forms&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;/authentication&gt;<br />
<br />
<br />
&lt;system.web&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;authorization&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;allow users="超级管理员,VIP会员,普通会员"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;deny users="*"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/authorization&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/system.web&gt;<br />
<br />
ASP .NET 中的身份验证：.NET 安全性指导<br />
http://www.iwms.net/n809c12.aspx<br />
<br />
<br />
<br />
<br />
9、关于枚举 Enum<br />
&nbsp;&nbsp;&nbsp; 定义枚举时候直接使用中文，然后可以利用枚举静态方法读取枚举中文名&nbsp;&nbsp;&nbsp; Enum.GetName(typeof(XXXXType), (int)objVaule)&nbsp; ??&nbsp; <br />
&nbsp;&nbsp;&nbsp; 如果要考虑到多语言话的问题&nbsp; 建议使用数据库存储<br />
<br />
<br />
<br />
10.合并单元格<br />
<br />
TableCell[] tempCells = new TableCell[gv.Rows[0].Cells.Count - 1];<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //遍历行<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int r = 0; r &lt; gv.Rows.Count; r++)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //行内遍历单元格<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; tempCells.Length; i++)<br />
&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; if (tempCells[i] != null &amp;&amp; gv.Rows[r].Cells[i].Text.Equals(tempCells[i].Text))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tempCells[i].RowSpan++;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gv.Rows[r].Cells[i].Visible = false;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tempCells[i] = gv.Rows[r].Cells[i];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tempCells[i].RowSpan = 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
<br />
<br />
11、Linq 的分页讨论<br />
http://www.cnblogs.com/9527/archive/2007/07/05/807451.html<br />
<br />
DLINQ(LINQ to SQL)之大数据量分页、延迟执行和日志记录<br />
http://www.mikecat.net/showtopic-36.aspx<br />
<br />
VS2008的Linq，更新数据就那么费劲？<br />
http://dev.yesky.com/msdn/319/3499319.shtml<br />
<br />
LINQ体验(9)——LINQ to SQL语句之Insert/Update/Delete操作<br />
http://www.cnblogs.com/lyj/archive/2008/01/28/1056133.html<br />
<br />
<br />
<br />
<br />
12、JS 模式窗口<br />
举例讲解returnValue的含义<br />
http://dev.csdn.net/develop/article/47/47565.shtm<br />
<br />
利用AJAX实现 web页面的模式对话框<br />
http://www.javaeye.com/topic/39062<br />
<br />
示例：签名栏图片展示特效<br />
http://bbs.duowan.com/viewthread.php?tid=12573003###<br />
<br />
<br />
<br />
<br />
13、XML文件的写入权限&nbsp;&nbsp; 需手动指定权限 <br />
sys.WebForms.PageRequestManagerServerErrorException:错误原因<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/kiant/aggbug/250980.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kiant/" target="_blank">黄小二</a> 2009-01-12 15:35 <a href="http://www.blogjava.net/kiant/articles/250980.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>二、ASP.NET 服务器控件(草本)</title><link>http://www.blogjava.net/kiant/articles/239108.html</link><dc:creator>黄小二</dc:creator><author>黄小二</author><pubDate>Thu, 06 Nov 2008 12:34:00 GMT</pubDate><guid>http://www.blogjava.net/kiant/articles/239108.html</guid><wfw:comment>http://www.blogjava.net/kiant/comments/239108.html</wfw:comment><comments>http://www.blogjava.net/kiant/articles/239108.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kiant/comments/commentRss/239108.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kiant/services/trackbacks/239108.html</trackback:ping><description><![CDATA[<br />
二、ASP.NET 服务器控件<br />
<br />
<br />
<br />
可以添加到 ASP.NET 页面上的控件有三种类型：<br />
&nbsp;&nbsp;&nbsp; ● HTML 服务器控件：也就是 HTML 标签，位于 System.Web.UI.HtmlControls 命名空间。<br />
&nbsp;&nbsp;&nbsp; ● Web 服务器控件：提供统一的编程模型、包含方法以及现关的时间处理程序，并且代码都在服务器端执行。位于 System.Web.UI.WebControls 命名空间中。<br />
&nbsp;&nbsp;&nbsp; ● 定制控件和用户控件：由开发人员定制的控件。<br />
<br />
&nbsp;&nbsp;&nbsp; 我们添加的所有服务器控件都会自动成为对象模型的一部分，该对象模型是在这段后置代码中为窗体构建的。基本上，Web 窗体上控件的状态信息（包括文本框中的输入数据、下拉列表中的选项等）存储在隐藏的 viewstate 字段中，这个字段是服务器生成页面的一部分，并传送给用户。在复杂的窗体上，会产生很多的 viewstate 值，可以禁用不需保留状态信息的控件 Viewstate，也可以禁用整个页面的 Viewstate，有助于提高性能。<br />
<br />
&nbsp;&nbsp;&nbsp; 修改过的 .aspx.cs 文件可以不用再次手工编译，就可以显示其改变的信息(?)。<br />
<br />
<br />
<br />
一、Crystal Reports（Crystal 报表服务器控件）<br />
&nbsp;&nbsp;&nbsp; 可以在 Web 页面上显示 Crystal 报表信息。<br />
<br />
<br />
<br />
二、Standard（标准 Web 服务器控件）<br />
Label：显示简单文本，使用 Text 属性设置和编程修改显示的文本。<br />
<br />
TextBox：提供一个用户可以编辑的文本框，支持 AutoPostBack 属性在修改文本内容后自动回送；支持 TextChanged 事件。<br />
<br />
Button：用户单击的标准按钮。支持 Click 事件；支持 Command 事件访问接收的附加属性 CommandName 和 CommandArgument。<br />
&nbsp;&nbsp;&nbsp; <br />
LinkButton：与 Button 相同，但把按钮显示为超链接。<br />
<br />
ImageButton：显示一个图像，其属性和事件继承了 Button 和 Image。<br />
<br />
HyperLink：添加一个 HTML 超链接，NavigateUrl 属性设置超链接；ImageUrl 属性指定替换文本的图片；Target 属性指定打开窗口方式。<br />
<br />
DropDownList：允许用户选择一个列表项，使用属性 Items 设置列表项目（一个 ListItem 集合）；SelectedItem 和 SelectedIndex 属性确定选择的内容；支持 SelectedIndexChanged 事件可以用于确定选项是否改变；支持 AutoPostBack 属性。<br />
<br />
ListBox：允许用户选择一个或多个列表。把 SelectionMode 设置为 Muliple 或 Single 可以确定一次选择多少选项；Rows 确定要显示选项个数；其他选项与 DropDownList 控件相同。<br />
<br />
CheckBox：显示一个复选框，选择的状态在 Checkted 属性中；文本在 Text 属性；支持 AutoPostBack 属性；支持 CheckedChanged 事件。<br />
<br />
CheckBoxList：创建一组复选框，属性和事件可参照 DropDownList。<br />
<br />
RadioButton：显示一个单选按钮，使用 GroupName 属性可以把 RadioButton 控件链接到一个组中，其他属性与事件与 CheckBox 相同。<br />
<br />
RadioButtonList：创建一组单选按钮，其属性与事件类同于其他列表控件。<br />
<br />
Image：显示一个图像。使用 ImageUrl 进行图像索引，如果图像加载失败则显示 AlternateText 对应的文本。<br />
<br />
ImageMap：类似于 Image，但支持 HotSpot 控件提供的热区功能重定向到不同的页面。<br />
<br />
Table：指定一个表，可设定 TableRow 和 TableCell，或者 TableRow 的集合类属性指定数据行。<br />
<br />
BulletedList：把一个选项列表格式化为一个项目符号列表，可以有不同的显示格式，支持 Click 事件确定用户回送的选项；&lt;ol&gt;...&lt;/ul&gt;，&lt;ul&gt;...&lt;/ul&gt;。<br />
<br />
HiddenField：用于提供隐藏的字段，以存储不同的值。这个控件可存储需要另一种存储机制才能发挥作用的设置。使用 Value 属性访问存储的值。<br />
<br />
Literal：执行与 Label 相同的功能，但没有样式属性，只有一个 Text 属性。<br />
<br />
Calendar：允许用户从图像日历中选择一个日期。基本功能是 SelectedDate 和 VisibleDate 属性。<br />
<br />
AdRotator：广告流转板，顺序显示几个图像，使用 AdvertisementFile 属性指定描述图像的 XML 文件；支持 AdCreated 事件。<br />
<br />
FileUpload：提供用户选择并上传文件，支持 HasFile 属性，支持后台代码的 SaveAs() 方法执行文件上传。<br />
<br />
Wizard：用户简化用户在几个页面中输入数据的常见任务，可以给向导添加多个步骤，按顺序或不按顺序显示，并依赖此控件来维护状态。<br />
<br />
Xml：复杂的文本显示控件，用于显示用 XSLT 样式传输的 XML 内容。<br />
<br />
MultiView：包含一个或多个 View 控件，每次只显示一个 View 控件。可用 ActiveViewIndex 属性指定当前；如果视图改变会触发 ActiveViewChanged 事件。<br />
Panel：添加其他控件的容器。可以使用 HorizontalAlign 和 Wiap 指定内容如何安排。<br />
<br />
View：控件的容器，类似于 PlaceHolder，但主要作用于 MulitView 的子控件，支持 Activate 和 Deactivate 事件检测激活状态的变化。<br />
<br />
<br />
<br />
Substitution：指定一组不与其他输出一起高速缓存的 Web 页面。<br />
<br />
Location：与 Literal 相同，但允许使用项目资源指定要在不同区域显示的文本，使文本本地化。<br />
<br />
<br />
<br />
三、Data（数据 Web 服务器控件）<br />
&nbsp; 数据 Web 服务器控件分为两类：<br />
&nbsp;&nbsp;&nbsp; ● 数据源控件：实现从不同数据源获取数据的功能，最好通过图形化的向导来配置属性。分为两类：<br />
System.Web.UI.DataSource（普通数据源控件）<br />
<br />
ObjectDataSource：可以处理存储在自己创建的对象中的数据，能在 ASP.NET 中快捷显示定制的对象模型。<br />
<br />
SqlDataSource：使用和操作 SQL Server 数据库中存储的数据管道，返回的对象是 DataSet。<br />
<br />
AccessDataSource：使用和操作 Access 数据库中存储的数据管道。<br />
<br />
<br />
System.Web.UI.HierarchicalDataSource（层次化数据源控件）<br />
XmlDataSource：处理层次结构化的数据，可以绑定导航控件，还可以使用 XSL 样式表传输 XML 数据。<br />
<br />
SiteMapDataSource：可以绑定到层次站点地图数据上。<br />
<br />
<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; ● 数据显示控件<br />
<br />
GridView：以数据行的格式显示多个数据项（例如数据库中的行），利用这个控件的属性，可以选择、排序和编辑数据项。<br />
<br />
DataList：显示多个数据项，可以为每一项提供模板，以任意指定的方式显示数据字段，可以选择、排序和编辑数据项。<br />
<br />
DetailsView：显示单条数据项的详细字段，可以添加、编辑和删除数据项。<br />
<br />
FormView：使用模板显示一个数据项，可以添加、编辑和删除数据项。<br />
<br />
Repeater：类似于 DataList，但是不能选择和编辑数据。<br />
<br />
RepeaterViewer：显示报表服务数据的高级控件。<br />
<br />
<br />
<br />
四、Validation（验证 Web 服务器控件）<br />
&nbsp;&nbsp;&nbsp; 验证控件可以在不编写代码的前提下验证用户输入，还可以自动给用户输出有帮助的提示，甚至还可以生成客户端的 JavaScript 函数来简化验证任务的执行。<br />
<br />
&nbsp;&nbsp;&nbsp; 验证控件只要有回送，每个验证控件就会检查控件是否有效，并相应地改变 IsValid 属性的值。如果页面中任何一个有效性验证控件不通过验证，那整个页面的 IsValid 属性为 false。另外，存储在 ErrorMessage 中的文本可以在验证控件所在位置输出（Display 属性），也可以和其他页面上的验证控件一起输出在一个独立的位置（使用 ValidationSummary 控件）。ControlToValidate 属性用于指定要验证的控件的编程ID。<br />
<br />
RequiredFieldValidator：对输入控件的非空验证。<br />
<br />
CompareValidator：检查输入的数据是否满足简单的要求。利用一个运算集合，通过 Operator 和 ValueToCompare 属性进行验证。Operator 设置比较运算符 &gt;、&lt;、= ； ValueToCompare 用于比较的值；还有 Type 用于设置比较的类型；最后还是对另一控件进行比较 ControlToCompare 属性。<br />
<br />
RangeValidator：验证输入数据 MaximumValue 和 MinimumValue 间的范围，Type 指定其验证的数据类型。<br />
<br />
RegularExpressionValidator：根据存储在 ValidationExpression 中的正则表达式验证字段的内容。<br />
<br />
CustomValidator：使用定制函数验证控件的数据，自定义验证。ClientValidationFunction 用户设置客户端验证的脚本函数；ServerValidate 事件指定服务器验证数据的方法。<br />
<br />
ValidationSummary：为所有设置了 ErrorMessage 的验证控件显示验证错误。通过 DisplayMode 和 HeaderText 属性使其显示的内容可以格式化；ShowSummary 属性设置是否显示；ShowMessageBox 属性设置是否弹出对话框显示信息。<br />
<br />
<br />
五、Navigation （导航 Web 服务器控件）<br />
<br />
SiteMapPath：显示路径样式的信息，允许用户产看他们在站点结构中的位置，并导航到父区域中。<br />
<br />
Menu：支持静态或动态样式的菜单导航站点。<br />
<br />
TreeView：可以在树形结构中显示层次化数据。树中的节点存储在 Nodes 属性中，选中的节点存储在 SelectedNode 中，支持 SelectedNodeChanged 和 TreeNodeCollapsed 事件。<br />
<br />
&nbsp;&nbsp;&nbsp; 根目录下的站点地图 Web.sitemap XML 文件包含一个&lt;siteMap&gt;元素，这个跟元素包含一个&lt;siteMapNode&gt;元素，&lt;siteMapNode&gt;元素可以包含多个嵌套的&lt;siteMapNode&gt;元素。每个跟元素都包含下列属性 title、url、roles、description 属性。<br />
<br />
&nbsp;&nbsp;&nbsp; 添加控件时将使用默认的提供程序和当前的 URL 位置，格式化父页面的链接列表。如果使用定制的提供程序，可以通过 SiteMapProvider 属性指定提供程序ID，还可以使用 StartingNodeOffset 删除菜单数据的上一层（例如根级的 Home 项）；&#8220;数据源控件&#8221;的 ShowStartingNode 属性选定是否删除顶级链接；使用 StartFromCurrentNode 属性指定是否从当前位置开始；使用 StringNodeUrl 会重写根节点。<br />
地图<br />
<br />
&nbsp;&nbsp;&nbsp; 默认提供程序会忽略 roles 属性，这种定制将在 Web.config 文件的 securityTrimmingEnable 属性设置为当前用户允许查看的节点提供数据，这种可见性是由用户的角色成员决定的。<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/kiant/aggbug/239108.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kiant/" target="_blank">黄小二</a> 2008-11-06 20:34 <a href="http://www.blogjava.net/kiant/articles/239108.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ASP.NET 笔记（一）、概述</title><link>http://www.blogjava.net/kiant/articles/237918.html</link><dc:creator>黄小二</dc:creator><author>黄小二</author><pubDate>Fri, 31 Oct 2008 15:16:00 GMT</pubDate><guid>http://www.blogjava.net/kiant/articles/237918.html</guid><wfw:comment>http://www.blogjava.net/kiant/comments/237918.html</wfw:comment><comments>http://www.blogjava.net/kiant/articles/237918.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kiant/comments/commentRss/237918.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kiant/services/trackbacks/237918.html</trackback:ping><description><![CDATA[<br />
<br />
<strong><span style="font-size: 14pt;">
一、概述</span></strong><br />
&nbsp;&nbsp;&nbsp; ASP.NET 提供了完整的服务器端对象模型，可以在运行期间使用。ASP.NET 可以在其环境中把页面上的所有控件作为对象来访问。在页面上使用控件功能，生成 HTML 内容的 ASP.NET 通常称为 Web 窗体。<br />
<br />
&nbsp;&nbsp;&nbsp; 基本上，Web 窗体上控件的状态信息（包括在文本框中输入的信息、下拉列表中的选项等）存储在隐藏的 viewstate 字段中，这个字段是服务器生成的页面的一部分，并传送给用户。后续的操作称为会送（postback）。<br />
<br />
<br />
<br />
<strong><span style="font-size: 14pt;">
二、ASP.NET&nbsp;&nbsp;&nbsp; Web 窗体</span></strong><br />
&nbsp; ● 保留文件夹 App_Date，包含数据文件，例如 XML文件或数据库文件。<br />
&nbsp; ● 在 ASP.NET 页面中，只有一个服务器端&lt;form&gt;元素。<br />
&nbsp; ● runat="server" 表示窗体的处理将在服务器上进行，必须具备，否则窗体不会执行任何操作。<br />
&nbsp; ● 顶部的 &lt;@% Page %&gt; 标记，定义了页面特性。<br />
<br />
<br />
<strong>
2.1、流程</strong><br />
&nbsp; .aspx &nbsp;&nbsp;&nbsp; 布局(HTML)和ASP.NET 代码。<br />
&nbsp; .aspx.cs&nbsp;&nbsp;&nbsp; 用于定制窗体操作的代码。<br />
<br />
预编译站点流程：<br />
&nbsp;&nbsp;&nbsp; ● ASP.NET 处理器执行页面，确定对象创建，以实例化页面对象模型。<br />
&nbsp;&nbsp;&nbsp; ● 动态创建一个基类，包括页面上的控件成员和这件控件的事件处理程序（例如按钮单击事件）。<br />
&nbsp;&nbsp;&nbsp; ● 页面代码文件与这个基类合并，构成完整的对象模型。<br />
&nbsp;&nbsp;&nbsp; ● 编译所有代码，并告诉缓存起来。<br />
&nbsp;&nbsp;&nbsp; ● 生成 HTML，返回给用户。<br />
<br />
<br />
<strong>2.2、ASP.NET 中常见的系统对象</strong><br />
&nbsp; <br />
Page 对象：页面自身的方式。<br />
<br />
Request 对象：封装了由客户端生成的 HTTP 请求的细节（参数、属性和数据）。<br />
&nbsp;&nbsp;&nbsp; ● QueryStrings 属性收集了 Get 请求发送的数据。<br />
&nbsp;&nbsp;&nbsp; ● From 属性收集了 Post 请求发送的数据。<br />
&nbsp;&nbsp;&nbsp; ● ServerVariable（环境变量）集合中包含服务器和客户端的系统信息。在 Page 指令里添加属性 Trace="True" 可以追踪详细的环境变量信息。<br />
&nbsp;&nbsp;&nbsp; ● Params 集合包含了上三种方式的集合。<br />
<br />
Response 对象：响应返回到 HTTP 客户端的输出。<br />
&nbsp;&nbsp;&nbsp; ● Write() 方法可以输出指定的文本内容。<br />
&nbsp;&nbsp;&nbsp; ● End() 方法可以使 Web 服务器停止当前的程序并返回结果。<br />
&nbsp;&nbsp;&nbsp; ● Redirect() 方法可以将页面重定向到另一页面。<br />
<br />
Session 对象：作用于会话期的页面共享信息。<br />
&nbsp;&nbsp;&nbsp; Session["xxxx"] = 值对象;<br />
&nbsp;&nbsp;&nbsp; 对象 = Session["xxxx"];<br />
<br />
Cookie 对象：保持与客户端的共享信息方式。对应于 HttpCookie 类。<br />
&nbsp;&nbsp;&nbsp; Response.Cookies["xxxx"].Value = 字符串变量;<br />
&nbsp;&nbsp;&nbsp; string xxx = Request.Cookies["xxx"].Value;<br />
&nbsp;&nbsp;&nbsp; <br />
Application 对象：作用于应用程序运行期提供共享信息。<br />
&nbsp;&nbsp;&nbsp; Application["xxxx"] = 值对象;<br />
&nbsp;&nbsp;&nbsp; 值变量 = Application["xxxx"];<br />
<br />
Server 对象：只是封装了一些 Web 服务器相关的常用方法。<br />
&nbsp;&nbsp;&nbsp; Server.MapPath("~/");&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //返回所在虚拟目录的物理路径<br />
&nbsp;&nbsp;&nbsp; Server.HtmlEncode("xxxx");&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //不编译 HTML 代码，直接在页面输出<br />
&nbsp;&nbsp;&nbsp; Server.Encode("xxxxx");&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //对 URL 地址的特殊字符进行编码<br />
&nbsp;&nbsp;&nbsp; Server.Execute("xxxxx");&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //执行参数指定的页面，执行完后返回本页<br />
&nbsp;&nbsp;&nbsp; Server.Transfer("xxxx");&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //执行参数指定的页面，执行完后结束<br />
<br />
<br />
<br />
<strong><span style="font-size: 14pt;">三、应用程序配置</span></strong><br />
&nbsp;&nbsp;&nbsp; 应用程序定义为项目中的所有文件，由 Web.config 文件配置。<br />
<br />
&nbsp;&nbsp;&nbsp; 第一次创建应用程序（即收到第一个 HTTP 请求时），将创建 Application 对象。此时还将触发 Application_Start 事件，创建一个 HttpApplication 实例池。每个输入的请求都会接收到这样一个实例，执行请求的处理过程。与全局的 Application 对象不同，所有的 HttpApplication 实例完成任务后，就触发 Application_End 事件，应用程序终止运行，消除 Application 对象。<br />
<br />
&nbsp;&nbsp;&nbsp; 在单个用户使用 Web 应用程序时，会启动一个会话，与应用程序类似，会话将创建一个用户特定的 Session 对象，并触发 Session_Start 事件。在一个会话中，每个请求都将触发 Application_BeginRequest 和 Application_EndRequest 事件。在一个会话中可以多次触发这两个事件访问应用程序的不同资源。会话可以手动终止，也可以因为没有后续请求而超时终止。会话种子会触发 Session_End 事件，消除 Session 对象。<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/kiant/aggbug/237918.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kiant/" target="_blank">黄小二</a> 2008-10-31 23:16 <a href="http://www.blogjava.net/kiant/articles/237918.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>