﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>博客园-深圳.NET俱乐部</title><link>http://www.cnblogs.com/team/ShenzhenDotNetClub/</link><description>深圳.NET俱乐部，致力于.NET技术传播和交流</description><language>zh-cn</language><lastBuildDate>Sat, 28 Jan 2012 18:23:30 GMT</lastBuildDate><pubDate>Sat, 28 Jan 2012 18:23:30 GMT</pubDate><ttl>60</ttl><item><title>德广火车票助手源码 请各位前辈给些建议</title><link>http://www.cnblogs.com/tonyepaper/archive/2012/01/29/2330799.html</link><dc:creator>武广敬</dc:creator><author>武广敬</author><pubDate>Sat, 28 Jan 2012 17:56:00 GMT</pubDate><guid>http://www.cnblogs.com/tonyepaper/archive/2012/01/29/2330799.html</guid><description><![CDATA[<p><div style="line-height: 1.5; background-color: #ffffff; margin: 8px; font-family: verdana, Arial, Helvetica, sans-serif; color: #000000; font-size: 14px; background-origin: initial; background-clip: initial;">
<p style="text-indent: 0px; margin: 10px auto;">春节前夕,有朋友托我帮她到12306买火车票,结果可想而知.经过无数次的尝试后才登录成功.而此我有了写一个帮助用户登录12306工具的想法.之后就利用工作之余的时间开发了这个工具,之后用户的反应也是很好的.短短几天下载量就上万次.很多用户刚刚开始就担心软件的安全性.所以我们决定开源,以便使用户放心使用.现在在咱们cnblogs上贴一下.希望各位能给一些建议.有写的不好的地方还请多多指正.谢谢!</p>
<p style="text-indent: 0px; margin: 10px auto;">原码地址:http://code.google.com/p/deguang-tickets-helper/</p>
<p style="text-indent: 0px; margin: 10px auto;">部份源码(用这个编辑器的插入代码功能提交时出错.所以直接贴上来) :</p>
<p>using System;<br />using System.Collections.Generic;<br />using System.ComponentModel;<br />using System.Data;<br />using System.Drawing;<br />using System.Text;<br />using System.Windows.Forms;<br />using System.Net;<br />using System.IO;<br />using System.Diagnostics;<br />using System.Security.Cryptography.X509Certificates;<br />using System.Net.Security;<br />using System.Security.Authentication;<br />using System.Runtime.InteropServices;<br />using System.Threading;<br />using System.Web;<br />using System.IO.Compression;</p>
<p>namespace DeGuangTicketsHelper<br />{<br />&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />&nbsp;&nbsp;&nbsp; /// 项目名称:德广火车票助手<br />&nbsp;&nbsp;&nbsp; /// 公司:深圳市德广信息技术有限公司<br />&nbsp;&nbsp;&nbsp; /// 作者:武广敬<br />&nbsp;&nbsp;&nbsp; /// 此项目目前开源,所以请注意以下几点<br />&nbsp;&nbsp;&nbsp; /// 请保留此版权信息.<br />&nbsp;&nbsp;&nbsp; /// 自由再散布（Free Distribution）：允许获得源代码的人可自由再将此源代码散布。<br />&nbsp;&nbsp;&nbsp; /// 源代码（Source Code）：程序的可执行文件在散布时，必需以随附完整源代码或是可让人方便的事后取得源代码。<br />&nbsp;&nbsp;&nbsp; /// 派生著作（Derived Works）：让人可依此源代码修改后，在依照同一授权条款的情形下再散布。<br />&nbsp;&nbsp;&nbsp; /// 原创作者程序源代码的完整性（Integrity of The Author&rsquo;s Source Code）：意即修改后的版本，需以不同的版本号码以与原始的代码做分别，保障原始的代码完整性。<br />&nbsp;&nbsp;&nbsp; /// 不得对任何人或团体有差别待遇（No Discrimination Against Persons or Groups）：开放源代码软件不得因性别、团体、国家、族群等设置限制，但若是因为法律规定的情形则为例外（如：美国政府限制高加密软件的出口）。<br />&nbsp;&nbsp;&nbsp; /// 对程序在任何领域内的利用不得有差别待遇（No Discrimination Against Fields of Endeavor）：意即不得限制商业使用。<br />&nbsp;&nbsp;&nbsp; /// 散布授权条款（Distribution of License）：若软件再散布，必需以同一条款散布之。<br />&nbsp;&nbsp;&nbsp; /// 授权条款不得专属于特定产品（License Must Not Be Specific to a Product）：若多个程序组合成一套软件，则当某一开放源代码的程序单独散布时，也必需要符合开放源代码的条件。<br />&nbsp;&nbsp;&nbsp; /// 授权条款不得限制其他软件（License Must Not Restrict Other Software）：当某一开放源代码软件与其他非开放源代码软件一起散布时（例如放在同一光盘），不得限制其他软件的授权条件也要遵照开放源代码的授权。<br />&nbsp;&nbsp;&nbsp; /// 授权条款必须技术中立（License Must Be Technology-Neutral）：意即授权条款不得限制为电子格式才有效，若是纸本的授权条款也应视为有效。<br />&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />&nbsp;&nbsp;&nbsp; public partial class frmTicketsHelper : Form<br />&nbsp;&nbsp;&nbsp; {</p>
<p><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static extern bool InternetSetCookie(string lpszUrlName, string lbszCookieName, string lpszCookieData);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 无参数方法委托<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public delegate void doWorkDelegate();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// UI显示消息委托<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;param name="msg"&gt;&lt;/param&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public delegate void showMsgDelegate1(string msg);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 得到焦点委托<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;returns&gt;&lt;/returns&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public delegate void focusDelegate1(Control control);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 修改控件文字委托<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;param name="con"&gt;&lt;/param&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;param name="text"&gt;&lt;/param&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;param name="enable"&gt;&lt;/param&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public delegate void setControlTextDelegate1(Control con, string text,bool enable);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public doWorkDelegate LoggedDelegate;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public doWorkDelegate activateDelegate;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public showMsgDelegate1 showMsgDelegate;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public showMsgDelegate1 shareToWeiboDelegate;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public setControlTextDelegate1 setControlTextDelegate;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public focusDelegate1 focusDelegate;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private static readonly string DefaultUserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private static readonly string DefaultAccept = "image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/xaml+xml, application/x-ms-xbap, application/x-ms-application, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private static readonly string DefaultContentType = "text/html; charset=GBK";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// cookie容器<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CookieContainer cookieContainer;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// cookie集合<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CookieCollection cookieCollection;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string cookieStr;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 取得的HTML<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string html;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 已经登录,当后台线程登录成功后,设为真<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private static bool logged = false;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 正在运行中<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private static bool running = false;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 手工停止<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private static bool stop = false;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 尝试次数<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private static int count = 0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 便即登录时间<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private static DateTime beginTime;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 登录成功时间<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private static DateTime endTime;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 登录用时<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private TimeSpan timeSpan;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 登录用时字符串<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private string timeSpanStr;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 用于显示的时间与实际阻塞时间相同<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private int tryInterval;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 德广火车票助手<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public frmTicketsHelper()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InitializeComponent();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LoggedDelegate = new doWorkDelegate(openInWebBrowser);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; activateDelegate = new doWorkDelegate(Activate);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; showMsgDelegate = new showMsgDelegate1(showLogInfo);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; shareToWeiboDelegate = new showMsgDelegate1(shareToWeibo);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; setControlTextDelegate = new setControlTextDelegate1(changeControlTxt);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; focusDelegate = new focusDelegate1(setControlFocus);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cookieContainer = new CookieContainer();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cookieCollection = new CookieCollection();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tssVersion.Text = "版本: " + System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 得到验证码 外部调用<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;param name="obj"&gt;&lt;/param&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private void getVerificationCode(object obj)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; beginTime = DateTime.Now;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Net.ServicePointManager.CertificatePolicy = new MyPolicy();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //string url = "<a href="http://www.12306.cn/mormhweb/kyfw/">http://www.12306.cn/mormhweb/kyfw/</a>";</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //HttpWebRequest request1 = HttpWebResponseUtility.CreateGetHttpResponse(url, cookieContainer) ;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; count = 0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.Invoke(setControlTextDelegate, new object[] { btnLogin,"取得验证码中...",false});<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; picValidImg.Image = null;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getVerificationCode();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 得到验证码 内部重复调用 直到得到验证码<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private void getVerificationCode()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sleep();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; count++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string url = "<a href="https://dynamic.12306.cn/otsweb/passCodeAction.do?rand=lrand">https://dynamic.12306.cn/otsweb/passCodeAction.do?rand=lrand</a>";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpWebRequest request2 = HttpWebResponseUtility.CreateGetHttpResponse(url, cookieContainer, "<a href="https://dynamic.12306.cn/otsweb/loginAction.do?method=login">https://dynamic.12306.cn/otsweb/loginAction.do?method=login</a>");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpWebResponse response = null;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 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; response = (HttpWebResponse)request2.GetResponse();<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 ex)<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; //MessageBox.Show("连接12306.cn网站出错!","异常", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.Invoke(this.showMsgDelegate, "取得验证码失败:" + ex.Message);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getVerificationCode();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (response != null)<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; Stream responseStream = response.GetResponseStream();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; response.Cookies = request2.CookieContainer.GetCookies(new Uri(url));</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cookieCollection = response.Cookies;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (string.IsNullOrEmpty(cookieStr) == true)<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; cookieStr = response.Headers.Get("Set-Cookie");<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; cookieContainer.SetCookies(new Uri(url), cookieStr);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Image original = Image.FromStream(responseStream);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; picValidImg.Image = original;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.Invoke(this.showMsgDelegate, "取得验证码成功!");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.Invoke(setControlTextDelegate, new object[] { btnLogin, "登录" ,true});</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; endTime = DateTime.Now;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; timeSpan = endTime.Subtract(beginTime);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (count &gt; 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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MessageBox.Show("12306不给力啊!!!尝试了" + count + "次用了" + getTimeSpanString(timeSpan) + "后才得到验证码图片.", "德广火车票助手 温馨提示", MessageBoxButtons.OK, MessageBoxIcon.Information);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.Invoke(activateDelegate);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.Invoke(shareToWeiboDelegate, new object[] { "12306不给力啊,登录页面尝试了"+count+"次用了"+getTimeSpanString(timeSpan)+"后,才显示出来.还好有#德广火车票助手#帮助,不然就鼠标键盘就被我按报废啦!" });<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; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 线程阻塞,重试间隔<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private void sleep()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (count &gt; 0)<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; tryInterval = TryInterval;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (tryInterval &gt; 0)<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; this.Invoke(new showMsgDelegate1(showTimeInfo), "休息" + tryInterval + "秒");<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; Thread.Sleep(TryInterval * 1000);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 登录<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;param name="sender"&gt;&lt;/param&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;param name="e"&gt;&lt;/param&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private void btnLogin_Click(object sender, EventArgs e)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (logged == true)<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 (MessageBox.Show("您已经登录,您需要再次进入12306网站吗?需要您已经退出,就需要重新登录!", "德广火车票助手 温馨提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information, MessageBoxDefaultButton.Button2) == DialogResult.Yes)<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; this.Invoke(LoggedDelegate);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //openie();<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; return;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (running == false)<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; //MessageBox.Show("目前是单线程版本,所以程序可能没有反应,此为正常现象,待登录成功后,即会自动弹出IE浏览器.");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (picValidImg.Image == null)<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; getVerificationCode(this);<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; if (validate() == true)<br />&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp; stop = false;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; count = 0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; btnLogin.Text = "尝试登录中...";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; beginTime = DateTime.Now;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ThreadPool.QueueUserWorkItem(new WaitCallback(login));<br />&nbsp;&nbsp;&nbsp;&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; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<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; //MessageBox.Show("目前正在登录中!","德广火车票助手 温馨提示", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (MessageBox.Show("目前正在尝试登录中,中止登录吗?", "德广火车票助手 温馨提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information, MessageBoxDefaultButton.Button2) == DialogResult.Yes)<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; stop = true;<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; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 验证数据<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;returns&gt;&lt;/returns&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private bool validate()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (string.IsNullOrEmpty(txtUserName.Text) == true)<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; messageBoxShowInfo("请输入登录名!");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; txtUserName.Focus();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if (string.IsNullOrEmpty(txtPassword.Text) == true)<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; messageBoxShowInfo("请输入密码!");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; txtPassword.Focus();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return true;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 时间间隔<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private int TryInterval<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get<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 (chkRadom.Checked == true)<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; return new Random((int)DateTime.Now.Ticks).Next(Convert.ToInt32(numInterval.Value));<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; return Convert.ToInt32(numInterval.Value);<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; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 登录<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private void login()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; login(null);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 登录<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;param name="obj"&gt;&lt;/param&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private void login(object obj)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 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; running = true;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sleep();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (stop == true)<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; return;<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; if (obj != null)<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; Thread.CurrentThread.Name = obj.ToString();<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; if (logged == true)<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; if (MessageBox.Show("您已经登录,您需要再次进入12306网站吗?需要您已经退出,就需要重新登录!", "德广火车票助手 温馨提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information, MessageBoxDefaultButton.Button2) == DialogResult.Yes)<br />&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp; this.Invoke(LoggedDelegate);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //openie();<br />&nbsp;&nbsp;&nbsp;&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; running = false;<br />&nbsp;&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Trace.WriteLine("login()");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; count++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Net.ServicePointManager.CertificatePolicy = new MyPolicy();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // this is what we are sending<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string post_data = "loginUser.user_name=tony12306cn&amp;nameErrorFocus=&amp;user.password=tony1234&amp;passwordErrorFocus=&amp;randCode=" + txtVerificationCode.Text + "&amp;randErrorFocus=focus";</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // this is where we will send it<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string uri = "<a href="https://dynamic.12306.cn/otsweb/loginAction.do?method=login">https://dynamic.12306.cn/otsweb/loginAction.do?method=login</a>";</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // create a request<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //request.CookieContainer = cookieContainer;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //request.KeepAlive = false;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //request.ProtocolVersion = HttpVersion.Version10;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //request.Method = "POST";</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //// turn our request string into a byte stream<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //byte[] postBytes = Encoding.ASCII.GetBytes(post_data);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //// this is important - make sure you specify type this way<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //request.ContentType = "application/x-www-form-urlencoded";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //request.ContentLength = postBytes.Length;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Stream requestStream = request.GetRequestStream();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //// now send it<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //requestStream.Write(postBytes, 0, postBytes.Length);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //requestStream.Close();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dictionary&lt;string, string&gt; param = new Dictionary&lt;string, string&gt;();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; param.Add("loginUser.user_name", txtUserName.Text);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; param.Add("nameErrorFocus", string.Empty);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; param.Add("user.password", txtPassword.Text);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; param.Add("passwordErrorFocus", string.Empty);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; param.Add("randCode", txtVerificationCode.Text);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; param.Add("randErrorFocus", "focus");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpWebResponse response = null;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try<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; response = HttpWebResponseUtility.CreatePostHttpResponse(uri, param,null, DefaultUserAgent, Encoding.ASCII, cookieCollection, uri);<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; catch (Exception ex)<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; this.Invoke(this.showMsgDelegate, ex.Message);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //showInfo(ex.Message);<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; if (response != null)<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; // grab te response and print it out to the console along with the status code<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //HttpWebResponse response = (HttpWebResponse)request.GetResponse();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Stream receiveStream = response.GetResponseStream();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (response.ContentEncoding.ToLower().Contains("gzip"))<br />&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp; receiveStream = new GZipStream(receiveStream, CompressionMode.Decompress);<br />&nbsp;&nbsp;&nbsp;&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; html = new StreamReader(receiveStream).ReadToEnd();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (html.IndexOf("当前访问用户过多") &gt; 0)<br />&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp; this.Invoke(this.showMsgDelegate, "当前访问用户过多");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; login(null);<br />&nbsp;&nbsp;&nbsp;&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; else if (html.IndexOf("请输入正确的验证码") &gt; 0)<br />&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp; messageBoxShowInfo("请输入正确的验证码!");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.Invoke(focusDelegate,new object[]{txtVerificationCode});<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.Invoke(setControlTextDelegate,new object[]{txtVerificationCode,string.Empty,true});<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getVerificationCode(this);<br />&nbsp;&nbsp;&nbsp;&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; else if (html.IndexOf("登录名不存在") &gt; 0)<br />&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp; messageBoxShowInfo("登录名不存在!!");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.Invoke(focusDelegate, new object[] { txtUserName });<br />&nbsp;&nbsp;&nbsp;&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; else if (html.IndexOf("密码输入错误") &gt; 0)<br />&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp; messageBoxShowInfo("密码输入错误,如果多次输入错误可能会被锁定帐户!");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.Invoke(focusDelegate, new object[] { txtPassword });<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.Invoke(setControlTextDelegate, new object[] { txtPassword, string.Empty, true });<br />&nbsp;&nbsp;&nbsp;&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; else if (html.IndexOf("已经被锁定") &gt; 0)<br />&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp; messageBoxShowInfo("您的用户已经被锁定,请稍候再试!");<br />&nbsp;&nbsp;&nbsp;&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; else if (html.IndexOf("系统维护中") &gt; 0)<br />&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp; messageBoxShowInfo("系统维护中!");<br />&nbsp;&nbsp;&nbsp;&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; else if (html.IndexOf("我的12306") &gt; 0)<br />&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp; this.Invoke(activateDelegate);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; endTime = DateTime.Now;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; logged = true;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; timeSpan = endTime.Subtract(beginTime);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; timeSpanStr = getTimeSpanString(timeSpan);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MessageBox.Show("经过 " + timeSpanStr + ", " + count + " 次的尝试后,您已经登录成功!" + Environment.NewLine<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;&nbsp;&nbsp;&nbsp; + "点击确定打开12306网站,请忽略登录界面,直接点击\"车票预订\"就可以啦!" + Environment.NewLine<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;&nbsp;&nbsp;&nbsp; + Environment.NewLine<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;&nbsp;&nbsp;&nbsp; + "深圳市德广信息技术有限公司 祝您:" + Environment.NewLine<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;&nbsp;&nbsp;&nbsp; + "回家一路顺风!全家身体健康!幸福快乐!事事如意!", "德广火车票助手 恭喜您", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.Invoke(shareToWeiboDelegate, new object[] { "我用#德广火车票助手#经过" + timeSpanStr +"尝试登录"+ count + "次后,成功登录上了12306.cn!你用了多长时间才登录成功的呢?" });</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.Invoke(LoggedDelegate);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //openie();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.Invoke(this.showMsgDelegate, "登录成功!");<br />&nbsp;&nbsp;&nbsp;&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; else<br />&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp; Trace.WriteLine(html);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; login(null);<br />&nbsp;&nbsp;&nbsp;&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; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Trace.WriteLine(response.StatusCode);<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; login(null);<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;&nbsp;&nbsp;&nbsp;&nbsp; catch (Exception ex)<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; MessageBox.Show(ex.Message, "异常", MessageBoxButtons.OK, MessageBoxIcon.Error);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; finally<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; this.Invoke(setControlTextDelegate, new object[] { btnLogin, "登录", true });<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; running = false;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 得到时间间隔的中文字符串<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private string getTimeSpanString(TimeSpan timeSpan)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StringBuilder timeSpanStr=new StringBuilder();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (timeSpan.Days &gt; 0)<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; timeSpanStr.Append(timeSpan.Days);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; timeSpanStr.Append("天");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (timeSpan.Hours &gt; 0)<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; timeSpanStr.Append(timeSpan.Hours);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; timeSpanStr.Append("小时");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (timeSpan.Minutes &gt; 0)<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; timeSpanStr.Append(timeSpan.Minutes);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; timeSpanStr.Append("分");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (timeSpan.Seconds &gt; 0)<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; timeSpanStr.Append(timeSpan.Seconds);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; timeSpanStr.Append("秒");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (timeSpanStr.Length == 0)<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; timeSpanStr.Append(timeSpan.Milliseconds);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; timeSpanStr.Append("毫秒");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return timeSpanStr.ToString();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 显示信息<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;param name="message"&gt;&lt;/param&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private void messageBoxShowInfo(string message)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.Invoke(this.showMsgDelegate, message);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MessageBox.Show(message, "德广火车票助手 温馨提示", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 打开浏览器<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private void openInWebBrowser()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; foreach (Cookie cookie in cookieContainer.GetCookies(new Uri("<a href="https://dynamic.12306.cn/otsweb/loginAction.do?method=login">https://dynamic.12306.cn/otsweb/loginAction.do?method=login</a>")))<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; InternetSetCookie(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "https://" + cookie.Domain.ToString(),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cookie.Name.ToString(),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cookie.Value.ToString() + ";expires=Sun,22-Feb-2099 00:00:00 GMT");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string url="<a href="https://dynamic.12306.cn/otsweb/">https://dynamic.12306.cn/otsweb/</a>";</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (radTickerWebBrowser.Checked == true)<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; TickerWebBrowser tw = new TickerWebBrowser();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tw.Url = url;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tw.ShowDialog();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if (radIE.Checked == true)<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; System.Diagnostics.Process.Start("IExplore.exe", url); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if (radDefaultWebBrowser.Checked == true)<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; try<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; System.Diagnostics.Process.Start(url);<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; catch(System.ComponentModel.Win32Exception noBrowser)<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; if (noBrowser.ErrorCode == -2147467259)<br />&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp; MessageBox.Show("未找到您的默认Web浏览器!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; radTickerWebBrowser.Checked = true;<br />&nbsp;&nbsp;&nbsp;&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; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (System.Exception other)<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; MessageBox.Show(other.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);<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; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 显示信息<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;param name="info"&gt;&lt;/param&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private void showLogInfo(string info)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; info = "第"+count+"次尝试:" + info;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; showTimeInfo(info);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 显示信息-加时间<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;param name="info"&gt;&lt;/param&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private void showTimeInfo(string info)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; info = DateTime.Now.ToString("HH:mm:ss ") + info;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; showInfo(info);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 显示信息<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;param name="info"&gt;&lt;/param&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private void showInfo(string info)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (lstMsg.Items.Count &gt; 100)<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; lstMsg.Items.RemoveAt(100);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lstMsg.Items.Insert(0, info);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 改变控件文字<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;param name="con"&gt;控件&lt;/param&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;param name="text"&gt;文本&lt;/param&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;param name="enable"&gt;控件是否可用&lt;/param&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private void changeControlTxt(Control con, string text,bool enable)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (con != null &amp;&amp; string.IsNullOrEmpty(text)==false)<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; con.Text = text;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; con.Enabled = enable;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 使控件得到焦点<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;param name="control"&gt;&lt;/param&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private void setControlFocus(Control control)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(control!=null)<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; control.Focus();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 加载<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;param name="sender"&gt;&lt;/param&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;param name="e"&gt;&lt;/param&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private void frmTicketsHelper_Load(object sender, EventArgs e)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ThreadPool.QueueUserWorkItem(new WaitCallback(getVerificationCode), new object[] { this });<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.Invoke(shareToWeiboDelegate, new object[] { "我正在使用#德广火车票助手#抢火车票!亲们祝我好运噢!" });<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; chkRadom.Checked = true;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 分享至微博<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;param name="message"&gt;&lt;/param&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private void shareToWeibo(string message)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #region 使用Web代码<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.webBrowser1.Navigate("<a href="http://www.9inf.com/TicketsHelper1.03.php?title">http://www.9inf.com/TicketsHelper1.03.php?title</a>=" + HttpUtility.UrlEncode(message) + "&amp;url="+HttpUtility.UrlEncode("<a href="http://www.9inf.com/content/%E5%BE%B7%E5%B9%BF%E7%81%AB%E8%BD%A6%E7%A5%A8%E5%8A%A9%E6%89%8B">http://www.9inf.com/content/%E5%BE%B7%E5%B9%BF%E7%81%AB%E8%BD%A6%E7%A5%A8%E5%8A%A9%E6%89%8B</a>"));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #endregion</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #region 使用本地代码<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //StringBuilder sb = new StringBuilder();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //sb.Append("&lt;script type=\"text/javascript\" charset=\"utf-8\"&gt;");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //sb.Append(Environment.NewLine);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //sb.Append("(function(){");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //sb.Append(Environment.NewLine);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //sb.Append("&nbsp; var _w = 142 , _h = 32;");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //sb.Append(Environment.NewLine);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //sb.Append("&nbsp; var param = {");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //sb.Append(Environment.NewLine);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //sb.Append("&nbsp;&nbsp;&nbsp; <a href="http://www.cnblogs.com/tonyepaper/admin/location.href">url:location.href</a>,");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //sb.Append(Environment.NewLine);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //sb.Append("&nbsp;&nbsp;&nbsp; type:'4',");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //sb.Append(Environment.NewLine);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //sb.Append("&nbsp;&nbsp;&nbsp; count:'', /**是否显示分享数，1显示(可选)*/");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //sb.Append(Environment.NewLine);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //sb.Append("&nbsp;&nbsp;&nbsp; appkey:'1049229778', /**您申请的应用appkey,显示分享来源(可选)*/");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //sb.Append(Environment.NewLine);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //sb.Append("&nbsp;&nbsp;&nbsp; title:'"+message+"', /**分享的文字内容(可选，默认为所在页面的title)*/");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //sb.Append(Environment.NewLine);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //sb.Append("&nbsp;&nbsp;&nbsp; pic:'', /**分享图片的路径(可选)*/");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //sb.Append(Environment.NewLine);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //sb.Append("&nbsp;&nbsp;&nbsp; ralateUid:'2244896670', /**关联用户的UID，分享微博会@该用户(可选)*/");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //sb.Append(Environment.NewLine);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //sb.Append("&nbsp;language:'zh_cn', /**设置语言，zh_cn|zh_tw(可选)*/");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //sb.Append(Environment.NewLine);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //sb.Append("&nbsp;&nbsp;&nbsp; rnd:new Date().valueOf()");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //sb.Append(Environment.NewLine);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //sb.Append("&nbsp; }");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //sb.Append(Environment.NewLine);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //sb.Append("&nbsp; var temp = [];");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //sb.Append(Environment.NewLine);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //sb.Append("&nbsp; for( var p in param ){");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //sb.Append(Environment.NewLine);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //sb.Append("&nbsp;&nbsp;&nbsp; temp.push(p + '=' + encodeURIComponent( param[p] || '' ) )");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //sb.Append(Environment.NewLine);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //sb.Append("&nbsp; }");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //sb.Append(Environment.NewLine);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //sb.Append("&nbsp; document.write('&lt;iframe allowTransparency=\"true\" frameborder=\"0\" scrolling=\"no\" src=\"<a href="http://hits.sinajs.cn/A1/weiboshare.html?'">http://hits.sinajs.cn/A1/weiboshare.html?'</a> + temp.join('&amp;') + '\" width=\"'+ _w+'\" height=\"'+_h+'\"&gt;&lt;/iframe&gt;')");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //sb.Append(Environment.NewLine);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //sb.Append("})()");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //sb.Append(Environment.NewLine);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //sb.Append("&lt;/script&gt;");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //sb.Append(Environment.NewLine);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //DisplayHtml(sb.ToString());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #endregion<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 显示html内容至WebBrowser<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;param name="html"&gt;&lt;/param&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private void DisplayHtml(string html)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; webBrowser1.Navigate("about:blank");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (webBrowser1.Document != null)<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; webBrowser1.Document.Write(string.Empty);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; webBrowser1.DocumentText = html;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 退出<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;param name="sender"&gt;&lt;/param&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;param name="e"&gt;&lt;/param&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private void btnExit_Click(object sender, EventArgs e)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (MessageBox.Show("您确定要退出德广火车票助手吗?", "德广火车票助手友情 温馨提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information, MessageBoxDefaultButton.Button2) == DialogResult.Yes)<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; this.Close();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 点击得到新的验证码<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;param name="sender"&gt;&lt;/param&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;param name="e"&gt;&lt;/param&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private void picValidImg_Click(object sender, EventArgs e)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ThreadPool.QueueUserWorkItem(new WaitCallback(getVerificationCode), new object[] { this });<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 点击公司<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;param name="sender"&gt;&lt;/param&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;param name="e"&gt;&lt;/param&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private void tssAuthor_Click(object sender, EventArgs e)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Diagnostics.Process.Start("<a href="http://www.9inf.com/">http://www.9inf.com</a>");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private void chkRadom_CheckedChanged(object sender, EventArgs e)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (chkRadom.Checked == true)<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; labInterval.Text = "最大尝试间隔";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<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; labInterval.Text = "尝试间隔";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private void numInterval_Validating(object sender, CancelEventArgs e)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (numInterval.Value &lt; 5)<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; MessageBox.Show("如果尝试间隔小于5秒,有可能会被12306封锁,欲速则不达!", "德广火车票助手友情 温馨提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />&nbsp;&nbsp;&nbsp; /// 处理证书提示<br />&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />&nbsp;&nbsp;&nbsp; public class MyPolicy : ICertificatePolicy<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public bool CheckValidationResult(ServicePoint srvPoint,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; X509Certificate certificate, WebRequest request,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int certificateProblem)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Return True to force the certificate to be accepted.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return true;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; }<br />}</p>
<p>&nbsp;</p>
<p>using System;<br />using System.Collections.Generic;<br />using System.Text;<br />using System.Net;<br />using System.Security.Cryptography.X509Certificates;<br />using System.Net.Security;<br />using System.IO;<br />using System.Diagnostics;</p>
<p>namespace DeGuangTicketsHelper<br />{<br />&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;&nbsp; <br />&nbsp;&nbsp;&nbsp; /// 有关HTTP请求的辅助类&nbsp; <br />&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;&nbsp; <br />&nbsp;&nbsp;&nbsp; public class HttpWebResponseUtility<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //private static readonly string DefaultUserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private static readonly string DefaultUserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private static readonly string DefaultAccept = "image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/xaml+xml, application/x-ms-xbap, application/x-ms-application, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private static readonly string DefaultContentType = "text/html; charset=GBK";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private static readonly int DefaultTimeOut = 30000;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 创建GET方式的HTTP请求&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;param name="url"&gt;请求的URL&lt;/param&gt;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;param name="timeout"&gt;请求的超时时间&lt;/param&gt;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;param name="userAgent"&gt;请求的客户端浏览器信息，可以为空&lt;/param&gt;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;param name="cookies"&gt;随同HTTP请求发送的Cookie信息，如果不需要身份验证可以为空&lt;/param&gt;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;returns&gt;&lt;/returns&gt;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static HttpWebRequest CreateGetHttpResponse(string url, CookieContainer cookieContainer)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return CreateGetHttpResponse(url, null, null, cookieContainer,null);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 创建GET方式的HTTP请求&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;param name="url"&gt;请求的URL&lt;/param&gt;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;param name="timeout"&gt;请求的超时时间&lt;/param&gt;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;param name="userAgent"&gt;请求的客户端浏览器信息，可以为空&lt;/param&gt;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;param name="cookies"&gt;随同HTTP请求发送的Cookie信息，如果不需要身份验证可以为空&lt;/param&gt;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;returns&gt;&lt;/returns&gt;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static HttpWebRequest CreateGetHttpResponse(string url,&nbsp; CookieContainer cookieContainer, string referer)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return CreateGetHttpResponse(url, null, null, cookieContainer, referer);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 创建GET方式的HTTP请求&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;param name="url"&gt;请求的URL&lt;/param&gt;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;param name="timeout"&gt;请求的超时时间&lt;/param&gt;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;param name="userAgent"&gt;请求的客户端浏览器信息，可以为空&lt;/param&gt;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;param name="cookies"&gt;随同HTTP请求发送的Cookie信息，如果不需要身份验证可以为空&lt;/param&gt;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;returns&gt;&lt;/returns&gt;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static HttpWebRequest CreateGetHttpResponse(string url, int? timeout, CookieContainer cookieContainer)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return CreateGetHttpResponse(url, timeout, null, cookieContainer, null);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 创建GET方式的HTTP请求&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;param name="url"&gt;请求的URL&lt;/param&gt;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;param name="timeout"&gt;请求的超时时间&lt;/param&gt;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;param name="userAgent"&gt;请求的客户端浏览器信息，可以为空&lt;/param&gt;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;param name="cookies"&gt;随同HTTP请求发送的Cookie信息，如果不需要身份验证可以为空&lt;/param&gt;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;returns&gt;&lt;/returns&gt;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static HttpWebRequest CreateGetHttpResponse(string url, int? timeout, string userAgent, CookieContainer cookieContainer, string referer)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (string.IsNullOrEmpty(url))<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; throw new ArgumentNullException("url");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request.Method = "GET";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request.KeepAlive = true;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request.Accept = DefaultAccept;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request.UserAgent = DefaultUserAgent;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request.Headers.Add("Accept-Language: zh-cn");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request.Headers.Add("Accept-Encoding: gzip, deflate");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //request.Headers.Add("Connection: Keep-Alive");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!string.IsNullOrEmpty(userAgent))<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; request.UserAgent = userAgent;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (timeout.HasValue)<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; request.Timeout = timeout.Value;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<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; request.Timeout = DefaultTimeOut;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (cookieContainer != null)<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; request.CookieContainer = cookieContainer;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!string.IsNullOrEmpty(referer))<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; request.Referer = referer;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //if (cookies != null)&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //{&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp; request.CookieContainer = new CookieContainer();&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp; request.CookieContainer.Add(cookies);&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; return request;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 创建POST方式的HTTP请求&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;param name="url"&gt;请求的URL&lt;/param&gt;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;param name="parameters"&gt;随同请求POST的参数名称及参数值字典&lt;/param&gt;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;param name="timeout"&gt;请求的超时时间&lt;/param&gt;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;param name="userAgent"&gt;请求的客户端浏览器信息，可以为空&lt;/param&gt;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;param name="requestEncoding"&gt;发送HTTP请求时所用的编码&lt;/param&gt;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;param name="cookies"&gt;随同HTTP请求发送的Cookie信息，如果不需要身份验证可以为空&lt;/param&gt;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;returns&gt;&lt;/returns&gt;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static HttpWebResponse CreatePostHttpResponse(string url, IDictionary&lt;string, string&gt; parameters, int? timeout, string userAgent, Encoding requestEncoding, CookieCollection cookies,string referer)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpWebResponse response = null;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (string.IsNullOrEmpty(url))<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; throw new ArgumentNullException("url");<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; if (requestEncoding == null)<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; throw new ArgumentNullException("requestEncoding");<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; HttpWebRequest request = null;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //如果是发送HTTPS请求&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))<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; ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request = WebRequest.Create(url) as HttpWebRequest;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request.ProtocolVersion = HttpVersion.Version10;<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; request = WebRequest.Create(url) as HttpWebRequest;<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; request.Method = "POST";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request.ContentType = "application/x-www-form-urlencoded";</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request.Headers.Add("Accept-Language: zh-cn");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request.Headers.Add("Accept-Encoding: gzip, deflate");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!string.IsNullOrEmpty(userAgent))<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; request.UserAgent = userAgent;<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; request.UserAgent = DefaultUserAgent;<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; if (timeout.HasValue)<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; request.Timeout = timeout.Value;<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; request.Timeout = DefaultTimeOut;<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; if (cookies != null)<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; request.CookieContainer = new CookieContainer();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request.CookieContainer.Add(cookies);<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; if (!string.IsNullOrEmpty(referer))<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; request.Referer = referer;<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; //如果需要POST数据&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!(parameters == null || parameters.Count == 0))<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; StringBuilder buffer = new StringBuilder();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int i = 0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; foreach (string key in parameters.Keys)<br />&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp; if (i &gt; 0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; buffer.AppendFormat("&amp;{0}={1}", key, parameters[key]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp; else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; buffer.AppendFormat("{0}={1}", key, parameters[key]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp; i++;<br />&nbsp;&nbsp;&nbsp;&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; byte[] data = requestEncoding.GetBytes(buffer.ToString());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; using (Stream stream = request.GetRequestStream())<br />&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp; stream.Write(data, 0, data.Length);<br />&nbsp;&nbsp;&nbsp;&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; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; response= request.GetResponse() as HttpWebResponse;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return response;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return true; //总是接受&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; }&nbsp; <br />}</p>
<p>请各位多给些改善建议.谢谢!</p>
</div><img src="aggbug/2330799.html?type=0" width="1" height="1" alt=""/><p>作者: <a href="" target="_blank">武广敬</a> 发表于 2012-01-29 01:56 <a href="http://www.cnblogs.com/tonyepaper/archive/2012/01/29/2330799.html" target="_blank">原文链接</a></p><p>评论: 0　<a href="http://www.cnblogs.com/tonyepaper/archive/2012/01/29/2330799.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/tonyepaper/archive/2012/01/29/2330799.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/129385/" target="_blank">Jon Rubinstein 暂别科技舞台：再见，HP</a><span style="color:gray">(2012-01-28 21:36)</span><br/>· <a href="http://news.cnblogs.com/n/129384/" target="_blank">塞班3设备更新换代 诺基亚Belle出货</a><span style="color:gray">(2012-01-28 21:34)</span><br/>· <a href="http://news.cnblogs.com/n/129383/" target="_blank">推土机Windows 7补丁权威测试</a><span style="color:gray">(2012-01-28 19:24)</span><br/>· <a href="http://news.cnblogs.com/n/129382/" target="_blank">诺基亚在印度：品牌优势，渠道特点，跟中国的对比</a><span style="color:gray">(2012-01-28 19:21)</span><br/>· <a href="http://news.cnblogs.com/n/129381/" target="_blank">世界最早的计算机密码和黑客</a><span style="color:gray">(2012-01-28 19:20)</span><br/></p><p>编辑推荐：<a href="http://kb.cnblogs.com/page/120592/" target="_blank">Ruby之父松本行弘的编程人生</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">我的园子</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://q.cnblogs.com/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>Redis 起步</title><link>http://www.cnblogs.com/shanyou/archive/2012/01/28/2330451.html</link><dc:creator>张善友</dc:creator><author>张善友</author><pubDate>Sat, 28 Jan 2012 02:00:00 GMT</pubDate><guid>http://www.cnblogs.com/shanyou/archive/2012/01/28/2330451.html</guid><description><![CDATA[<p><p>Rdis和JQuery一样是纯粹为应用而产生的，这里记录的是在CentOS 5.7上学习入门文章：</p>
<h5>1.Redis简介</h5>
<p><a href="http://code.google.com/p/redis/"><img style="display: inline; border: 0px;" title="redis" src="http://images.cnblogs.com/cnblogs_com/shanyou/201201/201201281031521927.png" alt="redis" width="116" height="90" border="0" /> Redis</a>是一个key-value存储系统。和Memcached类似，但是解决了断电后数据完全丢失的情况，而且她支持更多无化的value类型，除了和string外，还支持lists（链表）、sets（集合）和zsets（有序集合）几种数据类型。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作，而且这些操作都是原子性的。</p>
<h5>2.Redis的性能</h5>
<p>下面是官方的bench-mark数据：</p>
<blockquote>
<ul>
<li>The test was done with 50 simultaneous clients performing 100000 requests.</li>
<li>The value SET and GET is a 256 bytes string.</li>
<li>The Linux box is running <strong>Linux 2.6</strong>, it&rsquo;s <strong>Xeon X3320 2.5Ghz</strong>.</li>
<li>Text executed using the loopback interface (127.0.0.1).
<p>Results: <strong>about 110000 SETs per second, about 81000 GETs per second.</strong></p>
</li>
</ul>
</blockquote>
<p>更多详细数据请见官方bench-mark page（<a href="http://code.google.com/p/redis/wiki/Benchmarks">http://code.google.com/p/redis/wiki/Benchmarks</a>）</p>
<h5><strong>3.安装Redis</strong></h5>
<p>Redis的代码遵循ANSI-C编写，可以在所有POSIX系统（如Linux, <tt>*</tt>BSD, Mac OS X, Solaris等）上安装运行。而且Redis并不依赖任何非标准库，也没有编译参数必需添加。redis的安装出奇的简单，这可能也是他风靡的一个原因，让人很容易上手，不像某些东西，编译阶段就能让人完全绝望。</p>
<p>先去官网下载源码：</p>
<p>wget <a href="http://redis.googlecode.com/files/redis-2.4.6.tar.gz">http://redis.googlecode.com/files/redis-2.4.6.tar.gz</a></p>
<p>解压：</p>
<p>tar &ndash;zxvf redis-2.4.6.tar.gz</p>
<p>编译</p>
<p>需要说明的事，redis的安装非常简单，已经有现成的Makefile文件，直接运行make命令即可。</p>
<p>make</p>
<p>make install</p>
<p>Redis 由四个可执行文件：<strong>redis-benchmark</strong>、<strong>redis-cli</strong>、<strong>redis-server</strong>、<strong>redis-stat </strong>这四个文件，加上一个<strong>redis.conf</strong>就构成了整个redis的最终可用包。它们的作用如下：</p>
<ul>
<li>redis-server：Redis服务器的daemon启动程序</li>
<li>redis-cli：Redis命令行操作工具。当然，你也可以用telnet根据其纯文本协议来操作</li>
<li>redis-benchmark：Redis性能测试工具，测试Redis在你的系统及你的配置下的读写性能</li>
<li>redis-stat：Redis状态检测工具，可以检测Redis当前状态参数及延迟状况</li>
</ul>
<p>现在就可以启动redis了，redis只有一个启动参数，就是他的配置文件路径。</p>
<p>redis-server /etc/redis.conf</p>
<p>注意，默认复制过去的<strong>redis.conf</strong>文件的<strong>daemonize</strong>参数为<strong>no</strong>，所以redis不会在后台运行，这时要测试，我们需要重新开一个终端。修改为<strong>yes</strong>则为后台运行redis。另外配置文件中规定了pid文件，log文件和数据文件的地址，如果有需要先修改，默认log信息定向到stdout.</p>
<p>下面是redis.conf的主要配置参数的意义：</p>
<ul>
<li>daemonize：是否以后台daemon方式运行</li>
<li>pidfile：pid文件位置</li>
<li>port：监听的端口号</li>
<li>timeout：请求超时时间</li>
<li>loglevel：log信息级别</li>
<li>logfile：log文件位置</li>
<li>databases：开启数据库的数量</li>
<li>save * *：保存快照的频率，第一个*表示多长时间，第三个*表示执行多少次写操作。在一定时间内执行一定数量的写操作时，自动保存快照。可设置多个条件。</li>
<li>rdbcompression：是否使用压缩</li>
<li>dbfilename：数据快照文件名（只是文件名，不包括目录）</li>
<li>dir：数据快照的保存目录（这个是目录）</li>
<li>appendonly：是否开启appendonlylog，开启的话每次写操作会记一条log，这会提高数据抗风险能力，但影响效率。</li>
<li>appendfsync：appendonlylog如何同步到磁盘（三个选项，分别是每次写都强制调用fsync、每秒启用一次fsync、不调用fsync等待系统自己同步）</li>
</ul>
<p>这时你可以打开一个终端进行测试了，配置文件中默认的监听端口是<strong>6379</strong></p>
<p>我们可以开启一个Redis客户端进行测试</p>
<p>[root@SNDA-192-168-1-114 ~]# redis-cli <br />Could not connect to Redis at 127.0.0.1:6379: Connection refused <br />not connected&gt; exit <br />[root@SNDA-192-168-1-114 ~]# redis-server /etc/redis.conf <br />[root@SNDA-192-168-1-114 ~]# redis-cli <br />redis 127.0.0.1:6379&gt; quit</p>
<h5><strong>4.redis数据结构</strong></h5>
<p>redis 的作者antirez曾称其为一个数据结构服务器（<strong>data structures server</strong>），这是一个非常准确的表述，redis的所有功能就是将数据以其固有的几种结构保存，并提供给用户操作这几种结构的接口。我们可以想象我们在各种语言中的那些固有数据类型及其操作。</p>
<p>redis目前提供四种数据类型：<strong>string</strong>,<strong>list</strong>,<strong>set</strong>及<strong>zset</strong>(sorted set)和<strong>Hash</strong>。</p>
<ul>
<li><strong>string</strong>是最简单的类型，你可以理解成与Memcached一模一个的类型，一个key对应一个value，其上支持的操作与Memcached的操作类似。但它的功能更丰富。</li>
<li><strong>list</strong>是一个链表结构，主要功能是push、pop、获取一个范围的所有值等等。操作中key理解为链表的名字。</li>
<li><strong>set</strong>是集合，和我们数学中的集合概念相似，对集合的操作有添加删除元素，有对多个集合求交并差等操作。操作中key理解为集合的名字。</li>
<li><strong>zset</strong>是set的一个升级版本，他在set的基础上增加了一个顺序属性，这一属性在添加修改元素的时候可以指定，每次指定后，zset会自动重新按新的值调整顺序。可以理解了有两列的mysql表，一列存value，一列存顺序。操作中key理解为zset的名字。</li>
<li><strong>Hash</strong>数据类型允许用户用Redis存储对象类型,Hash数据类型的一个重要优点是,当你存储的数据对象只有很少几个key值时,数据存储的内存消耗会很小.更多关于Hash数据类型的说明请见: <a href="http://code.google.com/p/redis/wiki/Hashes">http://code.google.com/p/redis/wiki/Hashes</a></li>
</ul>
<p>在官网上给出了所有支持的接口列表，并副副附有详细的介绍，地址：</p>
<p><a href="http://code.google.com/p/redis/wiki/CommandReference">http://code.google.com/p/redis/wiki/CommandReference</a></p>
<p>另外，作者还提供了一个非常贴心的web命令行模拟页面，供初学者试用redis，地址：</p>
<p><a href="http://try.redis-db.com/">http://try.redis-db.com/</a></p>
<h5><strong>5.redis数据存储</strong></h5>
<p>redis的存储分为内存存储、磁盘存储和log文件三部分，配置文件中有三个参数对其进行配置。</p>
<p><strong>save seconds updates</strong>，<strong>save</strong>配置，指出在多长时间内，有多少次更新操作，就将数据同步到数据文件。这个可以多个条件配合，比如默认配置文件中的设置，就设置了三个条件。</p>
<p><strong>appendonly yes</strong>/<strong>no </strong>，<strong>appendonly</strong>配置，指出是否在每次更新操作后进行日志记录，如果不开启，可能会在断电时导致一段时间内的数据丢失。因为redis本身同步数据文件是按上面的save条件来同步的，所以有的数据会在一段时间内只存在于内存中。</p>
<p><strong>appendfsync no</strong>/<strong>always</strong>/<strong>everysec </strong>，<strong>appendfsync</strong>配置，<strong>no</strong>表示等操作系统进行数据缓存同步到磁盘，<strong>always</strong>表示每次更新操作后手动调用<strong>fsync</strong>()将数据写到磁盘，<strong>everysec</strong>表示每秒同步一次。</p>
<h5><strong>6.redis主从配置</strong></h5>
<p>redis支持<strong>master-slave</strong>的主从配置，配置方法是在从机的配置文件中指定<strong>slaveof</strong>参数为主机的ip和port即可</p>
<h5><strong>7.redis起步(链接整理)</strong></h5>
<p>项目首页，下方是各种语言支持列表：</p>
<p><a href="http://code.google.com/p/redis/">http://code.google.com/p/redis/</a></p>
<p>作者在wiki中给出了一个非常好的例子，以使我们可以快速上手，地址：</p>
<p><a href="http://code.google.com/p/redis/wiki/TwitterAlikeExample">http://code.google.com/p/redis/wiki/TwitterAlikeExample</a></p>
<p>同时作者推荐的另一个教程，地址：</p>
<p><a href="http://labs.alcacoop.it/doku.php?id=articles:redis_land">http://labs.alcacoop.it/doku.php?id=articles:redis_land</a></p>
<p>一个redis爱好者创建的相关问题讨论网站：</p>
<p><a href="http://www.rediscookbook.org/">http://www.rediscookbook.org/</a></p>
<p>为什么使用 Redis及其产品定位</p>
<p><a title="http://www.infoq.com/cn/articles/tq-why-choose-redis" href="http://www.infoq.com/cn/articles/tq-why-choose-redis">http://www.infoq.com/cn/articles/tq-why-choose-redis</a></p>
<p>Redis内存使用优化与存储</p>
<p><a title="http://www.infoq.com/cn/articles/tq-redis-memory-usage-optimization-storage" href="http://www.infoq.com/cn/articles/tq-redis-memory-usage-optimization-storage">http://www.infoq.com/cn/articles/tq-redis-memory-usage-optimization-storage</a></p><img src="http://www.cnblogs.com/shanyou/aggbug/2330451.html?type=1" width="1" height="1" alt=""/><p>作者: <a href="http://www.cnblogs.com/shanyou/" target="_blank">张善友</a> 发表于 2012-01-28 10:00 <a href="http://www.cnblogs.com/shanyou/archive/2012/01/28/2330451.html" target="_blank">原文链接</a></p><p>评论: 1　<a href="http://www.cnblogs.com/shanyou/archive/2012/01/28/2330451.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/shanyou/archive/2012/01/28/2330451.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/129385/" target="_blank">Jon Rubinstein 暂别科技舞台：再见，HP</a><span style="color:gray">(2012-01-28 21:36)</span><br/>· <a href="http://news.cnblogs.com/n/129384/" target="_blank">塞班3设备更新换代 诺基亚Belle出货</a><span style="color:gray">(2012-01-28 21:34)</span><br/>· <a href="http://news.cnblogs.com/n/129383/" target="_blank">推土机Windows 7补丁权威测试</a><span style="color:gray">(2012-01-28 19:24)</span><br/>· <a href="http://news.cnblogs.com/n/129382/" target="_blank">诺基亚在印度：品牌优势，渠道特点，跟中国的对比</a><span style="color:gray">(2012-01-28 19:21)</span><br/>· <a href="http://news.cnblogs.com/n/129381/" target="_blank">世界最早的计算机密码和黑客</a><span style="color:gray">(2012-01-28 19:20)</span><br/></p><p>编辑推荐：<a href="http://kb.cnblogs.com/page/120592/" target="_blank">Ruby之父松本行弘的编程人生</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">我的园子</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://q.cnblogs.com/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>使用RestSharp 库消费Restful Service</title><link>http://www.cnblogs.com/shanyou/archive/2012/01/27/2330046.html</link><dc:creator>张善友</dc:creator><author>张善友</author><pubDate>Fri, 27 Jan 2012 02:24:00 GMT</pubDate><guid>http://www.cnblogs.com/shanyou/archive/2012/01/27/2330046.html</guid><description><![CDATA[<p><p>现在互联网上的服务接口都是Restful的，SOAP的Service已经不是主流。.NET/Mono下如何消费Restful Service呢，再也没有了方便的Visual Studio的方便生产代理的工具了，你还在用HttpWebRequest 自己封装吗？Restful Service还有授权问题，自己写出来的代码是不是很不优雅？通常Restful Service返回的数据格式是XML或者Json，还要设置服务的输入参数等等，使用起来很复杂。本文向你推荐一个开源的库RestSharp轻松消费Restful Service。<a href="http://restsharp.org/">RestSharp</a>是一个开源的.NET平台下REST和Http API的客户端库，支持的平台有.NET 3.5/4、Mono、Mono for Android、MonoTouch、Windows Phone 7.1 Mango。他可以简化我们访问Restful服务，可以到这里下载代码 <a href="https://github.com/johnsheehan/RestSharp/archives/master">https://github.com/johnsheehan/RestSharp/archives/master</a> 更简单的使用<a href="http://nuget.org/List/Packages/RestSharp">NuGet</a>。RestSharp使用Json.Net处理 Json数据同Poco对象的序列化。</p>
<p>下面分别从库的使用方式上进行介绍，使用的Restful Service是腾讯社区开放平台（<a href="http://opensns.qq.com/">http://opensns.qq.com/</a>）。 <br />1、服务认证，RestSharp定义了一个认证授权的接口 IAuthenticator ，有NtlmAuthenticator、HttpBasicAuthenticator、OAuth1Authenticator、OAuth2Authenticator几种，基本上可以满足要求了，腾讯社区开放平台使用OAuth2，腾讯社区开放平台额外增加了一个OpenId的参数，我们从OAuth2Authenticator的基类继承实现一个：</p>
<p>&nbsp;&nbsp;&nbsp; public class OAuthUriQueryParameterAuthenticator : OAuth2Authenticator <br />&nbsp;&nbsp;&nbsp; { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private readonly string openId; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private readonly string consumerKey;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public OAuthUriQueryParameterAuthenticator(string openId, string accessToken, string consumerkey) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :base(accessToken) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.openId = openId; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.consumerKey = consumerkey; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public override void Authenticate(IRestClient client, IRestRequest request) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request.AddParameter("access_token", AccessToken, ParameterType.GetOrPost); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request.AddParameter("openid", openId, ParameterType.GetOrPost); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request.AddParameter("oauth_consumer_key", consumerKey, ParameterType.GetOrPost); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>2、Get请求方法，下面的例子是根据access_token获得对应用户身份的openid： <a href="https://graph.qq.com/oauth2.0/me?access_token=YOUR_ACCESS_TOKEN">https://graph.qq.com/oauth2.0/me?access_token=YOUR_ACCESS_TOKEN</a></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; public string GetOpenId(string accessToken) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RestClient&nbsp; _restClient = new RestClient(Endpoints.ApiBaseUrl); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var request = _requestHelper.CreateOpenIDRequest(accessToken); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var response = Execute(request); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var openid = GetUserOpenId(response.Content); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return openid; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private RestSharp.RestResponse Execute(RestRequest request) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //返回的结果</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var response = _restClient.Execute(request);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (response.StatusCode != HttpStatusCode.OK) <br />&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; throw new QzoneException(response); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return response; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; internal RestRequest CreateOpenIDRequest(string accesstoken) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var request = new RestRequest(Method.GET); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request.Resource = "oauth2.0/me?access_token={accesstoken}"; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request.AddParameter("accesstoken", accesstoken, ParameterType.UrlSegment); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return request; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 上面代码里涉及到了服务的输入参数通过AddParameter方法很方便的处理，是不是很简单。</p>
<p>3、POST请求服务，下面的例子是发表一条微博信息（纯文本）到腾讯微博平台上<a title="http://wiki.opensns.qq.com/wiki/%E3%80%90QQ%E7%99%BB%E5%BD%95%E3%80%91add_t" href="http://wiki.opensns.qq.com/wiki/%E3%80%90QQ%E7%99%BB%E5%BD%95%E3%80%91add_t">http://wiki.opensns.qq.com/wiki/%E3%80%90QQ%E7%99%BB%E5%BD%95%E3%80%91add_t</a>：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 发表一条微博信息（纯文本）到腾讯微博平台上 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;param name="content"&gt;表示要发表的微博内容。必须为UTF-8编码，最长为140个汉字，也就是420字节。 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// 如果微博内容中有URL，后台会自动将该URL转换为短URL，每个URL折算成11个字节。&lt;/param&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;param name="clientip"&gt;用户ip，以分析用户所在地&lt;/param&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;param name="jing"&gt;用户所在地理位置的经度。为实数，最多支持10位有效数字。有效范围：-180.0到+180.0，+表示东经，默认为0.0&lt;/param&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;param name="wei"&gt;用户所在地理位置的纬度。为实数，最多支持10位有效数字。有效范围：-90.0到+90.0，+表示北纬，默认为0.0。&lt;/param&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;param name="syncflag"&gt;标识是否将发布的微博同步到QQ空间（0：同步； 1：不同步；），默认为0.&lt;/param&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;returns&gt;&lt;/returns&gt; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; internal AddWeiboResult AddWeibo(string content, string clientip = "", string jing = "", string wei = "", int syncflag = 0) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RestClient&nbsp; _restClient = new RestClient(Endpoints.ApiBaseUrl);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _restClient.Authenticator = new OAuthUriQueryParameterAuthenticator(context.AccessToken.OpenId, context.AccessToken.AccessToken, context.Config.GetAppKey()); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var request = _requestHelper.CreateAddWeiboRequest(content, clientip,jing,wei,syncflag);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var response = Execute(request);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var payload = Deserialize&lt;AddWeiboResult&gt;(response.Content); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return payload; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; internal RestRequest CreateAddWeiboRequest(string content, string clientip, string jing, string wei, int syncflag) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var request = new RestRequest(Method.POST); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request.RequestFormat = DataFormat.Json; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request.AddHeader("Content-Type", "application/x-www-form-urlencoded"); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request.Resource = "t/add_t"; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request.AddParameter("content", content); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!string.IsNullOrEmpty(clientip)) <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; request.AddParameter("clientip", clientip); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!string.IsNullOrEmpty(jing)) <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; request.AddParameter("jing", jing); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!string.IsNullOrEmpty(wei)) <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; request.AddParameter("wei", wei); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request.AddParameter("syncflag", syncflag); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return request; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp; 这个方法需要使用到OAuth2的认证和前面的不需要认证的接口比较起来并没有变复杂，代码很优雅。</p>
<p>4、来点复杂的，发个图片微博，RestSharp对HttpFile的封装也很不错，使用起来一样很简单，看代码中的红色部分：</p>
<p>internal RestRequest CreateAddPictureWeiboRequest(string content, string clientip, string jing, string wei, int syncflag, string fileName, byte[] bytes) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var request = new RestRequest(Method.POST); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request.RequestFormat = DataFormat.Json; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var boundary = string.Concat("--", Util.GenerateRndNonce()); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request.AddHeader("Content-Type", string.Concat("multipart/form-data; boundary=", boundary)); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request.Resource = "t/add_pic_t"; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request.AddParameter("content", content); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!string.IsNullOrEmpty(clientip)) <br />&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; request.AddParameter("clientip", clientip); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!string.IsNullOrEmpty(jing)) <br />&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; request.AddParameter("jing", jing); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!string.IsNullOrEmpty(wei)) <br />&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; request.AddParameter("wei", wei); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request.AddParameter("syncflag", syncflag); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong><span style="color: #ff0000; font-size: medium;">request.AddFile("pic", bytes, fileName); <br /></span></strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return request; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>上面这几个API的调用已经很具有代表性了，是不是可以很好的简化你使用Restful Service，记住DRY(don&rsquo;t repeat yourself)，可以很好的加速你的应用的开发。</p><img src="http://www.cnblogs.com/shanyou/aggbug/2330046.html?type=1" width="1" height="1" alt=""/><p>作者: <a href="http://www.cnblogs.com/shanyou/" target="_blank">张善友</a> 发表于 2012-01-27 10:24 <a href="http://www.cnblogs.com/shanyou/archive/2012/01/27/2330046.html" target="_blank">原文链接</a></p><p>评论: 1　<a href="http://www.cnblogs.com/shanyou/archive/2012/01/27/2330046.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/shanyou/archive/2012/01/27/2330046.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/129385/" target="_blank">Jon Rubinstein 暂别科技舞台：再见，HP</a><span style="color:gray">(2012-01-28 21:36)</span><br/>· <a href="http://news.cnblogs.com/n/129384/" target="_blank">塞班3设备更新换代 诺基亚Belle出货</a><span style="color:gray">(2012-01-28 21:34)</span><br/>· <a href="http://news.cnblogs.com/n/129383/" target="_blank">推土机Windows 7补丁权威测试</a><span style="color:gray">(2012-01-28 19:24)</span><br/>· <a href="http://news.cnblogs.com/n/129382/" target="_blank">诺基亚在印度：品牌优势，渠道特点，跟中国的对比</a><span style="color:gray">(2012-01-28 19:21)</span><br/>· <a href="http://news.cnblogs.com/n/129381/" target="_blank">世界最早的计算机密码和黑客</a><span style="color:gray">(2012-01-28 19:20)</span><br/></p><p>编辑推荐：<a href="http://kb.cnblogs.com/page/120592/" target="_blank">Ruby之父松本行弘的编程人生</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">我的园子</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://q.cnblogs.com/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>WCF RESTful服务的Google Protocol Buffers超媒体类型</title><link>http://www.cnblogs.com/shanyou/archive/2012/01/22/2328754.html</link><dc:creator>张善友</dc:creator><author>张善友</author><pubDate>Sun, 22 Jan 2012 03:52:00 GMT</pubDate><guid>http://www.cnblogs.com/shanyou/archive/2012/01/22/2328754.html</guid><description><![CDATA[<p><p><a href="http://code.google.com/apis/protocolbuffers/">Protocol Buffers</a> 是在一个很理想的结构化数据的语言中立的序列化格式。你可以考虑一下XML或JSON，但更轻，更小的协议缓冲区。 这种格式的广应用于谷歌不同的系统之间交换数据。</p>  <p>由于其结构化数据的最佳表现，<a href="http://translate.googleusercontent.com/translate_c?act=url&amp;hl=zh-CN&amp;ie=UTF8&amp;prev=_t&amp;rurl=translate.google.com.hk&amp;sl=en&amp;tl=zh-CN&amp;twu=1&amp;u=http://code.google.com/apis/protocolbuffers/&amp;usg=ALkJrhj4ImSRSpLE1gD6nWej8ZkLd8uH6A">protocol buffers</a> 是一个代表RESTful服务处理的数据很好的选择。要遵循REST的原则， <a href="http://translate.googleusercontent.com/translate_c?act=url&amp;hl=zh-CN&amp;ie=UTF8&amp;prev=_t&amp;rurl=translate.google.com.hk&amp;sl=en&amp;tl=zh-CN&amp;twu=1&amp;u=http://code.google.com/apis/protocolbuffers/&amp;usg=ALkJrhj4ImSRSpLE1gD6nWej8ZkLd8uH6A">protocol buffers</a> 应作为一个新的超媒体类型的代表。 在当前版本（.NET 4) 的Windows通讯基础（WCF），包含一个新的媒体类型，需要相当数量的努力。 幸运的是，新版本的WCF HTTP堆栈，使媒体类型的WCF编程模型的一等公民，大家可以<a href="http://blogs.msdn.com/b/gblock">Glenn Block’s</a> 博客去了解更详细的内容。推荐大家假期可以看下这本书《REST实战》<a title="http://book.douban.com/subject/6854551/" href="http://book.douban.com/subject/6854551/">http://book.douban.com/subject/6854551/</a></p>  <p>下面我们来介绍如何使用Google Protocol Buffers，只定义一个超媒体类型 ProtoBufferFormatter：</p>  <p>自定义超媒体类型是通过创建自定义的MediaTypeFormatter，实现OnWritetoStream() 和 OnReadFromStream() 方法进行序列化和反序列化处理。人们经常认为媒体类型只是在服务端使用，但是它用来在客户端控制序列化和反序列化的要求，下图显示了一个HTTP 请求/响应和媒体类型格式化扮演的角色：</p>  <p><a href="http://images.cnblogs.com/cnblogs_com/shanyou/201201/201201221151596917.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="MediaTypeFormatterProcess" border="0" alt="MediaTypeFormatterProcess" src="http://images.cnblogs.com/cnblogs_com/shanyou/201201/201201221152014177.png" width="707" height="371" /></a></p>  <p>这个例子我们使用<a href="http://www.cnblogs.com/shanyou/archive/2011/06/30/2095018.html">入门：构建简单的Web API</a> 的代码和<a href="http://wcf.codeplex.com/releases/view/73423">WCF Web API Preview 6</a>。使用的媒体类型是application/x-protobuf ，REST服务的核心原则就是服务器和客户端之间的松耦合性，客户端需要知道书签的URI，但不应该知道任何其他的URI的知识，但是客户端必须知道链接关系。</p>  <p><a href="http://images.cnblogs.com/cnblogs_com/shanyou/201201/201201221152055450.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/shanyou/201201/201201221152085959.png" width="659" height="381" /></a></p>  <p>下面的代码是自定义的ProtoBufferFormatter，构造函数里指明了支持的媒体类型 application/x-protobuf。</p>  <p>using System;    <br />using System.Collections.Generic;     <br />using System.Linq;     <br />using System.Web;     <br />using System.Net.Http.Formatting;     <br />using System.IO;     <br />using ProtoBuf;     <br />using ProtoBuf.Meta;</p>  <p>namespace WcfWebFormat.Formatters    <br />{     <br />&#160;&#160;&#160; public class ProtoBufferFormatter : MediaTypeFormatter     <br />&#160;&#160;&#160; {     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; public ProtoBufferFormatter()     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; {     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; this.SupportedMediaTypes.Add(new System.Net.Http.Headers.MediaTypeHeaderValue(&quot;application/x-protobuf&quot;));     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; }</p>  <p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; protected override void OnWriteToStream(Type type, object value, Stream stream, System.Net.Http.Headers.HttpContentHeaders contentHeaders, System.Net.TransportContext context)    <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; {     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Serializer.Serialize(stream, value);&#160; <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; }</p>  <p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; protected override object OnReadFromStream(Type type, Stream stream, System.Net.Http.Headers.HttpContentHeaders contentHeaders)    <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; {     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; object obj = (RuntimeTypeModel.Default).Deserialize(stream, null, type);     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; return obj;     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; }</p>  <p>&#160;&#160;&#160; }    <br />}</p>  <p>如上所示，我们在OnWriteToStream方法中将.NET对象序列化为ProtoBuf格式，在OnReadFromStream方法中将ProtoBuf格式饭序列化为.NET对象。</p>  <p>现在需要给我们的.NET对象加入ProtoBuf 序列化的标签：</p>  <p>using System.Collections.Generic;    <br />using System.Xml.Serialization;     <br />using ProtoBuf;</p>  <p>namespace ContactManager.Resources    <br />{     <br />&#160;&#160;&#160; [ProtoContract]     <br />&#160;&#160;&#160; public class Contact     <br />&#160;&#160;&#160; {     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; [ProtoMember(1)]     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; public int ContactId { get; set; }     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; [ProtoMember(2)]     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; public string Name { get; set; }     <br />&#160;&#160;&#160; }     <br />}</p>  <p>把ProtoBufferFormatter 加入到WCF运行时的超媒体类型集合里。</p>  <p>using Microsoft.ApplicationServer.Http;    <br />using WcfWebFormat.Formatters;</p>  <p>namespace ContactManager    <br />{     <br />&#160;&#160;&#160; public class ContactManagerConfiguration : HttpConfiguration     <br />&#160;&#160;&#160; {     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; public ContactManagerConfiguration()     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; {     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; this.Formatters.Add(new ProtoBufferFormatter());     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; }     <br />&#160;&#160;&#160; }     <br />}</p>  <p>修改服务配置，使用ContactManagerConfiguration：</p>  <p>var config = new ContactManagerConfiguration() { EnableTestClient = true };    <br />routes.Add(new ServiceRoute(&quot;api/contacts&quot;, new HttpServiceHostFactory() { Configuration = config }, typeof(ContactsApi)));</p>  <p>在客户端调用的代码如下：</p>  <p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; var serviceUri = new Uri(&quot;<a href="http://localhost:9000/api/contacts/&quot;);">http://localhost:9000/api/contacts/&quot;);</a>     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; var httpClient = new HttpClient();     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; httpClient.BaseAddress = serviceUri;     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; httpClient.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue(&quot;application/x-protobuf&quot;));</p>  <p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; var response = httpClient.GetAsync(&quot;1&quot;).Result;    <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Contact obj = (RuntimeTypeModel.Default).Deserialize(response.Content.ReadAsStreamAsync().Result, null, typeof(Contact)) as Contact;</p>  <p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; var formatters = new MediaTypeFormatterCollection() { new ProtoBufferFormatter() };    <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; var content = new ObjectContent&lt;Contact&gt;(obj, &quot;application/x-protobuf&quot;,formatters);     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; content.Headers.ContentType = new MediaTypeHeaderValue(&quot;application/x-protobuf&quot;);</p>  <p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; httpClient.PostAsync(serviceUri,content);</p>  <p>即使目前来说Google Protocol Buffers没有XML/JSON那样普及，RESTful服务使用中ProtoBuf无疑是一个非常有效的超媒体类型。祝大家龙年新春愉快，吉祥如意！</p>  <p>相关文章：</p>  <ul>   <li><a href="http://www.infoq.com/cn/news/2011/05/sl-data-exchange-protocol">软件系统开发中的数据交换协议</a> </li>    <li><a href="http://www.cnblogs.com/onlytiancai/archive/2009/07/02/protobuf_net_test.html">.net自带二进制序列化，XML序列化和ProtoBuf序列化的压缩对比</a> </li>    <li><a href="http://www.eoeandroid.com/thread-58651-1-1.html">Android上GTalk以及Push机制的XMPP数据选择使用protobuf格式而非XML</a> </li>    <li><a title="http://geekswithblogs.net/michelotti/archive/2011/07/14/leverage-t4scaffolding-for-wcf-web-api.aspx" href="http://geekswithblogs.net/michelotti/archive/2011/07/14/leverage-t4scaffolding-for-wcf-web-api.aspx">Leverage T4Scaffolding for WCF Web API</a> </li>    <li><a href="http://osmirnov.net/posts/using-protocol-buffers-on-net-platform-part-i/">using-protocol-buffers-on-net-platform-part-i</a> </li>    <li><a href="http://osmirnov.net/posts/using-protocol-buffers-on-net-platform-part-ii/">using-protocol-buffers-on-net-platform-part-ii</a> </li>    <li><a href="http://www.codeproject.com/Articles/316068/Restful-WCF-EF-POCO-UnitOfWork-Respository-MEF-1-o">Restful WCF / EF POCO / UnitOfWork / Repository / MEF : 1 of 2</a></li> </ul><img src="http://www.cnblogs.com/shanyou/aggbug/2328754.html?type=1" width="1" height="1" alt=""/><p>作者: <a href="http://www.cnblogs.com/shanyou/" target="_blank">张善友</a> 发表于 2012-01-22 11:52 <a href="http://www.cnblogs.com/shanyou/archive/2012/01/22/2328754.html" target="_blank">原文链接</a></p><p>评论: 3　<a href="http://www.cnblogs.com/shanyou/archive/2012/01/22/2328754.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/shanyou/archive/2012/01/22/2328754.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/129385/" target="_blank">Jon Rubinstein 暂别科技舞台：再见，HP</a><span style="color:gray">(2012-01-28 21:36)</span><br/>· <a href="http://news.cnblogs.com/n/129384/" target="_blank">塞班3设备更新换代 诺基亚Belle出货</a><span style="color:gray">(2012-01-28 21:34)</span><br/>· <a href="http://news.cnblogs.com/n/129383/" target="_blank">推土机Windows 7补丁权威测试</a><span style="color:gray">(2012-01-28 19:24)</span><br/>· <a href="http://news.cnblogs.com/n/129382/" target="_blank">诺基亚在印度：品牌优势，渠道特点，跟中国的对比</a><span style="color:gray">(2012-01-28 19:21)</span><br/>· <a href="http://news.cnblogs.com/n/129381/" target="_blank">世界最早的计算机密码和黑客</a><span style="color:gray">(2012-01-28 19:20)</span><br/></p><p>编辑推荐：<a href="http://kb.cnblogs.com/page/120592/" target="_blank">Ruby之父松本行弘的编程人生</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">我的园子</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://q.cnblogs.com/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>DataTable search keyword</title><link>http://www.cnblogs.com/geovindu/archive/2012/01/14/2322419.html</link><dc:creator>®Geovin Du Dream Park™</dc:creator><author>®Geovin Du Dream Park™</author><pubDate>Sat, 14 Jan 2012 07:40:00 GMT</pubDate><guid>http://www.cnblogs.com/geovindu/archive/2012/01/14/2322419.html</guid><description><![CDATA[<p><div class="cnblogs_code">
<pre><span style="color: #008080;">  1</span> <span style="color: #0000ff;">using</span> System;<br /><span style="color: #008080;">  2</span> <span style="color: #0000ff;">using</span> System.Collections.Generic;<br /><span style="color: #008080;">  3</span> <span style="color: #0000ff;">using</span> System.ComponentModel;<br /><span style="color: #008080;">  4</span> <span style="color: #0000ff;">using</span> System.Data;<br /><span style="color: #008080;">  5</span> <span style="color: #0000ff;">using</span> System.Drawing;<br /><span style="color: #008080;">  6</span> <span style="color: #0000ff;">using</span> System.Linq;<br /><span style="color: #008080;">  7</span> <span style="color: #0000ff;">using</span> System.Text;<br /><span style="color: #008080;">  8</span> <span style="color: #0000ff;">using</span> System.Windows.Forms;<br /><span style="color: #008080;">  9</span> <span style="color: #0000ff;">using</span> System.Security;<br /><span style="color: #008080;"> 10</span> <span style="color: #0000ff;">using</span> System.Reflection; <br /><span style="color: #008080;"> 11</span> <span style="color: #0000ff;">using</span> System.Security.Permissions;<br /><span style="color: #008080;"> 12</span> <br /><span style="color: #008080;"> 13</span> [assembly: AssemblyKeyFile(<span style="color: #800000;">"</span><span style="color: #800000;">keys.snk</span><span style="color: #800000;">"</span>)]<br /><span style="color: #008080;"> 14</span> [assembly: AssemblyVersion(<span style="color: #800000;">"</span><span style="color: #800000;">1.1.1.0</span><span style="color: #800000;">"</span>)]<br /><span style="color: #008080;"> 15</span> <span style="color: #0000ff;">namespace</span> FindDataTableDeme<br /><span style="color: #008080;"> 16</span> {<br /><span style="color: #008080;"> 17</span>     [PublisherIdentityPermission(SecurityAction.InheritanceDemand,CertFile=<span style="color: #800000;">"</span><span style="color: #800000;">Certificate.cer</span><span style="color: #800000;">"</span>)]<br /><span style="color: #008080;"> 18</span>     <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">partial</span> <span style="color: #0000ff;">class</span> Form1 : Form<br /><span style="color: #008080;"> 19</span>     {<br /><span style="color: #008080;"> 20</span>         DataSet ds = <span style="color: #0000ff;">new</span> DataSet();<br /><span style="color: #008080;"> 21</span>         <span style="color: #0000ff;">private</span> DataRow rowFound;<br /><span style="color: #008080;"> 22</span>         <span style="color: #008000;">//</span><span style="color: #008000;">System.Runtime.Serialization.ISerializable<br /></span><span style="color: #008080;"> 23</span> <span style="color: #008000;">//</span><span style="color: #008000;">System.SerializableAttribute</span><span style="color: #008000;"><br /></span><span style="color: #008080;"> 24</span> <br /><span style="color: #008080;"> 25</span>         <span style="color: #808080;">///</span> <span style="color: #808080;">&lt;summary&gt;</span><span style="color: #008000;"><br /></span><span style="color: #008080;"> 26</span> <span style="color: #808080;">///</span><span style="color: #008000;"> <br /></span><span style="color: #008080;"> 27</span> <span style="color: #808080;">///</span> <span style="color: #808080;">&lt;/summary&gt;</span><span style="color: #808080;"><br /></span><span style="color: #008080;"> 28</span>         <span style="color: #0000ff;">public</span> Form1()<br /><span style="color: #008080;"> 29</span>         {<br /><span style="color: #008080;"> 30</span>             InitializeComponent();<br /><span style="color: #008080;"> 31</span>         }<br /><span style="color: #008080;"> 32</span>         <span style="color: #808080;">///</span> <span style="color: #808080;">&lt;summary&gt;</span><span style="color: #008000;"><br /></span><span style="color: #008080;"> 33</span> <span style="color: #808080;">///</span><span style="color: #008000;"> 塗聚文  締友計算機信息技術有限公司 Geovin Du<br /></span><span style="color: #008080;"> 34</span> <span style="color: #808080;">///</span> <span style="color: #808080;">&lt;/summary&gt;</span><span style="color: #008000;"><br /></span><span style="color: #008080;"> 35</span> <span style="color: #808080;">///</span> <span style="color: #808080;">&lt;param name="sender"&gt;&lt;/param&gt;</span><span style="color: #008000;"><br /></span><span style="color: #008080;"> 36</span> <span style="color: #808080;">///</span> <span style="color: #808080;">&lt;param name="e"&gt;&lt;/param&gt;</span><span style="color: #808080;"><br /></span><span style="color: #008080;"> 37</span>         <span style="color: #0000ff;">private</span> <span style="color: #0000ff;">void</span> Form1_Load(<span style="color: #0000ff;">object</span> sender, EventArgs e)<br /><span style="color: #008080;"> 38</span>         {<br /><span style="color: #008080;"> 39</span>             <span style="color: #008000;">//</span><span style="color: #008000;">DataTable dt = findDatatble();<br /></span><span style="color: #008080;"> 40</span> <span style="color: #008000;">//</span><span style="color: #008000;">DataRow foundRow =dt.DefaultView.Find(this.textBox1.Text.Trim());</span><span style="color: #008000;"><br /></span><span style="color: #008080;"> 41</span>             findDatatble();<br /><span style="color: #008080;"> 42</span>         }<br /><span style="color: #008080;"> 43</span> <br /><span style="color: #008080;"> 44</span>         <span style="color: #0000ff;">private</span> <span style="color: #0000ff;">void</span> findDatatble()<br /><span style="color: #008080;"> 45</span>         {<br /><span style="color: #008080;"> 46</span> <br /><span style="color: #008080;"> 47</span>             DataTable table1 = <span style="color: #0000ff;">new</span> DataTable(<span style="color: #800000;">"</span><span style="color: #800000;">table one</span><span style="color: #800000;">"</span>);<br /><span style="color: #008080;"> 48</span>             DataTable table2 = <span style="color: #0000ff;">new</span> DataTable(<span style="color: #800000;">"</span><span style="color: #800000;">table two</span><span style="color: #800000;">"</span>);<br /><span style="color: #008080;"> 49</span> <br /><span style="color: #008080;"> 50</span>             <span style="color: #008000;">//</span><span style="color: #008000;">creating columns for the tables:</span><span style="color: #008000;"><br /></span><span style="color: #008080;"> 51</span>             table1.Columns.Add(<span style="color: #0000ff;">new</span> DataColumn(<span style="color: #800000;">"</span><span style="color: #800000;">id</span><span style="color: #800000;">"</span>, <span style="color: #0000ff;">typeof</span>(<span style="color: #0000ff;">int</span>)));<br /><span style="color: #008080;"> 52</span>             table1.Columns.Add(<span style="color: #0000ff;">new</span> DataColumn(<span style="color: #800000;">"</span><span style="color: #800000;">someText</span><span style="color: #800000;">"</span>, <span style="color: #0000ff;">typeof</span>(<span style="color: #0000ff;">string</span>)));<br /><span style="color: #008080;"> 53</span> <br /><span style="color: #008080;"> 54</span>             table2.Columns.Add(<span style="color: #0000ff;">new</span> DataColumn(<span style="color: #800000;">"</span><span style="color: #800000;">id2</span><span style="color: #800000;">"</span>, <span style="color: #0000ff;">typeof</span>(<span style="color: #0000ff;">int</span>)));<br /><span style="color: #008080;"> 55</span>             table2.Columns.Add(<span style="color: #0000ff;">new</span> DataColumn(<span style="color: #800000;">"</span><span style="color: #800000;">someOtherText</span><span style="color: #800000;">"</span>, <span style="color: #0000ff;">typeof</span>(<span style="color: #0000ff;">string</span>)));<br /><span style="color: #008080;"> 56</span> <br /><span style="color: #008080;"> 57</span>             <span style="color: #008000;">//</span><span style="color: #008000;">populating tables, one by one and add them to dataSet:<br /></span><span style="color: #008080;"> 58</span> <span style="color: #008000;">//</span><span style="color: #008000;">populating table 1:</span><span style="color: #008000;"><br /></span><span style="color: #008080;"> 59</span>             DataRow dr;<br /><span style="color: #008080;"> 60</span>             <span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">int</span> i = <span style="color: #800080;">1</span>; i &lt; <span style="color: #800080;">13</span>; i++)<br /><span style="color: #008080;"> 61</span>             {<br /><span style="color: #008080;"> 62</span>                 dr = table1.NewRow();<br /><span style="color: #008080;"> 63</span>                 dr[<span style="color: #800000;">"</span><span style="color: #800000;">id</span><span style="color: #800000;">"</span>] = i;<br /><span style="color: #008080;"> 64</span>                 dr[<span style="color: #800000;">"</span><span style="color: #800000;">someText</span><span style="color: #800000;">"</span>] = <span style="color: #800000;">"</span><span style="color: #800000;">text with number </span><span style="color: #800000;">"</span> + i.ToString();<br /><span style="color: #008080;"> 65</span>                 table1.Rows.Add(dr);<br /><span style="color: #008080;"> 66</span>             }<br /><span style="color: #008080;"> 67</span>             dr = table1.NewRow();<br /><span style="color: #008080;"> 68</span>             dr[<span style="color: #800000;">"</span><span style="color: #800000;">id</span><span style="color: #800000;">"</span>] = <span style="color: #800080;">14</span>;<br /><span style="color: #008080;"> 69</span>             dr[<span style="color: #800000;">"</span><span style="color: #800000;">someText</span><span style="color: #800000;">"</span>] = <span style="color: #800000;">"</span><span style="color: #800000;">涂聚文</span><span style="color: #800000;">"</span>;<br /><span style="color: #008080;"> 70</span>             table1.Rows.Add(dr);<br /><span style="color: #008080;"> 71</span>             <span style="color: #008000;">//</span><span style="color: #008000;">populating table 2:</span><span style="color: #008000;"><br /></span><span style="color: #008080;"> 72</span>             <span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">int</span> i = <span style="color: #800080;">101</span>; i &lt; <span style="color: #800080;">113</span>; i++)<br /><span style="color: #008080;"> 73</span>             {<br /><span style="color: #008080;"> 74</span>                 dr = table2.NewRow();<br /><span style="color: #008080;"> 75</span>                 dr[<span style="color: #800000;">"</span><span style="color: #800000;">id2</span><span style="color: #800000;">"</span>] = i;<br /><span style="color: #008080;"> 76</span>                 dr[<span style="color: #800000;">"</span><span style="color: #800000;">someOtherText</span><span style="color: #800000;">"</span>] = <span style="color: #800000;">"</span><span style="color: #800000;">other text with number </span><span style="color: #800000;">"</span> + i.ToString();<br /><span style="color: #008080;"> 77</span>                 table2.Rows.Add(dr);<br /><span style="color: #008080;"> 78</span>             }<br /><span style="color: #008080;"> 79</span>             dr = table2.NewRow();<br /><span style="color: #008080;"> 80</span>             dr[<span style="color: #800000;">"</span><span style="color: #800000;">id2</span><span style="color: #800000;">"</span>] = <span style="color: #800080;">114</span>;<br /><span style="color: #008080;"> 81</span>             dr[<span style="color: #800000;">"</span><span style="color: #800000;">someOtherText</span><span style="color: #800000;">"</span>] = <span style="color: #800000;">"</span><span style="color: #800000;">涂聚文</span><span style="color: #800000;">"</span>;<br /><span style="color: #008080;"> 82</span>             table2.Rows.Add(dr);<br /><span style="color: #008080;"> 83</span>             <span style="color: #008000;">//</span><span style="color: #008000;">adding both tables to dataSet:</span><span style="color: #008000;"><br /></span><span style="color: #008080;"> 84</span>             ds.Tables.AddRange(<span style="color: #0000ff;">new</span> DataTable[] { table1, table2 });<br /><span style="color: #008080;"> 85</span>             <span style="color: #008000;">//</span><span style="color: #008000;">you could add them seperately, like:<br /></span><span style="color: #008080;"> 86</span> <span style="color: #008000;">//</span><span style="color: #008000;">ds.Tables.Add(table1);<br /></span><span style="color: #008080;"> 87</span> <span style="color: #008000;">//</span><span style="color: #008000;">ds.Tables.Add(table2);<br /></span><span style="color: #008080;"> 88</span> <span style="color: #008000;">            <br /></span><span style="color: #008080;"> 89</span> <span style="color: #008000;">            <br /></span><span style="color: #008080;"> 90</span> <span style="color: #008000;">//</span><span style="color: #008000;">Now lets loop through the dataSet and write the results out (int messageBox):</span><span style="color: #008000;"><br /></span><span style="color: #008080;"> 91</span>             <span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">int</span> i = <span style="color: #800080;">0</span>; i &lt; ds.Tables.Count; i++)      <span style="color: #008000;">//</span><span style="color: #008000;">LOOP THROUGH TABLES OF DATASET</span><span style="color: #008000;"><br /></span><span style="color: #008080;"> 92</span>             {<br /><span style="color: #008080;"> 93</span>                 <span style="color: #0000ff;">string</span> text = <span style="color: #0000ff;">null</span>;<br /><span style="color: #008080;"> 94</span>                 <span style="color: #0000ff;">foreach</span> (DataRow dr1 <span style="color: #0000ff;">in</span> ds.Tables[i].Rows) <span style="color: #008000;">//</span><span style="color: #008000;">LOOP TRGOUGH THE ROWS OF &lt;strong class="highlight"&gt;DATATABLE&lt;/strong&gt;</span><span style="color: #008000;"><br /></span><span style="color: #008080;"> 95</span>                 {<br /><span style="color: #008080;"> 96</span>                     <span style="color: #0000ff;">string</span> a = dr1[<span style="color: #800080;">0</span>].ToString();<br /><span style="color: #008080;"> 97</span>                     <span style="color: #0000ff;">string</span> b = dr1[<span style="color: #800080;">1</span>].ToString();<br /><span style="color: #008080;"> 98</span>                     text += a + <span style="color: #800000;">"</span><span style="color: #800000;">. </span><span style="color: #800000;">"</span> + b + Environment.NewLine;<br /><span style="color: #008080;"> 99</span>                 }<br /><span style="color: #008080;">100</span>                <span style="color: #008000;">//</span><span style="color: #008000;"> MessageBox.Show("In dataSet is dataTable of index [" + i + "] with values:\n" + text);</span><span style="color: #008000;"><br /></span><span style="color: #008080;">101</span>             }<br /><span style="color: #008080;">102</span>             ds.Tables[<span style="color: #800080;">0</span>].DefaultView.Sort = <span style="color: #800000;">"</span><span style="color: #800000;">id</span><span style="color: #800000;">"</span>;<br /><span style="color: #008080;">103</span>             <span style="color: #008000;">//</span><span style="color: #008000;"> Set Primary Key and Sort Order</span><span style="color: #008000;"><br /></span><span style="color: #008080;">104</span>             DataColumn[] dcolPk = <span style="color: #0000ff;">new</span> DataColumn[<span style="color: #800080;">1</span>];<br /><span style="color: #008080;">105</span>             dcolPk[<span style="color: #800080;">0</span>] = ds.Tables[<span style="color: #800080;">0</span>].Columns[<span style="color: #800000;">"</span><span style="color: #800000;">someText</span><span style="color: #800000;">"</span>];<br /><span style="color: #008080;">106</span>             ds.Tables[<span style="color: #800080;">0</span>].PrimaryKey = dcolPk;<br /><span style="color: #008080;">107</span> <br /><span style="color: #008080;">108</span>             dataGridView1.DataSource = ds.Tables[<span style="color: #800080;">0</span>].DefaultView;<br /><span style="color: #008080;">109</span>             <br /><span style="color: #008080;">110</span>         }<br /><span style="color: #008080;">111</span>         <span style="color: #808080;">///</span> <span style="color: #808080;">&lt;summary&gt;</span><span style="color: #008000;"><br /></span><span style="color: #008080;">112</span> <span style="color: #808080;">///</span><span style="color: #008000;"> <br /></span><span style="color: #008080;">113</span> <span style="color: #808080;">///</span> <span style="color: #808080;">&lt;/summary&gt;</span><span style="color: #008000;"><br /></span><span style="color: #008080;">114</span> <span style="color: #808080;">///</span> <span style="color: #808080;">&lt;param name="sender"&gt;&lt;/param&gt;</span><span style="color: #008000;"><br /></span><span style="color: #008080;">115</span> <span style="color: #808080;">///</span> <span style="color: #808080;">&lt;param name="e"&gt;&lt;/param&gt;</span><span style="color: #808080;"><br /></span><span style="color: #008080;">116</span>         <span style="color: #0000ff;">private</span> <span style="color: #0000ff;">void</span> button1_Click(<span style="color: #0000ff;">object</span> sender, EventArgs e)<br /><span style="color: #008080;">117</span>         {<br /><span style="color: #008080;">118</span>             <span style="color: #0000ff;">try</span><br /><span style="color: #008080;">119</span>             {<br /><span style="color: #008080;">120</span>                 <span style="color: #0000ff;">int</span> intRow;<br /><span style="color: #008080;">121</span>                 <span style="color: #0000ff;">object</span> s = textBox1.Text.Trim();<br /><span style="color: #008080;">122</span>                 <span style="color: #008000;">//</span><span style="color: #008000;"> At least one row matches primary key</span><span style="color: #008000;"><br /></span><span style="color: #008080;">123</span>                 rowFound = ds.Tables[<span style="color: #800080;">0</span>].Rows.Find(s); <span style="color: #008000;">//</span><span style="color: #008000;">所搜索的内容，也是设定的主键</span><span style="color: #008000;"><br /></span><span style="color: #008080;">124</span>                 <span style="color: #0000ff;">if</span> (rowFound != <span style="color: #0000ff;">null</span>)<br /><span style="color: #008080;">125</span>                 {<br /><span style="color: #008080;">126</span>                     MessageBox.Show(rowFound[<span style="color: #800080;">0</span>].ToString()+<span style="color: #800000;">"</span><span style="color: #800000;">,</span><span style="color: #800000;">"</span>+rowFound[<span style="color: #800080;">1</span>].ToString());<br /><span style="color: #008080;">127</span>                 }<br /><span style="color: #008080;">128</span>                 <span style="color: #0000ff;">else</span><br /><span style="color: #008080;">129</span>                 {<br /><span style="color: #008080;">130</span>                     MessageBox.Show(<span style="color: #800000;">"</span><span style="color: #800000;">A row with the primary key of </span><span style="color: #800000;">"</span> + s + <span style="color: #800000;">"</span><span style="color: #800000;"> could not be found</span><span style="color: #800000;">"</span>);<br /><span style="color: #008080;">131</span>                 }<br /><span style="color: #008080;">132</span>                 DataRow[] foundRows;<br /><span style="color: #008080;">133</span>                 foundRows = ds.Tables[<span style="color: #800080;">0</span>].Select(<span style="color: #800000;">"</span><span style="color: #800000;">someText Like '涂%'</span><span style="color: #800000;">"</span>);<br /><span style="color: #008080;">134</span>                 <span style="color: #0000ff;">if</span> (foundRows != <span style="color: #0000ff;">null</span>)<br /><span style="color: #008080;">135</span>                 {<br /><span style="color: #008080;">136</span>                     MessageBox.Show(foundRows[<span style="color: #800080;">0</span>].ToString());<br /><span style="color: #008080;">137</span>                 }<br /><span style="color: #008080;">138</span> <br /><span style="color: #008080;">139</span>                 <span style="color: #808080;">///</span><span style="color: #008000;">/ Finds the row specified in txtFindArg</span><span style="color: #808080;"><br /></span><span style="color: #008080;">140</span>                 <span style="color: #008000;">//</span><span style="color: #008000;">intRow = ds.Tables[0].DefaultView.Find(s);</span><span style="color: #008000;"><br /></span><span style="color: #008080;">141</span>                 <span style="color: #808080;">///</span><span style="color: #008000;">/Debug.WriteLine(intRow);</span><span style="color: #808080;"><br /></span><span style="color: #008080;">142</span>                 <span style="color: #008000;">//</span><span style="color: #008000;">if (intRow == -1)<br /></span><span style="color: #008080;">143</span> <span style="color: #008000;">//</span><span style="color: #008000;">{<br /></span><span style="color: #008080;">144</span> <span style="color: #008000;">//</span><span style="color: #008000;">    MessageBox.Show("No PK matches " + textBox1.Text);<br /></span><span style="color: #008080;">145</span> <span style="color: #008000;">//</span><span style="color: #008000;">}<br /></span><span style="color: #008080;">146</span> <span style="color: #008000;">//</span><span style="color: #008000;">else<br /></span><span style="color: #008080;">147</span> <span style="color: #008000;">//</span><span style="color: #008000;">{<br /></span><span style="color: #008080;">148</span> <span style="color: #008000;">//</span><span style="color: #008000;">//</span><span style="color: #008000;"> Jump to the Row and select it<br /></span><span style="color: #008080;">149</span> <span style="color: #008000;">//</span><span style="color: #008000;">//</span><span style="color: #008000;">dataGridView1.CurrentRow.Index = intRow;  </span><span style="color: #008000;">//</span><span style="color: #008000;">CurrentRowIndex<br /></span><span style="color: #008080;">150</span> <span style="color: #008000;">//</span><span style="color: #008000;">    dataGridView1.Rows[intRow].Selected=true;<br /></span><span style="color: #008080;">151</span> <span style="color: #008000;">//</span><span style="color: #008000;">}</span><span style="color: #008000;"><br /></span><span style="color: #008080;">152</span>             }<br /><span style="color: #008080;">153</span>             <span style="color: #0000ff;">catch</span> (Exception ex)<br /><span style="color: #008080;">154</span>             {<br /><span style="color: #008080;">155</span>                 MessageBox.Show(ex.ToString());<br /><span style="color: #008080;">156</span>             }<br /><span style="color: #008080;">157</span> <br /><span style="color: #008080;">158</span>         }<br /><span style="color: #008080;">159</span> <br /><span style="color: #008080;">160</span>         <span style="color: #0000ff;">private</span> <span style="color: #0000ff;">void</span> s()<br /><span style="color: #008080;">161</span>         {<br /><span style="color: #008080;">162</span>                       <br /><span style="color: #008080;">163</span>             <span style="color: #008000;">//</span><span style="color: #008000;">create a datatable object which will host the two column: notebookID, notebook producer </span><span style="color: #008000;"><br /></span><span style="color: #008080;">164</span>             DataTable o_aTable = <span style="color: #0000ff;">new</span> DataTable(<span style="color: #800000;">"</span><span style="color: #800000;">Notebooks</span><span style="color: #800000;">"</span>);<br /><span style="color: #008080;">165</span>             <br /><span style="color: #008080;">166</span> <br /><span style="color: #008080;">167</span>             <span style="color: #008000;">//</span><span style="color: #008000;">creating a datacolumn <br /></span><span style="color: #008080;">168</span> <span style="color: #008000;">//</span><span style="color: #008000;">definition and initilization of column</span><span style="color: #008000;"><br /></span><span style="color: #008080;">169</span>                 DataColumn o_aColumn = <span style="color: #0000ff;">new</span> DataColumn();<br /><span style="color: #008080;">170</span>                 <span style="color: #008000;">//</span><span style="color: #008000;">defining column properties<br /></span><span style="color: #008080;">171</span> <span style="color: #008000;">//</span><span style="color: #008000;">caption </span><span style="color: #008000;"><br /></span><span style="color: #008080;">172</span>                     o_aColumn.Caption = <span style="color: #800000;">"</span><span style="color: #800000;">Notebook Producers</span><span style="color: #800000;">"</span>;<br /><span style="color: #008080;">173</span>                     <span style="color: #008000;">//</span><span style="color: #008000;">type of column</span><span style="color: #008000;"><br /></span><span style="color: #008080;">174</span>                     o_aColumn.DataType = System.Type.GetType(<span style="color: #800000;">"</span><span style="color: #800000;">System.String</span><span style="color: #800000;">"</span>);<br /><span style="color: #008080;">175</span>                     <span style="color: #008000;">//</span><span style="color: #008000;">access name of column </span><span style="color: #008000;"><br /></span><span style="color: #008080;">176</span>                     o_aColumn.ColumnName = <span style="color: #800000;">"</span><span style="color: #800000;">Producer</span><span style="color: #800000;">"</span>;<br /><span style="color: #008080;">177</span>                     <span style="color: #008000;">//</span><span style="color: #008000;">default value</span><span style="color: #008000;"><br /></span><span style="color: #008080;">178</span>                     o_aColumn.DefaultValue = <span style="color: #800000;">"</span><span style="color: #800000;">unknown producer</span><span style="color: #800000;">"</span>;<br /><span style="color: #008080;">179</span> <br /><span style="color: #008080;">180</span>             <span style="color: #008000;">//</span><span style="color: #008000;">add column to the table</span><span style="color: #008000;"><br /></span><span style="color: #008080;">181</span>             o_aTable.Columns.Add(o_aColumn);<br /><span style="color: #008080;">182</span> <br /><span style="color: #008080;">183</span>                 <span style="color: #008000;">//</span><span style="color: #008000;">initialize a new instance of data column for creating a new column</span><span style="color: #008000;"><br /></span><span style="color: #008080;">184</span>                 o_aColumn = <span style="color: #0000ff;">new</span> DataColumn();<br /><span style="color: #008080;">185</span>                 <span style="color: #008000;">//</span><span style="color: #008000;">defining column properties<br /></span><span style="color: #008080;">186</span> <span style="color: #008000;">//</span><span style="color: #008000;">caption </span><span style="color: #008000;"><br /></span><span style="color: #008080;">187</span>                     o_aColumn.Caption = <span style="color: #800000;">"</span><span style="color: #800000;">Notebook Producer ID</span><span style="color: #800000;">"</span>;<br /><span style="color: #008080;">188</span>                     <span style="color: #008000;">//</span><span style="color: #008000;">type of column</span><span style="color: #008000;"><br /></span><span style="color: #008080;">189</span>                     o_aColumn.DataType = System.Type.GetType(<span style="color: #800000;">"</span><span style="color: #800000;">System.Int32</span><span style="color: #800000;">"</span>);<br /><span style="color: #008080;">190</span>                     <span style="color: #008000;">//</span><span style="color: #008000;">access name of column </span><span style="color: #008000;"><br /></span><span style="color: #008080;">191</span>                     o_aColumn.ColumnName = <span style="color: #800000;">"</span><span style="color: #800000;">ProducerID</span><span style="color: #800000;">"</span>;<br /><span style="color: #008080;">192</span>                     <span style="color: #008000;">//</span><span style="color: #008000;">default value</span><span style="color: #008000;"><br /></span><span style="color: #008080;">193</span>                     o_aColumn.DefaultValue = <span style="color: #800080;">0000</span>;<br /><span style="color: #008080;">194</span> <br /><span style="color: #008080;">195</span>             <span style="color: #008000;">//</span><span style="color: #008000;">add new column to the table </span><span style="color: #008000;"><br /></span><span style="color: #008080;">196</span>             o_aTable.Columns.Add(o_aColumn);<br /><span style="color: #008080;">197</span> <br /><span style="color: #008080;">198</span>             <span style="color: #008000;">//</span><span style="color: #008000;">create a primary key column to use search<br /></span><span style="color: #008080;">199</span> <span style="color: #008000;">//</span><span style="color: #008000;">definition and initial.</span><span style="color: #008000;"><br /></span><span style="color: #008080;">200</span>                 DataColumn[] o_aPrimaryKeyColumn = <span style="color: #0000ff;">new</span> DataColumn[<span style="color: #800080;">1</span>];<br /><span style="color: #008080;">201</span>                 <span style="color: #008000;">//</span><span style="color: #008000;">assigning notebookID column of created table to this column: it will serve as primary key column</span><span style="color: #008000;"><br /></span><span style="color: #008080;">202</span>                 o_aPrimaryKeyColumn[<span style="color: #800080;">0</span>] = o_aTable.Columns[<span style="color: #800000;">"</span><span style="color: #800000;">ProducerID</span><span style="color: #800000;">"</span>];<br /><span style="color: #008080;">203</span>                 <span style="color: #008000;">//</span><span style="color: #008000;">mapping primary key column of table to the created primary key holder column               </span><span style="color: #008000;"><br /></span><span style="color: #008080;">204</span>             o_aTable.PrimaryKey = o_aPrimaryKeyColumn;<br /><span style="color: #008080;">205</span>             <br /><span style="color: #008080;">206</span>             <span style="color: #008000;">//</span><span style="color: #008000;">adding rows-records to column<br /></span><span style="color: #008080;">207</span> <span style="color: #008000;">//</span><span style="color: #008000;">create a datarow object which serves as a record entry</span><span style="color: #008000;"><br /></span><span style="color: #008080;">208</span>                 DataRow o_aRow;<br /><span style="color: #008080;">209</span> <br /><span style="color: #008080;">210</span>                 <span style="color: #008000;">//</span><span style="color: #008000;">adding the records<br /></span><span style="color: #008080;">211</span> <span style="color: #008000;">//</span><span style="color: #008000;">add 1th record for producer HP<br /></span><span style="color: #008080;">212</span> <span style="color: #008000;">//</span><span style="color: #008000;">initialize a new row for table object</span><span style="color: #008000;"><br /></span><span style="color: #008080;">213</span>                         o_aRow = o_aTable.NewRow();<br /><span style="color: #008080;">214</span>                         <span style="color: #008000;">//</span><span style="color: #008000;">assign value of 1th column ID</span><span style="color: #008000;"><br /></span><span style="color: #008080;">215</span>                         o_aRow[<span style="color: #800000;">"</span><span style="color: #800000;">ProducerID</span><span style="color: #800000;">"</span>] = <span style="color: #800080;">1</span>;<br /><span style="color: #008080;">216</span>                         <span style="color: #008000;">//</span><span style="color: #008000;">assign value of 2th column producer</span><span style="color: #008000;"><br /></span><span style="color: #008080;">217</span>                         o_aRow[<span style="color: #800000;">"</span><span style="color: #800000;">Producer</span><span style="color: #800000;">"</span>] = <span style="color: #800000;">"</span><span style="color: #800000;">HP</span><span style="color: #800000;">"</span>;<br /><span style="color: #008080;">218</span>                         <span style="color: #008000;">//</span><span style="color: #008000;">add 1th row to the table</span><span style="color: #008000;"><br /></span><span style="color: #008080;">219</span>                         o_aTable.Rows.Add(o_aRow);<br /><span style="color: #008080;">220</span> <br /><span style="color: #008080;">221</span>                     <span style="color: #008000;">//</span><span style="color: #008000;">add 2nd record for producer IBM<br /></span><span style="color: #008080;">222</span> <span style="color: #008000;">//</span><span style="color: #008000;">initialize a new row for table object</span><span style="color: #008000;"><br /></span><span style="color: #008080;">223</span>                         o_aRow = o_aTable.NewRow();<br /><span style="color: #008080;">224</span>                         <span style="color: #008000;">//</span><span style="color: #008000;">assign value of 1th column ID</span><span style="color: #008000;"><br /></span><span style="color: #008080;">225</span>                         o_aRow[<span style="color: #800000;">"</span><span style="color: #800000;">ProducerID</span><span style="color: #800000;">"</span>] = <span style="color: #800080;">2</span>;<br /><span style="color: #008080;">226</span>                         <span style="color: #008000;">//</span><span style="color: #008000;">assign value of 2th column producer</span><span style="color: #008000;"><br /></span><span style="color: #008080;">227</span>                         o_aRow[<span style="color: #800000;">"</span><span style="color: #800000;">Producer</span><span style="color: #800000;">"</span>] = <span style="color: #800000;">"</span><span style="color: #800000;">IBM</span><span style="color: #800000;">"</span>;<br /><span style="color: #008080;">228</span>                         <span style="color: #008000;">//</span><span style="color: #008000;">add 2nd row to the table</span><span style="color: #008000;"><br /></span><span style="color: #008080;">229</span>                         o_aTable.Rows.Add(o_aRow);<br /><span style="color: #008080;">230</span> <br /><span style="color: #008080;">231</span>             <span style="color: #008000;">//</span><span style="color: #008000;">display the records within table</span><span style="color: #008000;"><br /></span><span style="color: #008080;">232</span> <br /><span style="color: #008080;">233</span>             <span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">int</span> i = <span style="color: #800080;">0</span>; i &lt; o_aTable.Rows.Count;i++ )<br /><span style="color: #008080;">234</span>             {<br /><span style="color: #008080;">235</span>                 <span style="color: #008000;">//</span><span style="color: #008000;">display ID </span><span style="color: #008000;"><br /></span><span style="color: #008080;">236</span>                 Console.WriteLine(<span style="color: #800000;">"</span><span style="color: #800000;">row </span><span style="color: #800000;">"</span> + i + <span style="color: #800000;">"</span><span style="color: #800000;">: notebook ID is: </span><span style="color: #800000;">"</span> + o_aTable.Rows[i][<span style="color: #800000;">"</span><span style="color: #800000;">ProducerID</span><span style="color: #800000;">"</span>].ToString());<br /><span style="color: #008080;">237</span>                 <span style="color: #008000;">//</span><span style="color: #008000;">display producer</span><span style="color: #008000;"><br /></span><span style="color: #008080;">238</span>                 Console.WriteLine(<span style="color: #800000;">"</span><span style="color: #800000;">row </span><span style="color: #800000;">"</span> + i + <span style="color: #800000;">"</span><span style="color: #800000;">: notebook Producer is: </span><span style="color: #800000;">"</span> +  o_aTable.Rows[i][<span style="color: #800000;">"</span><span style="color: #800000;">Producer</span><span style="color: #800000;">"</span>].ToString());<br /><span style="color: #008080;">239</span> <br /><span style="color: #008080;">240</span>             }<br /><span style="color: #008080;">241</span>             <span style="color: #008000;">//</span><span style="color: #008000;">Handling row with specifying a particular primary column addressed by ID<br /></span><span style="color: #008080;">242</span> <span style="color: #008000;">//</span><span style="color: #008000;">create a row object to store found row which matches criteria ID</span><span style="color: #008000;"><br /></span><span style="color: #008080;">243</span>                 DataRow o_dRow_findedRow;<br /><span style="color: #008080;">244</span>                 <span style="color: #008000;">//</span><span style="color: #008000;">look for row with id 1</span><span style="color: #008000;"><br /></span><span style="color: #008080;">245</span>                 <span style="color: #0000ff;">if</span> ((o_dRow_findedRow = o_aTable.Rows.Find(<span style="color: #800000;">"</span><span style="color: #800000;">1</span><span style="color: #800000;">"</span>)) != <span style="color: #0000ff;">null</span>)<br /><span style="color: #008080;">246</span>                 {<br /><span style="color: #008080;">247</span> <br /><span style="color: #008080;">248</span>                     Console.WriteLine(<span style="color: #800000;">"</span><span style="color: #800000;">Primary key column of Table (in memory) is being queried for notebookID 1...</span><span style="color: #800000;">"</span>);<br /><span style="color: #008080;">249</span>                     Console.WriteLine(<span style="color: #800000;">"</span><span style="color: #800000;">A row with notebookID 1 is found.</span><span style="color: #800000;">"</span>);<br /><span style="color: #008080;">250</span>                 }<br /><span style="color: #008080;">251</span>                 <span style="color: #0000ff;">else</span><br /><span style="color: #008080;">252</span>                 { <br /><span style="color: #008080;">253</span>                     Console.WriteLine(<span style="color: #800000;">"</span><span style="color: #800000;">A record with notebookID 1 is not found.</span><span style="color: #800000;">"</span>);<br /><span style="color: #008080;">254</span>                 }<br /><span style="color: #008080;">255</span> <br /><span style="color: #008080;">256</span>          }<br /><span style="color: #008080;">257</span> <br /><span style="color: #008080;">258</span>     <br /><span style="color: #008080;">259</span>     }<br /><span style="color: #008080;">260</span> }</pre>
</div>
<p>&nbsp;</p><img src="http://www.cnblogs.com/geovindu/aggbug/2322419.html?type=1" width="1" height="1" alt=""/><p>作者: <a href="http://www.cnblogs.com/geovindu/" target="_blank">®Geovin Du Dream Park™</a> 发表于 2012-01-14 15:40 <a href="http://www.cnblogs.com/geovindu/archive/2012/01/14/2322419.html" target="_blank">原文链接</a></p><p>评论: 0　<a href="http://www.cnblogs.com/geovindu/archive/2012/01/14/2322419.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/geovindu/archive/2012/01/14/2322419.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/129385/" target="_blank">Jon Rubinstein 暂别科技舞台：再见，HP</a><span style="color:gray">(2012-01-28 21:36)</span><br/>· <a href="http://news.cnblogs.com/n/129384/" target="_blank">塞班3设备更新换代 诺基亚Belle出货</a><span style="color:gray">(2012-01-28 21:34)</span><br/>· <a href="http://news.cnblogs.com/n/129383/" target="_blank">推土机Windows 7补丁权威测试</a><span style="color:gray">(2012-01-28 19:24)</span><br/>· <a href="http://news.cnblogs.com/n/129382/" target="_blank">诺基亚在印度：品牌优势，渠道特点，跟中国的对比</a><span style="color:gray">(2012-01-28 19:21)</span><br/>· <a href="http://news.cnblogs.com/n/129381/" target="_blank">世界最早的计算机密码和黑客</a><span style="color:gray">(2012-01-28 19:20)</span><br/></p><p>编辑推荐：<a href="http://kb.cnblogs.com/page/120592/" target="_blank">Ruby之父松本行弘的编程人生</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">我的园子</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://q.cnblogs.com/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>csharp XmlTextReader read xml file</title><link>http://www.cnblogs.com/geovindu/archive/2012/01/11/2319849.html</link><dc:creator>®Geovin Du Dream Park™</dc:creator><author>®Geovin Du Dream Park™</author><pubDate>Wed, 11 Jan 2012 12:22:00 GMT</pubDate><guid>http://www.cnblogs.com/geovindu/archive/2012/01/11/2319849.html</guid><description><![CDATA[<p><p>xml file:</p>
<div class="cnblogs_Highlighter">
<pre class="brush:html;gutter:true;">&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;Root&gt;
  &lt;UserInfo&gt;
    &lt;Login Name="geovindu"&gt;
      &lt;Pass&gt;l17pi6MYm2g=&lt;/Pass&gt;
    &lt;/Login&gt;
    &lt;Login Name="涂聚文祝你龙年大悦http://www.dusystem.com/Happynewyear.html"&gt;
      &lt;Pass&gt;4IGT6o/qA4vKYzlgizWsDg==&lt;/Pass&gt;
    &lt;/Login&gt;
    &lt;Login Name="涂聚文"&gt;
      &lt;Pass&gt;ULNR7dw9V7M=&lt;/Pass&gt;
    &lt;/Login&gt;
  &lt;/UserInfo&gt;
&lt;/Root&gt;
</pre>
</div>
<p>&nbsp;</p>
<div class="cnblogs_Highlighter">
<pre class="brush:csharp;gutter:true;">            int ws = 0;

            int pi = 0;

            int dc = 0;

            int cc = 0;

            int ac = 0;

            int et = 0;

            int el = 0;

            int xd = 0;
            XmlDocument xmlConditions = new XmlDocument();
            
            string url = Server.MapPath("User.xml");
            XmlTextReader textReader = new XmlTextReader(url);
            //textReader.WhitespaceHandling = WhitespaceHandling.None;
            //xmlConditions.Load(textReader);
            //XmlNode xnodDE = xmlConditions.DocumentElement;

            //Response.Write(xnodDE.ChildNodes[0].ToString());

           // string t=ChildDisplay(xnodDE, 0);
            //Response.Write(t);
            //textReader.Close();
            string sName = "";
            while (textReader.Read())
            {
                XmlNodeType nType = textReader.NodeType;

                // If node type us a declaration

                if (nType == XmlNodeType.XmlDeclaration)
                {

                    Response.Write("Declaration:" + textReader.Name.ToString() + "&lt;br/&gt;");

                    xd = xd + 1;

                }

                // if node type is a comment

                if (nType == XmlNodeType.Comment)
                {

                    Response.Write("Comment:" + textReader.Name.ToString() + "&lt;br/&gt;");

                    cc = cc + 1;

                }

                // if node type us an attribute

                if (nType == XmlNodeType.Attribute)
                {

                    Response.Write("Attribute:" + textReader.Name.ToString() + "&lt;br/");

                    ac = ac + 1;

                }

                // if node type is an element

                if (nType == XmlNodeType.Element)
                {

                    Response.Write("Element:" + textReader.Name.ToString() + "&lt;br/&gt;");

                    el = el + 1;

                }



                // if node type is an entity\

                if (nType == XmlNodeType.Entity)
                {

                    Response.Write("Entity:" + textReader.Name.ToString() + "&lt;br/&gt;");

                    et = et + 1;

                }

                // if node type is a Process Instruction

                if (nType == XmlNodeType.Entity)
                {

                    Response.Write("Entity:" + textReader.Name.ToString() + "&lt;br/&gt;");

                    pi = pi + 1;

                }

                // if node type a document

                if (nType == XmlNodeType.DocumentType)
                {

                    Response.Write("Document:" + textReader.Name.ToString() + "&lt;br/&gt;");

                    dc = dc + 1;

                }

                // if node type is white space

                if (nType == XmlNodeType.Whitespace)
                {

                    Response.Write("WhiteSpace:" + textReader.Name.ToString() + "&lt;br/&gt;");
                    //Response.Write("name:" + xmlConditions.Attributes["Name"].ToString());
                    //Response.Write("login:" + xmlConditions.GetElementsByTagName("Login").ToString());
                    ws = ws + 1;

                }


                switch (textReader.NodeType)
                {

                    case XmlNodeType.Element:
                        sName = textReader.Name;
                        Response.Write("读取：Element:" + sName + "&lt;br/&gt;");
                        if (textReader.HasAttributes)
                        {
                            for (int i = 0; i &lt;= textReader.AttributeCount - 1; i++)
                                Response.Write("屬性： " + textReader.GetAttribute(i) + " &lt;br/&gt;");
                            Response.Write("屬性Name： " + textReader.GetAttribute("Name") + " &lt;br/&gt;");
                        }
                        if (sName == "Login")
                        {
                            Response.Write("IF屬性Name： " + textReader.GetAttribute("Name") + " &lt;br/&gt;");
                        }
                        break;
                    case XmlNodeType.Text:
                        switch (sName)
                        {
                            case "Login":
                                Response.Write("Login:"+textReader.Value+"&lt;br/&gt;");
                                if (textReader.HasAttributes)
                                {
                                    for (int i = 0; i &lt;= textReader.AttributeCount - 1; i++)
                                        Response.Write("屬性： " + textReader.GetAttribute(i) + " &lt;br/&gt;");
                                }
                                break;
                            case "Pass":
                                Response.Write("Pass:" + textReader.Value + "&lt;br/&gt;");
                                break;
                            case "UserInfo":
                                Response.Write("UserInfo:" + textReader.Value + "&lt;br/&gt;");
                                break;
                        }
                        break;
                }
               


            }

            Response.Write("Total Comments:" + cc.ToString());

            Response.Write("Total Attributes:" + ac.ToString());

            Response.Write("Total Elements:" + el.ToString());

            Response.Write("Total Entity:" + et.ToString());

            Response.Write("Total Process Instructions:" + pi.ToString());

            Response.Write("Total Declaration:" + xd.ToString());

            Response.Write("Total DocumentType:" + dc.ToString());

            Response.Write("Total WhiteSpaces:" + ws.ToString());
</pre>
</div>
<p>&nbsp;</p><img src="http://www.cnblogs.com/geovindu/aggbug/2319849.html?type=1" width="1" height="1" alt=""/><p>作者: <a href="http://www.cnblogs.com/geovindu/" target="_blank">®Geovin Du Dream Park™</a> 发表于 2012-01-11 20:22 <a href="http://www.cnblogs.com/geovindu/archive/2012/01/11/2319849.html" target="_blank">原文链接</a></p><p>评论: 0　<a href="http://www.cnblogs.com/geovindu/archive/2012/01/11/2319849.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/geovindu/archive/2012/01/11/2319849.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/129385/" target="_blank">Jon Rubinstein 暂别科技舞台：再见，HP</a><span style="color:gray">(2012-01-28 21:36)</span><br/>· <a href="http://news.cnblogs.com/n/129384/" target="_blank">塞班3设备更新换代 诺基亚Belle出货</a><span style="color:gray">(2012-01-28 21:34)</span><br/>· <a href="http://news.cnblogs.com/n/129383/" target="_blank">推土机Windows 7补丁权威测试</a><span style="color:gray">(2012-01-28 19:24)</span><br/>· <a href="http://news.cnblogs.com/n/129382/" target="_blank">诺基亚在印度：品牌优势，渠道特点，跟中国的对比</a><span style="color:gray">(2012-01-28 19:21)</span><br/>· <a href="http://news.cnblogs.com/n/129381/" target="_blank">世界最早的计算机密码和黑客</a><span style="color:gray">(2012-01-28 19:20)</span><br/></p><p>编辑推荐：<a href="http://kb.cnblogs.com/page/120592/" target="_blank">Ruby之父松本行弘的编程人生</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">我的园子</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://q.cnblogs.com/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>32和64位的CentOS 6.0下 安装 Mono 2.10.8 和Jexus 5.0</title><link>http://www.cnblogs.com/shanyou/archive/2012/01/07/2315982.html</link><dc:creator>张善友</dc:creator><author>张善友</author><pubDate>Sat, 07 Jan 2012 12:25:00 GMT</pubDate><guid>http://www.cnblogs.com/shanyou/archive/2012/01/07/2315982.html</guid><description><![CDATA[<p><p>CentOS是一个基于RHEL的Linux发行版，其目的是为了提供一套免费与自由的企业等级Linux发行版。CentOS的名称来自于「Community ENTerprise Operating System」，从名称便可以知道这是一套由社区主导、并以企业级用户为主要目标的操作系统。</p>  <p>目前CentOS是网页服务器用途的主机中最广为使用的一套Linux发行版。根据统计，目前大约有30%的Linux服务器使用CentOS。许多书籍、网站在介绍Linux的操作方式时，也会援引CentOS作为操作接口。通常CentOS都会在RHEL推出新版本之后，经过一小段时间的修改与测试之后再推出新的版本，而其版本编号大多也会跟随RHEL的版本编号，例如目前最新版本的CentOS 6，其相对应的RHEL版本便是RHEL 6。</p>  <p>Mono 2.10.8 于已发布2011年12月19 发布，Jexus 5.0 最新版本是RC3 正式版本即将发布，带来很多新特性。Jexus web server for linux 是一款基于.NET兼容环境，运行于Linux/unix操作系统之上，以支持ASP.NET为核心功能的高性能WEB服务器。</p>  <p>Jexus V5.0有如下功能特点：    <br />01、支持ASP.NET。这是Jexus的核心功能。不管是稳定性、易用性还是并发承载能力、并行处理速度，Jexus对ASP.NET的支持都是非常优秀的；     <br />02、支持PHP。Jexus自带Fast-CGI管理模块，能通过fcgi和php-fpm两种方式对php进行良好的支持；     <br />03、具备基于正则表达式的强大的URL重写功能；     <br />04、具有强劲的反向代理功能。支持多目标负载均衡，支持本地网站与远程网站无缝整合；     <br />05、拥有强大的流媒体支持能力，支持FLV/F4V视频文件拖动播放，支持微软平滑流媒体技术；     <br />06、支持“服务器推送”技术，配备了相应的服务器端、客户端开发接口，是开发现代WEB应用的利器；     <br />07、具备可控的“ASP.NET前置缓存”，能最大限度地提高ASP.NET网站的承载能力和响应速度；     <br />08、支持Https，具有SSL加密数据安全传输能力；     <br />09、具有基础而实用的入侵检测功能，能自动终止已被识别的非法请求；     <br />10、安装部署非常简便，操作使用极为简单。</p>  <p>一、 更新系统&#160;&#160; </p>  <p>yum –y update</p>  <p>二、安装Mono源码安装需要的库</p>  <p>yum -y install gcc gcc-c++ bison pkgconfig glib2-devel gettext make libpng-devel libjpeg-devel libtiff-devel libexif-devel giflib-devel libX11-devel freetype-devel fontconfig-devel&#160; cairo-devel</p>  <p>三、安装Mono需要的GDI+兼容API的库Libgdiplus</p>  <p>cd /usr/local/src/</p>  <p>wget <a href="http://download.mono-project.com/sources/libgdiplus/libgdiplus-2.10.tar.bz2">http://download.mono-project.com/sources/libgdiplus/libgdiplus-2.10.tar.bz2</a></p>  <p>tar -jxvf libgdiplus-2.10.tar.bz2</p>  <p>cd libgdiplus-2.10</p>  <p>./configure --prefix=/usr</p>  <p>make</p>  <p>make install</p>  <p>四、安装 mono </p>  <p>cd /usr/local/src/</p>  <p>wget <a href="http://download.mono-project.com/sources/mono/mono-2.10.8.tar.bz2">http://download.mono-project.com/sources/mono/mono-2.10.8.tar.bz2</a></p>  <p>tar -jxvf mono-2.10.8.tar.bz2</p>  <p>cd mono-2.10.8</p>  <p>./configure --prefix=/usr</p>  <p>make </p>  <p>make install</p>  <p>输入 mono -V 如有mono版本信息,则安装成功. </p>  <p><font color="#ff0000">如果是64位版本的CentOS，在后续安装好Jexus 5，启动的时候会发生以下错误：</font></p>  <p><font color="#ff0000">Sender: jws.exe, Sender TypeName: AppDomain      <br />Exception Source: jws, TargetSite Name: A       <br />Message is:       <br />An exception was thrown by the type initializer for Mono.Unix.Native.Stdlib       <br />StackTrace is:       <br />&#160; at A.G.A (System.String[] A) [0x00000] in &lt;filename unknown&gt;:0&#160; <br />IsTerminating: True</font></p>  <p><font color="#ff0000">建议你运行下命令ldconfig，建议大家在安装mono后，都 ldconfig一下 。（ldconfig命令的用途,主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态链接库(格式如前介绍,lib*.so*),进而创建出动态装入程序(ld.so)所需的连接和缓存文件.缓存文件默认为/etc/ld.so.cache,此文件保存已排好序的动态链接库名字列表. ）</font></p>  <p><font color="#ff0000">另外有一点也非常重要，要在编译Mono的是指定安装到/usr（./configure --prefix=/usr），如果安装到一个系统根本&quot;不了解&quot;的文件夹，仅ldconfig都不行，还要在/etc/ld.so.conf文件或/etc/ld.so.conf.d 中添加路径后再 ldconfig才行呢。</font></p>  <p>五、安装Jexus 5.0</p>  <p>1、下载：    <br />下载地址是：<a href="http://linux.j66.net/down/jexus-5.0.tar.gz">http://linux.j66.net/down/jexus-5.0.tar.gz</a></p>  <p>wget http://linux.j66.net/down/jexus-5.0.tar.gz</p>  <p>2、解压：    <br />tar -zxvf jexus-5.0.tar.gz</p>  <p>3、安装：    <br />&#160;&#160; Jexus安装非常简单，仅仅就是一个复制、粘帖和注册全局程序集的过程     <br />&#160;&#160; 注意：以下所有操作请用root身份。</p>  <p>A、升级安装：</p>  <p>&#160;&#160; 1) 转到原安装jws的文件夹，如：cd /usr/jexus/    <br />&#160;&#160; 2) 停止旧版jexus的运行：     <br />&#160;&#160;&#160;&#160;&#160; sudo /usr/jexus/&#160; jws.stop     <br />&#160;&#160; 2) 删除旧版：     <br />&#160;&#160;&#160;&#160;&#160; sudo rm *.exe     <br />&#160;&#160;&#160;&#160;&#160; sudo rm *.dll     <br />&#160;&#160; 3) 将解压文件夹中的下列文件复制到原来安装jexus的文件夹：     <br />&#160;&#160;&#160;&#160;&#160; jws.exe     <br />&#160;&#160;&#160;&#160;&#160; jwsHttpd.exe     <br />&#160;&#160;&#160;&#160;&#160; jxAspx.dll     <br />&#160;&#160;&#160;&#160;&#160; jxHost.dll     <br />&#160;&#160;&#160;&#160;&#160; jws.regsvr     <br />&#160;&#160;&#160;&#160;&#160; jws.start     <br />&#160;&#160;&#160;&#160;&#160; jws.restart     <br />&#160;&#160;&#160;&#160;&#160; jws.stop     <br />&#160;&#160; 4) 将 jws.regsvr、jws.start、jws.restart、jws.stop 设为可执行     <br />&#160;&#160; 5) 注册全局程序集（*非常重要*）     <br />&#160;&#160;&#160;&#160;&#160; 进入安装jexus目标文件夹，然后运行：     <br />&#160;&#160;&#160;&#160;&#160; sudo ./jws.regsvr</p>  <p>B、全新安装：    <br />&#160;&#160; 1) 建立jexus安装文件夹（一般为/etc/jws/），我安装到/usr/jexus/ ：     <br />&#160;&#160;&#160;&#160;&#160; sudo mkdir /usr/jexus/</p>  <p>&#160;&#160; 2) 把解压所得到的文件及文件夹全部复制或移动到 /etc/jws 这个文件夹中    <br />&#160;&#160;&#160;&#160;&#160; 如: sudo mv * /usr/jexus/</p>  <p>&#160;&#160; 3) 将 jws.regsvr、jws.start、jws.restart、jws.stop 设为可执行    <br />&#160;&#160; 4) 注册全局程序集（*非常重要*）     <br />&#160;&#160;&#160;&#160;&#160; 进入安装jexus目标文件夹（cd /usr/jexus/），然后运行：     <br />&#160;&#160;&#160;&#160;&#160; sudo ./jws.regsvr</p>  <p>六、运行测试    <br />&#160;&#160;&#160; 复制完Jexus的文件后，Jexus就可以正常工作了。     <br />&#160;&#160;&#160; 所以，如果你的系统只要mono已经成功安装，jexus就可以直接使用，甚至连进一步的配置也完全不需要。</p>  <p>&#160;&#160;&#160; 如果是升级安装，你只需要用jws.start启动JWS，Jexus就可以正常工作了，如果不能正常工作，常常是新版本的配置方式可能有变，你可以查查jws.conf等配置文件。</p>  <p>&#160;&#160;&#160; 强调：如果你服务器安装有其它的WEB服务器，而且该服务正在运行，请停止它，以免造成端口冲突而造成Jexus无法启动。</p>  <p>&#160;&#160;&#160; 如果是全新安装，请首先建立一个默认的网站文件夹:/var/www/default    <br />&#160;&#160;&#160; 然后在Jexus工作文件夹(/usr/jexus/)中执行jws.start命令(需要root身份)，启动jexus。     <br />&#160;&#160;&#160; 1、用cat log/jws.log,看看jws日志文件有没有什么出错的提示。     <br />&#160;&#160;&#160; 2、如果没有错误提示，请访问一下这台服务器，看看是否有jexus的欢迎页，比如访问 <a href="http://服务器IP地址/">http://服务器IP地址/</a>info: </p>  <p><a href="http://images.cnblogs.com/cnblogs_com/shanyou/201201/201201072044416971.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/shanyou/201201/201201072044481609.png" width="680" height="414" /></a>&#160;&#160; <br />&#160;&#160;&#160; 3、如果看到欢迎页了，你可以在/var/www/default/文件夹中放入网站内容或一个简单的首页文件，再次访问者，你就可以看到你自己的网站内容了。</p>  <p>七、配置，具体参考Jexus 自带Readme文件</p>  <p>参考：</p>  <p>&#160;<a href="http://www.netadmin.com.tw/article_content.aspx?sn=1108100007">伺服器安裝第一首選 CentOS 6帶來寧靜革命</a></p>  <p>&#160;<a href="http://www.cnblogs.com/shanyou/archive/2011/01/23/Jexus.html">推荐一个在Linux/Unix上架设ASP.NET的 WEB服务器—Jexus</a></p>  <p>&#160;<a href="http://linux.j66.net/bbsfile-2962">安装mono、Jexus的要点</a></p><img src="http://www.cnblogs.com/shanyou/aggbug/2315982.html?type=1" width="1" height="1" alt=""/><p>作者: <a href="http://www.cnblogs.com/shanyou/" target="_blank">张善友</a> 发表于 2012-01-07 20:25 <a href="http://www.cnblogs.com/shanyou/archive/2012/01/07/2315982.html" target="_blank">原文链接</a></p><p>评论: 10　<a href="http://www.cnblogs.com/shanyou/archive/2012/01/07/2315982.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/shanyou/archive/2012/01/07/2315982.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/129385/" target="_blank">Jon Rubinstein 暂别科技舞台：再见，HP</a><span style="color:gray">(2012-01-28 21:36)</span><br/>· <a href="http://news.cnblogs.com/n/129384/" target="_blank">塞班3设备更新换代 诺基亚Belle出货</a><span style="color:gray">(2012-01-28 21:34)</span><br/>· <a href="http://news.cnblogs.com/n/129383/" target="_blank">推土机Windows 7补丁权威测试</a><span style="color:gray">(2012-01-28 19:24)</span><br/>· <a href="http://news.cnblogs.com/n/129382/" target="_blank">诺基亚在印度：品牌优势，渠道特点，跟中国的对比</a><span style="color:gray">(2012-01-28 19:21)</span><br/>· <a href="http://news.cnblogs.com/n/129381/" target="_blank">世界最早的计算机密码和黑客</a><span style="color:gray">(2012-01-28 19:20)</span><br/></p><p>编辑推荐：<a href="http://kb.cnblogs.com/page/120592/" target="_blank">Ruby之父松本行弘的编程人生</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">我的园子</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://q.cnblogs.com/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>sql server 2000/2005 script</title><link>http://www.cnblogs.com/geovindu/archive/2012/01/05/2313149.html</link><dc:creator>®Geovin Du Dream Park™</dc:creator><author>®Geovin Du Dream Park™</author><pubDate>Thu, 05 Jan 2012 06:55:00 GMT</pubDate><guid>http://www.cnblogs.com/geovindu/archive/2012/01/05/2313149.html</guid><description><![CDATA[<p><div class="cnblogs_Highlighter">
<pre class="brush:sql;gutter:true;">---2005附加數據庫
---ATTACH DATABASE TEMPLATE
---涂聚文 2012 元旦
exec sp_attach_db 'Asset5','D:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\Asset5.mdf','D:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\Asset5_log.ldf'
GO
---列出存儲過程
exec sp_stored_procedures
GO
--系統視圖
select * from sys.objects

---列出存儲過程
select * from sys.objects WHERE TYPE='P'
select [name] from sysobjects where xtype='P' order by [name]
GO
---列出所有表
select * from sys.objects WHERE TYPE='U' order by [name]
select [name] from sysobjects where xtype='U' order by [name]

GO
--列出視圖
select * from sys.objects WHERE TYPE='V' order by [name]
select [name] from sysobjects where xtype='V' order by [name]

GO
--
select * from sysobjects
GO

--列出所有表
select [name] from sysobjects where xtype='u' order by [name]
GO

--查詢數據庫中的表所占用空間
exec sp_spaceused '表名' --取得表占用空間  
exec sp_spaceused ''--數據庫所有空間  

---1 種方式
create table #Data(name varchar(100),row varchar(100),reserved varchar(100),data varchar(100),index_size varchar(100),unused varchar(100))
GO
declare @name varchar(100)
declare cur cursor  for
    select name from sysobjects where xtype='u' order by name
open cur
fetch next from cur into @name
while @@fetch_status=0
begin
    insert into #data
    exec sp_spaceused   @name
    print @name

    fetch next from cur into @name
end
close cur
deallocate cur
go
select * from #Data
GO
---2 種方式
create table #DataNew(name varchar(100),row int,reserved int,data int,index_size int,unused int)
GO
insert into #dataNew
select name,convert(int,row) as row,convert(int,replace(reserved,'KB','')) as reserved,convert(int,replace(data,'KB','')) as data,
convert(int,replace(index_size,'KB','')) as index_size,convert(int,replace(unused,'KB','')) as unused from #data
GO
select * from #dataNew order by data desc
GO
---數據庫對象限定符:
--[[[server.][database].][schema].]database_object
---schema dbo(默認模式)

/*

使用完毕后，记得一定要要关闭它，因为这是一个安全隐患,切记执行下面的SQL语句

--创建链接服务器
exec sp_addlinkedserver   'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 '
exec sp_addlinkedsrvlogin 'ITSV ', 'false ',null, '用户名 ', '密码 '

--查询示例
select * from ITSV.数据库名.dbo.表名

--导入示例
select * into 表 from ITSV.数据库名.dbo.表名

--以后不再使用时删除链接服务器
exec sp_dropserver  'ITSV ', 'droplogins '

--连接远程/局域网数据(openrowset/openquery/opendatasource)
--1、openrowset

--查询示例
select * from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)

--生成本地表
select * into 表 from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)

--把本地表导入远程表
insert openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)
select *from 本地表

--更新本地表
update b
set b.列A=a.列A
from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)as a inner join 本地表 b
on a.column1=b.column1

--openquery用法需要创建一个连接

--首先创建一个连接创建链接服务器
exec sp_addlinkedserver   'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 '
--查询
select *
FROM openquery(ITSV,  'SELECT *  FROM 数据库.dbo.表名 ')
--把本地表导入远程表
insert openquery(ITSV,  'SELECT *  FROM 数据库.dbo.表名 ')
select * from 本地表
--更新本地表
update b
set b.列B=a.列B
FROM openquery(ITSV,  'SELECT * FROM 数据库.dbo.表名 ') as a  
inner join 本地表 b on a.列A=b.列A

--3、opendatasource/openrowset
SELECT   *
FROM   opendatasource( 'SQLOLEDB ',  'Data Source=ip/ServerName;User ID=登陆名;Password=密码 ' ).test.dbo.roy_ta
--把本地表导入远程表
insert opendatasource( 'SQLOLEDB ',  'Data Source=ip/ServerName;User ID=登陆名;Password=密码 ').数据库.dbo.表名
select * from 本地表

*/


--2005 启用Ad Hoc Distributed Queries的方法，执行下面的查询语句就可以了：
exec sp_configure 'show advanced options',1
reconfigure
exec sp_configure 'Ad Hoc Distributed Queries',1
reconfigure
--使用完毕后，记得一定要要关闭它，因为这是一个安全隐患,切记执行下面的SQL语句
exec sp_configure 'Ad Hoc Distributed Queries',0
reconfigure
exec sp_configure 'show advanced options',0
reconfigure  

--2005
SELECT top 10 * FROM OPENDATASOURCE('SQLOLEDB','Data Source=.;User ID=sa;Password=geovindu;').geovinduDB.dbo.meetingApply
GO

--openrowset使用OLEDB的一些例子
select * from openrowset('SQLOLEDB','Server=(local);PWD=***;UID=sa;','select * from GEOVINDU.dbo.school') as t
select * from openrowset('SQLOLEDB','Server=(local);PWD=***;UID=sa;',GEOVINDU.dbo.school) as t
select * from openrowset('SQLOLEDB','Server=(local);Trusted_Connection=yes;',GEOVINDU.dbo.school) as t
select * from openrowset('SQLOLEDB','(local)';'sa';'***','select * from GEOVINDU.dbo.school') as t
select * from openrowset('SQLOLEDB','(local)';'sa';'***',GEOVINDU.dbo.school) as t
select * from openrowset('SQLOLEDB','(local)';'sa';'***','select school.id as id1,people.id as id2 from GEOVINDU.dbo.school inner join GEOVINDU.dbo.people on school.id=people.id') as t

--openrowset使用SQLNCLI的一些例子(SQLNCLI在SqlServer2005以上才能使用)
select * from openrowset('SQLNCLI','(local)';'sa';'***','select * from GEOVINDU.dbo.school') as t
select * from openrowset('SQLNCLI','Server=(local);Trusted_Connection=yes;','select * from GEOVINDU.dbo.school') as t
select * from openrowset('SQLNCLI','Server=(local);UID=sa;PWD=***;','select * from GEOVINDU.dbo.school') as t
select * from openrowset('SQLNCLI','Server=(local);UID=sa;PWD=***;',GEOVINDU.dbo.school) as t
select * from openrowset('SQLNCLI','Server=(local);UID=sa;PWD=***;DataBase=GEOVINDU','select * from dbo.school') as t

--openrowset其他使用
insert openrowset('SQLNCLI','Server=(local);Trusted_Connection=yes;','select name from GEOVINDU.dbo.school where id=1') values('geovindu')/*要不要where都一样，插入一行*/
update openrowset('SQLNCLI','Server=(local);Trusted_Connection=yes;','select name from GEOVINDU.dbo.school where id=1') set name='geovindu'
delete from openrowset('SQLNCLI','Server=(local);Trusted_Connection=yes;','select name from GEOVINDU.dbo.school where id=1')





--opendatasource使用SQLNCLI的一些例子
select * from opendatasource('SQLNCLI','Server=(local);UID=sa;PWD=***;').GEOVINDU.dbo.school as t
select * from opendatasource('SQLNCLI','Server=(local);UID=sa;PWD=***;DataBase=TB').GEOVINDU.dbo.school as t

--opendatasource使用OLEDB的例子
select * from opendatasource('SQLOLEDB','Server=(local);Trusted_Connection=yes;').GEOVINDU.dbo.school as t

--opendatasource其他使用
insert opendatasource('SQLNCLI','Server=(local);Trusted_Connection=yes;').GEOVINDU.dbo.school(name) values('geovindu')/*要不要where都一样，插入一行*/
update opendatasource('SQLNCLI','Server=(local);Trusted_Connection=yes;').GEOVINDU.dbo.school set name='geovindu'
delete from opendatasource('SQLNCLI','Server=(local);Trusted_Connection=yes;').GEOVINDU.dbo.school where id=1





--openquery使用OLEDB的一些例子
exec sp_addlinkedserver   'ITSV', '', 'SQLOLEDB','(local)'
exec sp_addlinkedsrvlogin 'ITSV', 'false',null, 'sa', '***'
select * FROM openquery(ITSV,  'SELECT *  FROM GEOVINDU.dbo.school ')

--openquery使用SQLNCLI的一些例子
exec sp_addlinkedserver   'ITSVA', '', 'SQLNCLI','(local)'
exec sp_addlinkedsrvlogin 'ITSVA', 'false',null, 'sa', '***'
select * FROM openquery(ITSVA,  'SELECT *  FROM GEOVINDU.dbo.school ')

--openquery其他使用
insert openquery(ITSVA,'select name from GEOVINDU.dbo.school where id=1') values('geovindu')/*要不要where都一样，插入一行*/
update openquery(ITSVA,'select name from GEOVINDU.dbo.school where id=1') set name='geovindu'
delete openquery(ITSVA,'select name from GEOVINDU.dbo.school where id=1')


backup database intranet to disk='C:\ba.bak' with init


RESTORE DATABASE nwind_new FROM DISK = 'c:\backups\northwind\nwind.bak'
WITH
MOVE 'northwind' TO 'd:\Program Files\Microsoft SQL
Server\Data\nwind_new.mdf'
MOVE 'northwind_log' TO 'd:\Program Files\Microsoft SQL
Server\Data\nwind_new_log.ldf'
SELECT *
FROM OPENDATASOURCE(
    'Microsoft.Jet.OLEDB.4.0',
    'Data Source=C:\test.xls;Extended Properties=EXCEL 5.0'
)...[Sheet1$];

SELECT * FROM
OpenDataSource(
    'Microsoft.Jet.OLEDB.4.0',
    'Data Source="c:\temp\payroll.mdb";
    User ID=Admin;Password=;')...employees


SELECT  *
FROM OPENROWSET
        ( BULK 'C:\data.txt',SINGLE_CLOB)
AS a
</pre>
</div>
<p>&nbsp;</p><img src="http://www.cnblogs.com/geovindu/aggbug/2313149.html?type=1" width="1" height="1" alt=""/><p>作者: <a href="http://www.cnblogs.com/geovindu/" target="_blank">®Geovin Du Dream Park™</a> 发表于 2012-01-05 14:55 <a href="http://www.cnblogs.com/geovindu/archive/2012/01/05/2313149.html" target="_blank">原文链接</a></p><p>评论: 0　<a href="http://www.cnblogs.com/geovindu/archive/2012/01/05/2313149.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/geovindu/archive/2012/01/05/2313149.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/129385/" target="_blank">Jon Rubinstein 暂别科技舞台：再见，HP</a><span style="color:gray">(2012-01-28 21:36)</span><br/>· <a href="http://news.cnblogs.com/n/129384/" target="_blank">塞班3设备更新换代 诺基亚Belle出货</a><span style="color:gray">(2012-01-28 21:34)</span><br/>· <a href="http://news.cnblogs.com/n/129383/" target="_blank">推土机Windows 7补丁权威测试</a><span style="color:gray">(2012-01-28 19:24)</span><br/>· <a href="http://news.cnblogs.com/n/129382/" target="_blank">诺基亚在印度：品牌优势，渠道特点，跟中国的对比</a><span style="color:gray">(2012-01-28 19:21)</span><br/>· <a href="http://news.cnblogs.com/n/129381/" target="_blank">世界最早的计算机密码和黑客</a><span style="color:gray">(2012-01-28 19:20)</span><br/></p><p>编辑推荐：<a href="http://kb.cnblogs.com/page/120592/" target="_blank">Ruby之父松本行弘的编程人生</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">我的园子</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://q.cnblogs.com/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>征懂IOS开发的同仁,联系QQ 755414</title><link>http://www.cnblogs.com/SOSOS/archive/2011/12/27/2303194.html</link><dc:creator>SOSOS's BLog</dc:creator><author>SOSOS's BLog</author><pubDate>Tue, 27 Dec 2011 03:15:00 GMT</pubDate><guid>http://www.cnblogs.com/SOSOS/archive/2011/12/27/2303194.html</guid><description><![CDATA[<p><p>

目前有几单ios的项目需要开发...有兴趣者且时间充裕的朋友请联系,非诚勿扰</p>
<p>QQ 755414</p><img src="http://www.cnblogs.com/SOSOS/aggbug/2303194.html?type=1" width="1" height="1" alt=""/><p>作者: <a href="http://www.cnblogs.com/SOSOS/" target="_blank">SOSOS's BLog</a> 发表于 2011-12-27 11:15 <a href="http://www.cnblogs.com/SOSOS/archive/2011/12/27/2303194.html" target="_blank">原文链接</a></p><p>评论: 0　<a href="http://www.cnblogs.com/SOSOS/archive/2011/12/27/2303194.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/SOSOS/archive/2011/12/27/2303194.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/129385/" target="_blank">Jon Rubinstein 暂别科技舞台：再见，HP</a><span style="color:gray">(2012-01-28 21:36)</span><br/>· <a href="http://news.cnblogs.com/n/129384/" target="_blank">塞班3设备更新换代 诺基亚Belle出货</a><span style="color:gray">(2012-01-28 21:34)</span><br/>· <a href="http://news.cnblogs.com/n/129383/" target="_blank">推土机Windows 7补丁权威测试</a><span style="color:gray">(2012-01-28 19:24)</span><br/>· <a href="http://news.cnblogs.com/n/129382/" target="_blank">诺基亚在印度：品牌优势，渠道特点，跟中国的对比</a><span style="color:gray">(2012-01-28 19:21)</span><br/>· <a href="http://news.cnblogs.com/n/129381/" target="_blank">世界最早的计算机密码和黑客</a><span style="color:gray">(2012-01-28 19:20)</span><br/></p><p>编辑推荐：<a href="http://kb.cnblogs.com/page/120592/" target="_blank">Ruby之父松本行弘的编程人生</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">我的园子</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://q.cnblogs.com/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>2011年12月技术活动分享及.NET Gadgeteer介绍</title><link>http://www.cnblogs.com/xlzhu/archive/2011/12/27/2302730.html</link><dc:creator>xlzhu</dc:creator><author>xlzhu</author><pubDate>Mon, 26 Dec 2011 17:14:00 GMT</pubDate><guid>http://www.cnblogs.com/xlzhu/archive/2011/12/27/2302730.html</guid><description><![CDATA[<p><p>此次活动分享了两个主题：<br /><span>.NET Gadgeteer介绍：<br /></span>.NET Gadgeteer是基于.NET Micro Framework 和C#的开源电子积木套件，提供标准化的硬件接口和面向对象的软件接口，极大的方便和提高系统级的开发流程和开发速度，特别适合对嵌入式硬件不够熟悉的C＃程序员快速地开发一个硬件原型，欢迎大家加入Gadgeteer讨论QQ群：56256928<br />Gadgeteer官方网站：<a href="http://www.netmf.com/gadgeteer" target="_blank">http://www.netmf.com/gadgeteer<br /></a>Gadgeteer项目主页（源码下载）：<a href="http://gadgeteer.codeplex.com/" target="_blank">http://gadgeteer.codeplex.com<br /></a>以下是介绍PPT：</p>
<div id="__ss_10705513" style="width: 425px;"><strong style="display: block; margin: 12px 0 4px;"><a title=".Net Gadgeteer " href="http://www.slideshare.net/xlzhu/net-gadgeteer" target="_blank">.Net Gadgeteer </a></strong> 
<div style="padding: 5px 0 12px;">View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/xlzhu" target="_blank">xlzhu</a></div>
</div>
<p><br />HTML5全景介绍：<br />主要介绍了HTML5中的Convas、WebGL，链接中分享了一些有趣的例子，并介绍了移动互联网现状<br />以下是介绍PPT：<br />移动互联网部分内容来自Zed Gu之前的分享，最后一副图片来自池建强的博文：《<a href="http://www.cnblogs.com/chijianqiang/archive/2011/11/06/mobileinternet.html" target="_blank">移动互联网，浮华还是盛宴</a>》特此感谢<br />Web QQ的部分内容和截图来自腾讯于涛之前的分享，特此感谢&nbsp;</p>
<div id="__ss_10691718" style="width: 425px;"><strong style="display: block; margin: 12px 0 4px;"><a title="Html5全景介绍" href="http://www.slideshare.net/xlzhu/html5-10691718" target="_blank">Html5全景介绍</a></strong> 
<div style="padding: 5px 0 12px;">View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/xlzhu" target="_blank">xlzhu</a></div>
</div><img src="http://www.cnblogs.com/xlzhu/aggbug/2302730.html?type=1" width="1" height="1" alt=""/><p>作者: <a href="http://www.cnblogs.com/xlzhu/" target="_blank">xlzhu</a> 发表于 2011-12-27 01:14 <a href="http://www.cnblogs.com/xlzhu/archive/2011/12/27/2302730.html" target="_blank">原文链接</a></p><p>评论: 0　<a href="http://www.cnblogs.com/xlzhu/archive/2011/12/27/2302730.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/xlzhu/archive/2011/12/27/2302730.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/129385/" target="_blank">Jon Rubinstein 暂别科技舞台：再见，HP</a><span style="color:gray">(2012-01-28 21:36)</span><br/>· <a href="http://news.cnblogs.com/n/129384/" target="_blank">塞班3设备更新换代 诺基亚Belle出货</a><span style="color:gray">(2012-01-28 21:34)</span><br/>· <a href="http://news.cnblogs.com/n/129383/" target="_blank">推土机Windows 7补丁权威测试</a><span style="color:gray">(2012-01-28 19:24)</span><br/>· <a href="http://news.cnblogs.com/n/129382/" target="_blank">诺基亚在印度：品牌优势，渠道特点，跟中国的对比</a><span style="color:gray">(2012-01-28 19:21)</span><br/>· <a href="http://news.cnblogs.com/n/129381/" target="_blank">世界最早的计算机密码和黑客</a><span style="color:gray">(2012-01-28 19:20)</span><br/></p><p>编辑推荐：<a href="http://kb.cnblogs.com/page/120592/" target="_blank">Ruby之父松本行弘的编程人生</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">我的园子</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://q.cnblogs.com/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>Windows Phone应用 博客园阅读器</title><link>http://www.cnblogs.com/shanyou/archive/2011/12/24/2300686.html</link><dc:creator>张善友</dc:creator><author>张善友</author><pubDate>Sat, 24 Dec 2011 13:37:00 GMT</pubDate><guid>http://www.cnblogs.com/shanyou/archive/2011/12/24/2300686.html</guid><description><![CDATA[<p><p>今儿个平安夜，明天圣诞节，聚餐、飙歌、通宵玩，各种欢乐走起来！给WindowsPhone机友发个小应用。</p>  <p>最近学习实际开发WindowsPhone应用程序，第一个练手的应用程序就是博客园RSS阅读器，博客园的首页，各频道都有RSS，立即就可以用。而且从我的博客的后台数据可以看出大家都很习惯于用RSS阅读：</p>  <p><a href="http://images.cnblogs.com/cnblogs_com/shanyou/201112/201112242133019008.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/shanyou/201112/201112242133067094.png" width="723" height="430" /></a></p>  <p>开发好应用程序需要提交到应用商店，具体内容可以参考<a title="Windows Phone的应用程序认证要求" href="http://www.cnblogs.com/ynbt/archive/2011/10/26/2225887.html" target="_blank">Windows Phone的应用程序认证要求</a>以及<a title="Windows phone 应用开发[4]-应用发布" href="http://www.cnblogs.com/chenkai/archive/2011/12/22/2298234.html">Windows phone 应用开发[4]-应用发布</a>，需要做一些测试，Visual Studio 2010 WP7.1 SDK 包含了测试工具。右键WP7的工程选择Open Marketplace Test Kit。选择好要在Marketplace上发布用的99,172,200图标，应用程序截图：</p>  <p><a href="http://images.cnblogs.com/cnblogs_com/shanyou/201112/201112242133127971.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/shanyou/201112/201112242133177976.png" width="740" height="302" /></a></p>  <p>切换到Automated Tests 选项卡，运行“Run Tests”开始做测试：</p>  <p><a href="http://images.cnblogs.com/cnblogs_com/shanyou/201112/20111224213320466.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/shanyou/201112/201112242133235812.png" width="747" height="283" /></a></p>  <p>切换到Monitored Tests选项卡，把程序部署到真机做测试。</p>  <p>测试完了，如果你的应用程序需要做混淆处理，推荐使用Dotfuscator，而 PreEmptive Solutions 与微软合作，推出了免费的版本让您可以保护您的 WP7 应用程序。具体可以参考文章 <a href="http://msdn.microsoft.com/zh-tw/windowsphone/gg491391" target="_blank"><strong>Silverlight for Windows Phone 7：Dotfuscator - 保護您的應用程式</strong></a> 。获取到序列号和安装程序后就可以安装了。安装好了就可以使用啦。</p>  <p>经过混淆处理后就可以发布到Marketplace上去。要发布就需要注册开发者账号，具体的注册方法和注意事项请参考MSDN的 <a title="http://msdn.microsoft.com/zh-cn/windowsphone/" href="http://msdn.microsoft.com/zh-cn/windowsphone/" target="_blank">应用发布</a>。</p>  <p>博客园RSS阅读器使用了WP 7.1的SDK开发，要求使用Mango系统才能安装，下面介绍一下博客园RSS阅读器的功能：</p>  <p>1、博客园首页文章列表，只读取首页的15篇文章的标题。</p>  <p><a href="http://images.cnblogs.com/cnblogs_com/shanyou/201112/201112242133268934.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="cnbloglastupdate" border="0" alt="cnbloglastupdate" src="http://images.cnblogs.com/cnblogs_com/shanyou/201112/201112242133305492.png" width="409" height="492" /></a></p>  <p>2、博客园频道的文章列表，频道的文章也是15篇，可以离线查看详细的文章，文章里面包含原始的内容，包括图片等，文章可以在手机上收藏阅读。</p>  <p><a href="http://images.cnblogs.com/cnblogs_com/shanyou/201112/20111224213333806.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="cnblogcategoryitemlist" border="0" alt="cnblogcategoryitemlist" src="http://images.cnblogs.com/cnblogs_com/shanyou/201112/201112242133383253.png" width="415" height="571" /></a></p>  <p><a href="http://images.cnblogs.com/cnblogs_com/shanyou/201112/201112242133411631.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="cnblogrssitem" border="0" alt="cnblogrssitem" src="http://images.cnblogs.com/cnblogs_com/shanyou/201112/201112242133467982.png" width="415" height="530" /></a></p>  <p><a href="http://images.cnblogs.com/cnblogs_com/shanyou/201112/201112242133472749.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="cnblogitemsave" border="0" alt="cnblogitemsave" src="http://images.cnblogs.com/cnblogs_com/shanyou/201112/201112242133488737.png" width="413" height="567" /></a></p>  <p>3、通过Bing搜索引擎搜索博客园文章。</p>  <p>4、支持离线阅读博客，建议通过Wifi网络把文章下载好，你可以在家或者公司里，通过wifi网络把内容下载下来，然后再地铁，公交车上阅读了。</p>  <p>界面做的很差，这和我本人的UI 一贯做的很差有关系，大家就多多包涵，有同学愿意帮忙做下界面的，我很需要哦。</p>  <p>也许是圣诞期间，提交应用比较慢，还很凑巧，我把程序提交到Marketplace，博客园的RSS 改成了ATOM格式，提交的程序肯定会大会的了，估计在Marketplace上出现需要等到2012了，需要使用的同学可以到这里下载 <a title="https://skydrive.live.com/?cid=33478a966734670f#cid=33478A966734670F&amp;id=33478A966734670F%21357" href="https://skydrive.live.com/?cid=33478a966734670f#cid=33478A966734670F&amp;id=33478A966734670F%21357">https://skydrive.live.com/?cid=33478a966734670f#cid=33478A966734670F&amp;id=33478A966734670F%21357</a>。当然使用这个版本可能会遇到问题，请麻烦把遇到的问题反馈给我 <a href="mailto:geffzhang@qq.com">geffzhang@qq.com</a>.</p><img src="http://www.cnblogs.com/shanyou/aggbug/2300686.html?type=1" width="1" height="1" alt=""/><p>作者: <a href="http://www.cnblogs.com/shanyou/" target="_blank">张善友</a> 发表于 2011-12-24 21:37 <a href="http://www.cnblogs.com/shanyou/archive/2011/12/24/2300686.html" target="_blank">原文链接</a></p><p>评论: 12　<a href="http://www.cnblogs.com/shanyou/archive/2011/12/24/2300686.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/shanyou/archive/2011/12/24/2300686.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/129385/" target="_blank">Jon Rubinstein 暂别科技舞台：再见，HP</a><span style="color:gray">(2012-01-28 21:36)</span><br/>· <a href="http://news.cnblogs.com/n/129384/" target="_blank">塞班3设备更新换代 诺基亚Belle出货</a><span style="color:gray">(2012-01-28 21:34)</span><br/>· <a href="http://news.cnblogs.com/n/129383/" target="_blank">推土机Windows 7补丁权威测试</a><span style="color:gray">(2012-01-28 19:24)</span><br/>· <a href="http://news.cnblogs.com/n/129382/" target="_blank">诺基亚在印度：品牌优势，渠道特点，跟中国的对比</a><span style="color:gray">(2012-01-28 19:21)</span><br/>· <a href="http://news.cnblogs.com/n/129381/" target="_blank">世界最早的计算机密码和黑客</a><span style="color:gray">(2012-01-28 19:20)</span><br/></p><p>编辑推荐：<a href="http://kb.cnblogs.com/page/120592/" target="_blank">Ruby之父松本行弘的编程人生</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">我的园子</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://q.cnblogs.com/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>User select font-face/color/size/backgroundColor设置 字体，颜色，大小，背景色兼容主流浏览器</title><link>http://www.cnblogs.com/geovindu/archive/2011/12/18/2291896.html</link><dc:creator>®Geovin Du Dream Park™</dc:creator><author>®Geovin Du Dream Park™</author><pubDate>Sun, 18 Dec 2011 10:09:00 GMT</pubDate><guid>http://www.cnblogs.com/geovindu/archive/2011/12/18/2291896.html</guid><description><![CDATA[<p><div class="cnblogs_Highlighter">
<pre class="brush:html;gutter:true;">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;

&lt;head&gt;
&lt;meta content="text/html; charset=utf-8" http-equiv="Content-Type" /&gt;
&lt;title&gt;User select font-face/color/size/backgroundColor设置 字体，颜色，大小，背景色兼容主流浏览器 &lt;/title&gt;
&lt;meta name="author" content="Geovin Du 涂聚文"/&gt;
&lt;meta name="Keywords" content="塗聚文  締友計算機信息技術有限公司 "/&gt;
&lt;meta name="Description" content="塗聚文  締友計算機信息技術有限公司 "/&gt;
&lt;/head&gt;

&lt;body&gt;
&lt;form&gt;
Font:&lt;select onchange="document.body.style.fontFamily=this[this.selectedIndex].value"&gt;
  &lt;option value=""&gt;Default&lt;/option&gt;
  &lt;option value="Arial"&gt;Arial&lt;/option&gt;
  &lt;option value="Times New Roman"&gt;Times New Roman&lt;/option&gt;
  &lt;option value="Courier New"&gt;Courier New&lt;/option&gt;
  &lt;option value="黑体"&gt;黑体&lt;/option&gt;
  &lt;option value="宋体"&gt;宋体&lt;/option&gt;
  &lt;option value="隶书"&gt;隶书&lt;/option&gt;
  &lt;option value="幼圆"&gt;幼圆&lt;/option&gt;
  &lt;option value="楷体"&gt;楷体&lt;/option&gt;
  &lt;option value="微软雅黑"&gt;微软雅黑&lt;/option&gt;

&lt;/select&gt;&lt;br/&gt;
Color:&lt;select onchange="document.body.style.color=this[this.selectedIndex].value"&gt;
  &lt;option value=""&gt;Default&lt;/option&gt;
  &lt;option value="Red"&gt;Red&lt;/option&gt;
  &lt;option value="Green"&gt;Green&lt;/option&gt;
  &lt;option value="Blue"&gt;Blue&lt;/option&gt;
  &lt;option value="Purple"&gt;Purple&lt;/option&gt;
&lt;/select&gt;&lt;br/&gt;
BgColor:&lt;select onchange="document.body.style.backgroundColor=this[this.selectedIndex].value"&gt;
  &lt;option value=""&gt;Default&lt;/option&gt;
  &lt;option value="Red"&gt;Red&lt;/option&gt;
  &lt;option value="Green"&gt;Green&lt;/option&gt;
  &lt;option value="Blue"&gt;Blue&lt;/option&gt;
  &lt;option value="Purple"&gt;Purple&lt;/option&gt;
&lt;/select&gt;&lt;br/&gt;

Size:&lt;select onchange="document.body.style.fontSize=this[this.selectedIndex].value"&gt;
  &lt;option value=""&gt;Default&lt;/option&gt;
  &lt;option value="8pt"&gt;8pt&lt;/option&gt;
  &lt;option value="10pt"&gt;10pt&lt;/option&gt;
  &lt;option value="12pt"&gt;12pt&lt;/option&gt;
  &lt;option value="14pt"&gt;14pt&lt;/option&gt;
  &lt;option value="16pt"&gt;16pt&lt;/option&gt;
  &lt;option value="18pt"&gt;18pt&lt;/option&gt;
&lt;/select&gt;

&lt;/form&gt;
&lt;p&gt;Sample text 塗聚文  締友計算機信息技術有限公司 捷為工作室 涂斯博 涂聚文 赵金红 涂家村 缔友计算机信息技术有限公司 捷为工作室&lt;/p&gt;
&lt;div&gt; 不作为的官，都在步步高升，问责成虚设，成卖弄言语的修辞手法,法律只成了制約無勢無錢的窮人！&lt;/div&gt;
&lt;p&gt;江西省吉安市永丰县市政花园（市政服务大楼[厅]）工程质量及违法违规建筑容积率问题，从县长，市长，省长信箱，省长手机，省委办公厅，工程质量安全监督局，省信访局，住建部稽查办室，住建部仇部长等形同虚设？&lt;/p&gt;

&lt;/body&gt;

&lt;/html&gt;
</pre>
</div>
<p>&nbsp;</p><img src="http://www.cnblogs.com/geovindu/aggbug/2291896.html?type=1" width="1" height="1" alt=""/><p>作者: <a href="http://www.cnblogs.com/geovindu/" target="_blank">®Geovin Du Dream Park™</a> 发表于 2011-12-18 18:09 <a href="http://www.cnblogs.com/geovindu/archive/2011/12/18/2291896.html" target="_blank">原文链接</a></p><p>评论: 0　<a href="http://www.cnblogs.com/geovindu/archive/2011/12/18/2291896.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/geovindu/archive/2011/12/18/2291896.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/129385/" target="_blank">Jon Rubinstein 暂别科技舞台：再见，HP</a><span style="color:gray">(2012-01-28 21:36)</span><br/>· <a href="http://news.cnblogs.com/n/129384/" target="_blank">塞班3设备更新换代 诺基亚Belle出货</a><span style="color:gray">(2012-01-28 21:34)</span><br/>· <a href="http://news.cnblogs.com/n/129383/" target="_blank">推土机Windows 7补丁权威测试</a><span style="color:gray">(2012-01-28 19:24)</span><br/>· <a href="http://news.cnblogs.com/n/129382/" target="_blank">诺基亚在印度：品牌优势，渠道特点，跟中国的对比</a><span style="color:gray">(2012-01-28 19:21)</span><br/>· <a href="http://news.cnblogs.com/n/129381/" target="_blank">世界最早的计算机密码和黑客</a><span style="color:gray">(2012-01-28 19:20)</span><br/></p><p>编辑推荐：<a href="http://kb.cnblogs.com/page/120592/" target="_blank">Ruby之父松本行弘的编程人生</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">我的园子</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://q.cnblogs.com/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>Controlling Font Size With Javascript 兼容主流浏览器</title><link>http://www.cnblogs.com/geovindu/archive/2011/12/17/2291111.html</link><dc:creator>®Geovin Du Dream Park™</dc:creator><author>®Geovin Du Dream Park™</author><pubDate>Sat, 17 Dec 2011 07:23:00 GMT</pubDate><guid>http://www.cnblogs.com/geovindu/archive/2011/12/17/2291111.html</guid><description><![CDATA[<p><div class="cnblogs_Highlighter">
<pre class="brush:html;gutter:true;">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;

&lt;head&gt;
&lt;meta content="text/html; charset=utf-8" http-equiv="Content-Type" /&gt;
&lt;title&gt;Controlling Font Size With Javascript 兼容主流浏览器&lt;/title&gt;
&lt;meta name="author" content="Geovin Du 涂聚文"/&gt;
&lt;script type="text/javascript"&gt;
var min=8;
var max=18;
function increaseFontSize() {
 
   var p = document.getElementsByTagName('div'); //
   //var p=document.getElementById("geovindu");//
   for(i=0;i&lt;p.length;i++) {
 
      if(p[i].style.fontSize) {
         var s = parseInt(p[i].style.fontSize.replace("px",""));
      } else {
 
         var s = 12;
      }
      if(s!=max) {
 
         s += 1;
      }
      p[i].style.fontSize = s+"px"
 
   }
}
function decreaseFontSize() {
   var p = document.getElementsByTagName('div'); //
   //var p=document.getElementById("geovindu");//
   for(i=0;i&lt;p.length;i++) {
 
      if(p[i].style.fontSize) {
         var s = parseInt(p[i].style.fontSize.replace("px",""));
      } else {
 
         var s = 12;
      }
      if(s!=min) {
 
         s -= 1;
      }
      p[i].style.fontSize = s+"px"
 
   }
}
&lt;/script&gt;
&lt;/head&gt;

&lt;body&gt;
&lt;a href="javascript:decreaseFontSize();"&gt;-&lt;/a&gt; 
&lt;a href="javascript:increaseFontSize();"&gt;+&lt;/a&gt;
&lt;div id="geovindu"&gt;

塗脂抹粉 FDKSAJ gesdfs Geovin Du 塗聚文 涂斯博 涂聚文 赵金红 涂家村 捷为工作室 缔友计算机信息技术有限公司
不作为的官，都在步步高升，问责成虚设，成卖弄言语的修辞手法江西省吉安市永丰县市政花园（市政服务大楼[厅]）工程质量及违法违规建筑容积率问题，从县长，市长，省长信箱，省长手机，省委办公厅，工程质量安全监督局，省信访局，住建部稽查办室，住建部仇部长等形同虚设？</pre>
<pre class="brush:html;gutter:true;">&lt;/div&gt;
&lt;/body&gt;

&lt;/html&gt;
</pre>
</div>
<p>&nbsp;</p><img src="http://www.cnblogs.com/geovindu/aggbug/2291111.html?type=1" width="1" height="1" alt=""/><p>作者: <a href="http://www.cnblogs.com/geovindu/" target="_blank">®Geovin Du Dream Park™</a> 发表于 2011-12-17 15:23 <a href="http://www.cnblogs.com/geovindu/archive/2011/12/17/2291111.html" target="_blank">原文链接</a></p><p>评论: 1　<a href="http://www.cnblogs.com/geovindu/archive/2011/12/17/2291111.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/geovindu/archive/2011/12/17/2291111.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/129385/" target="_blank">Jon Rubinstein 暂别科技舞台：再见，HP</a><span style="color:gray">(2012-01-28 21:36)</span><br/>· <a href="http://news.cnblogs.com/n/129384/" target="_blank">塞班3设备更新换代 诺基亚Belle出货</a><span style="color:gray">(2012-01-28 21:34)</span><br/>· <a href="http://news.cnblogs.com/n/129383/" target="_blank">推土机Windows 7补丁权威测试</a><span style="color:gray">(2012-01-28 19:24)</span><br/>· <a href="http://news.cnblogs.com/n/129382/" target="_blank">诺基亚在印度：品牌优势，渠道特点，跟中国的对比</a><span style="color:gray">(2012-01-28 19:21)</span><br/>· <a href="http://news.cnblogs.com/n/129381/" target="_blank">世界最早的计算机密码和黑客</a><span style="color:gray">(2012-01-28 19:20)</span><br/></p><p>编辑推荐：<a href="http://kb.cnblogs.com/page/120592/" target="_blank">Ruby之父松本行弘的编程人生</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">我的园子</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://q.cnblogs.com/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>CSS DIV Shadow</title><link>http://www.cnblogs.com/geovindu/archive/2011/11/30/2269318.html</link><dc:creator>®Geovin Du Dream Park™</dc:creator><author>®Geovin Du Dream Park™</author><pubDate>Wed, 30 Nov 2011 08:36:00 GMT</pubDate><guid>http://www.cnblogs.com/geovindu/archive/2011/11/30/2269318.html</guid><description><![CDATA[<p><p>css code:</p>
<div class="cnblogs_Highlighter">
<pre class="brush:html;gutter:true;">/*
 2011-11-28 塗聚文 締友計算機信息技術有限公司
 CSS DIV Shadow
 css3 
*/

#geovinduDiv-shadow
{
    padding:10px;
    background-color:#f9f9f9;
    border:1px solid #fff;
    position:relative;
	/*Firefox*/
	-moz-box-shadow: 3px 3px 4px #000;
	/*Safari,Chrome*/
	-webkit-box-shadow: 3px 3px 4px #000;
	/*css3: Opera,IE9*/
	box-shadow: 3px 3px 4px #000;
	/* For IE 8 */
	-ms-filter: "progid:DXImageTransform.Microsoft.Shadow(Strength=4, Direction=135, Color='#000000')";
	/* For IE 5.5 - 7 */
	filter: progid:DXImageTransform.Microsoft.Shadow(Strength=4, Direction=135, Color='#000000');

	}
</pre>
</div>
<p>&nbsp;html code:</p>
<div class="cnblogs_Highlighter">
<pre class="brush:html;gutter:true;">	&lt;div id="geovinduDiv-shadow"&gt;
	涂聚文，捷为工作室，缔友计算机信息技术有限公司-书呆子学究就是阅读书本的人，但思想家，天才，照亮这一世界和推动人类进步的人却是直接阅读世事人生这一本大书。为上行者过乎言，则民作实。言过于行，则民作伪。《琐语》欲使人民忠实，为上者必须在事实上着力。欲免人民虚伪，为上者不可在言语上骗人。
	&lt;/div&gt;
</pre>
</div>
<p>&nbsp;</p><img src="http://www.cnblogs.com/geovindu/aggbug/2269318.html?type=1" width="1" height="1" alt=""/><p>作者: <a href="http://www.cnblogs.com/geovindu/" target="_blank">®Geovin Du Dream Park™</a> 发表于 2011-11-30 16:36 <a href="http://www.cnblogs.com/geovindu/archive/2011/11/30/2269318.html" target="_blank">原文链接</a></p><p>评论: 0　<a href="http://www.cnblogs.com/geovindu/archive/2011/11/30/2269318.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/geovindu/archive/2011/11/30/2269318.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/129385/" target="_blank">Jon Rubinstein 暂别科技舞台：再见，HP</a><span style="color:gray">(2012-01-28 21:36)</span><br/>· <a href="http://news.cnblogs.com/n/129384/" target="_blank">塞班3设备更新换代 诺基亚Belle出货</a><span style="color:gray">(2012-01-28 21:34)</span><br/>· <a href="http://news.cnblogs.com/n/129383/" target="_blank">推土机Windows 7补丁权威测试</a><span style="color:gray">(2012-01-28 19:24)</span><br/>· <a href="http://news.cnblogs.com/n/129382/" target="_blank">诺基亚在印度：品牌优势，渠道特点，跟中国的对比</a><span style="color:gray">(2012-01-28 19:21)</span><br/>· <a href="http://news.cnblogs.com/n/129381/" target="_blank">世界最早的计算机密码和黑客</a><span style="color:gray">(2012-01-28 19:20)</span><br/></p><p>编辑推荐：<a href="http://kb.cnblogs.com/page/120592/" target="_blank">Ruby之父松本行弘的编程人生</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">我的园子</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://q.cnblogs.com/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>Csharp 讀取大文本文件數據到DataTable中，大批量插入到數據庫中</title><link>http://www.cnblogs.com/geovindu/archive/2011/11/24/2262280.html</link><dc:creator>®Geovin Du Dream Park™</dc:creator><author>®Geovin Du Dream Park™</author><pubDate>Thu, 24 Nov 2011 13:12:00 GMT</pubDate><guid>http://www.cnblogs.com/geovindu/archive/2011/11/24/2262280.html</guid><description><![CDATA[<p><p>文本文件中的內容格式為：(其中問題，誰能否解決大於15M的文本文件能快速讀到DataTable中）</p>
<p>俚&nbsp;&nbsp;&nbsp; rustic<br />俚语&nbsp;&nbsp;&nbsp; slang<br />哩&nbsp;&nbsp;&nbsp; mile<br />哩&nbsp;&nbsp;&nbsp; onomat<br />哩数&nbsp;&nbsp;&nbsp; milage<br />逦&nbsp;&nbsp;&nbsp; winding<br />理&nbsp;&nbsp;&nbsp; logic<br />理&nbsp;&nbsp;&nbsp; reason<br />理&nbsp;&nbsp;&nbsp; science<br />理八郎&nbsp;&nbsp;&nbsp; Rihachiro<br />理兵卫&nbsp;&nbsp;&nbsp; Rihee<br />理兵卫&nbsp;&nbsp;&nbsp; Rihei<br />理财&nbsp;&nbsp;&nbsp; financing<br />理财&nbsp;&nbsp;&nbsp; portfolio<br />理查&nbsp;&nbsp;&nbsp; Richard<br />理查德&nbsp;&nbsp;&nbsp; Richard<br />理查德冰川&nbsp;&nbsp;&nbsp; Richardsbreen<br />理查顿&nbsp;&nbsp;&nbsp; Richardton<br />理查多&nbsp;&nbsp;&nbsp; Richardo<br />理查多维奇&nbsp;&nbsp;&nbsp; Richardovich<br />理查姆斯&nbsp;&nbsp;&nbsp; Richarms<br />理查森&nbsp;&nbsp;&nbsp; Richardson<br />理查特&nbsp;&nbsp;&nbsp; Richart<br />理查特&nbsp;&nbsp;&nbsp; Richarte<br />理查兹&nbsp;&nbsp;&nbsp; Richards<br />理察&nbsp;&nbsp;&nbsp; Richard<br />理次郎&nbsp;&nbsp;&nbsp; Masajiro<br />理发&nbsp;&nbsp;&nbsp; airdressing<br />理发&nbsp;&nbsp;&nbsp; coiffure<br />理发&nbsp;&nbsp;&nbsp; hairdressing<br />理发店&nbsp;&nbsp;&nbsp; barbers<br />理发师&nbsp;&nbsp;&nbsp; barber<br />理法&nbsp;&nbsp;&nbsp; logos<br />理蕃&nbsp;&nbsp;&nbsp; barbarians<br />理工&nbsp;&nbsp;&nbsp; sciences<br />理光&nbsp;&nbsp;&nbsp; Ricoh<br />理化&nbsp;&nbsp;&nbsp; chemistry<br />理化学研究所&nbsp;&nbsp;&nbsp; RIKEN<br />理会&nbsp;&nbsp;&nbsp; notice<br />理吉郎&nbsp;&nbsp;&nbsp; Rikichiro<br />理解&nbsp;&nbsp;&nbsp; comprehend<br />理解&nbsp;&nbsp;&nbsp; comprehension<br />理解&nbsp;&nbsp;&nbsp; understand<br />理解&nbsp;&nbsp;&nbsp; understandable<br />理解&nbsp;&nbsp;&nbsp; understanding<br />理解力&nbsp;&nbsp;&nbsp; comprehension<br />理解能力&nbsp;&nbsp;&nbsp; savvy<br />理解人&nbsp;&nbsp;&nbsp; understanding<br />理经济学&nbsp;&nbsp;&nbsp; Matekon<br />理开&nbsp;&nbsp;&nbsp; sleave<br />理理恩龙&nbsp;&nbsp;&nbsp; Liliensternus<br />理疗医师&nbsp;&nbsp;&nbsp; physiatrician<br />理论&nbsp;&nbsp;&nbsp; theories<br />理论&nbsp;&nbsp;&nbsp; theory<br />理论地&nbsp;&nbsp;&nbsp; theoretically<br />理论化&nbsp;&nbsp;&nbsp; theorise<br />理论家&nbsp;&nbsp;&nbsp; doctrinarian<br />理论家&nbsp;&nbsp;&nbsp; theoretician<br />理论家&nbsp;&nbsp;&nbsp; theorist<br />理论上&nbsp;&nbsp;&nbsp; academically<br />理论上&nbsp;&nbsp;&nbsp; theoretically<br />理念&nbsp;&nbsp;&nbsp; concept<br />理念&nbsp;&nbsp;&nbsp; concepts<br />理念&nbsp;&nbsp;&nbsp; ideal<br />理念&nbsp;&nbsp;&nbsp; ideals<br />理念&nbsp;&nbsp;&nbsp; ideas<br />理赔&nbsp;&nbsp;&nbsp; compensate<br />理七郎&nbsp;&nbsp;&nbsp; Rishichiro<br />理三郎&nbsp;&nbsp;&nbsp; Risaburo<br />理十郎&nbsp;&nbsp;&nbsp; Rijuro<br />理市郎&nbsp;&nbsp;&nbsp; Riichiro<br />理事&nbsp;&nbsp;&nbsp; director<br />理事&nbsp;&nbsp;&nbsp; syndic<br />理事长&nbsp;&nbsp;&nbsp; director<br />理事长&nbsp;&nbsp;&nbsp; frata<br />理事会&nbsp;&nbsp;&nbsp; council<br />理事会&nbsp;&nbsp;&nbsp; meeting<br />理事之职&nbsp;&nbsp;&nbsp; directorate<br />理四郎&nbsp;&nbsp;&nbsp; Rishiro<br />理松庵&nbsp;&nbsp;&nbsp; Rishoan<br />理所当然&nbsp;&nbsp;&nbsp; behoove<br />理所当然&nbsp;&nbsp;&nbsp; naturally<br />理所当然&nbsp;&nbsp;&nbsp; proper<br />理太郎&nbsp;&nbsp;&nbsp; Ritaro<br />理塘&nbsp;&nbsp;&nbsp; Litang<br />理夏德&nbsp;&nbsp;&nbsp; Ryszard<br />理想&nbsp;&nbsp;&nbsp; ideal<br />理想&nbsp;&nbsp;&nbsp; Ideal<br />理想&nbsp;&nbsp;&nbsp; idealism<br />理想&nbsp;&nbsp;&nbsp; idealists<br />理想&nbsp;&nbsp;&nbsp; ideals<br />涂聚文&nbsp; GeovinDu<br />涂斯博&nbsp; SiboDu<br />理想报&nbsp;&nbsp;&nbsp; Ideal<br />理想报&nbsp;&nbsp;&nbsp; Kalpana<br />理想标准公司&nbsp;&nbsp;&nbsp; Ideal-standard<br />理想地&nbsp;&nbsp;&nbsp; ideally<br />理想国&nbsp;&nbsp;&nbsp; utopia<br />理想国&nbsp;&nbsp;&nbsp; Utopia<br />理想化&nbsp;&nbsp;&nbsp; idealisation<br />理想化&nbsp;&nbsp;&nbsp; idealization<br />理想化&nbsp;&nbsp;&nbsp; idealize<br />理想美&nbsp;&nbsp;&nbsp; beauideal<br />理想目标&nbsp;&nbsp;&nbsp; dreamboat<br />理想坡莫合金&nbsp;&nbsp;&nbsp; idealoy<br />理想人物&nbsp;&nbsp;&nbsp; dreamboat<br />理想上&nbsp;&nbsp;&nbsp; ideally<br />理想主义&nbsp;&nbsp;&nbsp; idealism<br />理想主义地&nbsp;&nbsp;&nbsp; idealistically<br />理想主义者&nbsp;&nbsp;&nbsp; idealist<br />理性&nbsp;&nbsp;&nbsp; rational<br />理性&nbsp;&nbsp;&nbsp; rationality<br />理性&nbsp;&nbsp;&nbsp; reason<br />理性论&nbsp;&nbsp;&nbsp; rationalism<br />理性论者&nbsp;&nbsp;&nbsp; rationalist<br />理性主义&nbsp;&nbsp;&nbsp; rationalism<br />理性主义者&nbsp;&nbsp;&nbsp; rationalist<br />塗聚文&nbsp; GeovinDu</p>
<div class="cnblogs_Highlighter">
<pre class="brush:csharp;gutter:true;">        /// &lt;summary&gt;
        /// 從文本文件中讀取數據到DatatTable中
        /// 塗聚文 2011-11-22
        /// 締友計算機信息技術有限公司 捷為工作室
        /// &lt;/summary&gt;
        /// &lt;returns&gt;&lt;/returns&gt;
        private DataTable CreateDataTableFromFile()
        {
            DataTable dt = new DataTable();
            DataColumn dc;
            

            dc = new DataColumn();
            dc.DataType = System.Type.GetType("System.Int32");
            dc.ColumnName = "序号";
            dc.Unique = false;
            dt.Columns.Add(dc);
            dc = new DataColumn();
            dc.DataType = System.Type.GetType("System.String"); 
            dc.ColumnName = "中文";
            dc.Unique = false;
            dt.Columns.Add(dc);
            dc = new DataColumn();
            dc.DataType = System.Type.GetType("System.String");
            dc.ColumnName = "英文";
            dc.Unique = false;
            dt.Columns.Add(dc);

            StreamReader sr = new StreamReader(file);//text文件地址 大的文件，當讀出到DatatTable中，可以批理插入數據庫中
            string input;
            string cn = string.Empty;
            string en = string.Empty;
            int index = 0;
            while ((input = sr.ReadLine()) != null)
            {
                this.richTextBox1.AppendText(input + "\r\n"); 
                string[] s = input.Split(new char[] { '\t',' ' });
                //dr = dt.NewRow();
                //dr["序号"] = index;
                for (int i = 0; i &lt; input.Length; i++)
                {
                    if (i == 0)
                    {
                        cn = s[i].ToString();
                        //dr["中文"] = s[i].ToString();
                    }
                    if (i == 1)
                    {
                        en = s[i].ToString();
                        //dr["英文"] = s[i].ToString();
                    }
                }               
                
                //dr["c4"] = s[3];
                //dt.Rows.Add(dr);
                dt.Rows.Add(index, cn, en);
                index++;
                Application.DoEvents();       
            }
            sr.Close();
            return dt;
        }
</pre>
</div>
<p>&nbsp;</p>
<div class="cnblogs_Highlighter">
<pre class="brush:csharp;gutter:true;">        /// &lt;summary&gt;
        /// DatatTable數據批理插入數據庫中
        /// 塗聚文 2011-11-22
        /// 締友計算機信息技術有限公司 捷為工作室
        /// &lt;/summary&gt;
        private void StartImport()
        {
            Stopwatch sw = new Stopwatch();
            sw.Start();
            SqlBulkCopy bulkCopy = new SqlBulkCopy(connectionString, SqlBulkCopyOptions.TableLock);
            bulkCopy.DestinationTableName = "GeovinDuDictionary";
            bulkCopy.BatchSize = 1000000;  //每一批次產生的行數
            bulkCopy.NotifyAfter = 1000;
            bulkCopy.ColumnMappings.Add("中文", "WordChina"); //
            bulkCopy.ColumnMappings.Add("英文", "WordEnglish");
            bulkCopy.WriteToServer(CreateDataTableFromFile());
            sw.Stop();
            richTextBox1.Text = (sw.ElapsedMilliseconds / 1000.00).ToString();
        }
</pre>
</div>
<p>&nbsp;</p><img src="http://www.cnblogs.com/geovindu/aggbug/2262280.html?type=1" width="1" height="1" alt=""/><p>作者: <a href="http://www.cnblogs.com/geovindu/" target="_blank">®Geovin Du Dream Park™</a> 发表于 2011-11-24 21:12 <a href="http://www.cnblogs.com/geovindu/archive/2011/11/24/2262280.html" target="_blank">原文链接</a></p><p>评论: 0　<a href="http://www.cnblogs.com/geovindu/archive/2011/11/24/2262280.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/geovindu/archive/2011/11/24/2262280.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/129385/" target="_blank">Jon Rubinstein 暂别科技舞台：再见，HP</a><span style="color:gray">(2012-01-28 21:36)</span><br/>· <a href="http://news.cnblogs.com/n/129384/" target="_blank">塞班3设备更新换代 诺基亚Belle出货</a><span style="color:gray">(2012-01-28 21:34)</span><br/>· <a href="http://news.cnblogs.com/n/129383/" target="_blank">推土机Windows 7补丁权威测试</a><span style="color:gray">(2012-01-28 19:24)</span><br/>· <a href="http://news.cnblogs.com/n/129382/" target="_blank">诺基亚在印度：品牌优势，渠道特点，跟中国的对比</a><span style="color:gray">(2012-01-28 19:21)</span><br/>· <a href="http://news.cnblogs.com/n/129381/" target="_blank">世界最早的计算机密码和黑客</a><span style="color:gray">(2012-01-28 19:20)</span><br/></p><p>编辑推荐：<a href="http://kb.cnblogs.com/page/120592/" target="_blank">Ruby之父松本行弘的编程人生</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">我的园子</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://q.cnblogs.com/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>Smart TV应用开发：占领下一个客户端？</title><link>http://www.cnblogs.com/xlzhu/archive/2011/11/22/2258248.html</link><dc:creator>xlzhu</dc:creator><author>xlzhu</author><pubDate>Mon, 21 Nov 2011 19:08:00 GMT</pubDate><guid>http://www.cnblogs.com/xlzhu/archive/2011/11/22/2258248.html</guid><description><![CDATA[<p><p>手机、平板、TV大融合中的创业机遇暨Smart TV沙龙(深圳站)活动结束了，我也作为嘉宾回答了问题，不过时间太短，有些观点还是需要详细记录一下：</p>
<p>Smart TV的好处很容易发现：<br />产品外观时尚、技术高端（内置WIFI、支持3D、HDMI），代表着未来的潮流<br />适合在客厅、适合在大屏幕上的应用肯定会有市场，家庭生活应用（菜谱、买电影票、点外卖、叫快递、缴费、卡拉OK、流媒体）、家庭游戏、英文学习、文案图像展示（有3D哦亲）......</p>
<p>如果你打算现在就开发应用去占领这个客户端的话，必须要考虑以下风险：</p>
<p>平台风险：<br />Smart TV价格高高在上（两万余元），如果你开发游戏的话，你的用户数量无形之中就收到了限制<br />智能电视领域有国内的联盟（价格有优势，普及也许会更快），也有Apple TV、Google TV，Smart TV 能笑到最后吗？</p>
<p>政策风险：<br />看看天朝三网融合以来几个利益集团打架的激烈程度就知道在这个客户端上做内容有多么难，你真的懂的......</p>
<p>技术风险：<br />Smart TV和bada开发什么关系？会不会以后合并为一个平台？<br />如果应用依赖输入的话，现阶段SmartTV的输入较为不便，除非三星配置触控板，当然，支持多点触控就更好了<br />应用如果需要用户支付，还未有最终的解决方案，暂时还不能直接向用户收钱，更不用说国内用户的支付观念还需要培养<br />是否支持通过USB外接（摄像头、麦克风、）其他外设还是未知，技术上来说应该是支持的<br />HTML5还在发展，标准未定型，如果应用从其他平台迁移过来的话，可能比较麻烦</p><img src="http://www.cnblogs.com/xlzhu/aggbug/2258248.html?type=1" width="1" height="1" alt=""/><p>作者: <a href="http://www.cnblogs.com/xlzhu/" target="_blank">xlzhu</a> 发表于 2011-11-22 03:08 <a href="http://www.cnblogs.com/xlzhu/archive/2011/11/22/2258248.html" target="_blank">原文链接</a></p><p>评论: 0　<a href="http://www.cnblogs.com/xlzhu/archive/2011/11/22/2258248.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/xlzhu/archive/2011/11/22/2258248.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/129385/" target="_blank">Jon Rubinstein 暂别科技舞台：再见，HP</a><span style="color:gray">(2012-01-28 21:36)</span><br/>· <a href="http://news.cnblogs.com/n/129384/" target="_blank">塞班3设备更新换代 诺基亚Belle出货</a><span style="color:gray">(2012-01-28 21:34)</span><br/>· <a href="http://news.cnblogs.com/n/129383/" target="_blank">推土机Windows 7补丁权威测试</a><span style="color:gray">(2012-01-28 19:24)</span><br/>· <a href="http://news.cnblogs.com/n/129382/" target="_blank">诺基亚在印度：品牌优势，渠道特点，跟中国的对比</a><span style="color:gray">(2012-01-28 19:21)</span><br/>· <a href="http://news.cnblogs.com/n/129381/" target="_blank">世界最早的计算机密码和黑客</a><span style="color:gray">(2012-01-28 19:20)</span><br/></p><p>编辑推荐：<a href="http://kb.cnblogs.com/page/120592/" target="_blank">Ruby之父松本行弘的编程人生</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">我的园子</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://q.cnblogs.com/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>Csharp DataGridView自定义添加DateTimePicker控件日期列</title><link>http://www.cnblogs.com/geovindu/archive/2011/11/16/2251075.html</link><dc:creator>®Geovin Du Dream Park™</dc:creator><author>®Geovin Du Dream Park™</author><pubDate>Wed, 16 Nov 2011 04:54:00 GMT</pubDate><guid>http://www.cnblogs.com/geovindu/archive/2011/11/16/2251075.html</guid><description><![CDATA[<p><div class="cnblogs_Highlighter">
<pre class="brush:csharp;gutter:true;">   /// &lt;summary&gt;
    /// DataGridView自定义添加DateTimePicker控件日期列 参考http://msdn.microsoft.com/en-us/library/7tas5c80.aspx
    /// 涂聚文 缔友计算机信息技术有限公司
    /// 2011-11-16 捷为工作室
    /// &lt;/summary&gt;
    public class GeovinDuCalendarColumn : DataGridViewColumn
    {
        /// &lt;summary&gt;
        /// 
        /// &lt;/summary&gt;
        public GeovinDuCalendarColumn()
            : base(new CalendarCell())
        {
        }
        /// &lt;summary&gt;
        /// 
        /// &lt;/summary&gt;
        public override DataGridViewCell CellTemplate
        {
            get
            {
                return base.CellTemplate;
            }
            set
            {
             
                if (value != null &amp;&amp;
                    !value.GetType().IsAssignableFrom(typeof(CalendarCell)))
                {
                    throw new InvalidCastException("Must be a CalendarCell");
                }
                base.CellTemplate = value;
            }
        }
    }
    /// &lt;summary&gt;
    /// DataGridView 添加日期列
    /// 涂聚文 缔友计算机信息技术有限公司
    /// 2011-11-16 捷为工作室
    /// &lt;/summary&gt;
    public class CalendarCell : DataGridViewTextBoxCell
    {

        public CalendarCell()
            : base()
        {
        
            this.Style.Format = "d";
        }

        public override void InitializeEditingControl(int rowIndex, object
            initialFormattedValue, DataGridViewCellStyle dataGridViewCellStyle)
        {
  
            base.InitializeEditingControl(rowIndex, initialFormattedValue,
                dataGridViewCellStyle);
            CalendarEditingControl ctl =
                DataGridView.EditingControl as CalendarEditingControl;
      
            if (this.Value == null)
            {
                ctl.Value = (DateTime)this.DefaultNewRowValue;
            }
            else
            {
                ctl.Value = (DateTime)this.Value;
            }
        }

        public override Type EditType
        {
            get
            {
              
                return typeof(CalendarEditingControl);
            }
        }

        public override Type ValueType
        {
            get
            {
              

                return typeof(DateTime);
            }
        }

        public override object DefaultNewRowValue
        {
            get
            {
            
                return DateTime.Now;
            }
        }
    }
    /// &lt;summary&gt;
    ///DataGridView 添加日期列
    /// 涂聚文 缔友计算机信息技术有限公司
    /// 2011-11-16 捷为工作室
    /// &lt;/summary&gt;
    class CalendarEditingControl : DateTimePicker, IDataGridViewEditingControl
    {
        DataGridView dataGridView;
        private bool valueChanged = false;
        int rowIndex;

        public CalendarEditingControl()
        {
            this.Format = DateTimePickerFormat.Short;
        }


        public object EditingControlFormattedValue
        {
            get
            {
                return this.Value.ToShortDateString();
            }
            set
            {
                if (value is String)
                {
                    try
                    {

                        this.Value = DateTime.Parse((String)value);
                    }
                    catch
                    {
              
                        this.Value = DateTime.Now;
                    }
                }
            }
        }


        public object GetEditingControlFormattedValue(
            DataGridViewDataErrorContexts context)
        {
            return EditingControlFormattedValue;
        }


        public void ApplyCellStyleToEditingControl(
            DataGridViewCellStyle dataGridViewCellStyle)
        {
            this.Font = dataGridViewCellStyle.Font;
            this.CalendarForeColor = dataGridViewCellStyle.ForeColor;
            this.CalendarMonthBackground = dataGridViewCellStyle.BackColor;
        }

 
        public int EditingControlRowIndex
        {
            get
            {
                return rowIndex;
            }
            set
            {
                rowIndex = value;
            }
        }


        public bool EditingControlWantsInputKey(
            Keys key, bool dataGridViewWantsInputKey)
        {
            // Let the DateTimePicker handle the keys listed.
            switch (key &amp; Keys.KeyCode)
            {
                case Keys.Left:
                case Keys.Up:
                case Keys.Down:
                case Keys.Right:
                case Keys.Home:
                case Keys.End:
                case Keys.PageDown:
                case Keys.PageUp:
                    return true;
                default:
                    return !dataGridViewWantsInputKey;
            }
        }


        public void PrepareEditingControlForEdit(bool selectAll)
        {
            // No preparation needs to be done.
        }


        public bool RepositionEditingControlOnValueChange
        {
            get
            {
                return false;
            }
        }


        public DataGridView EditingControlDataGridView
        {
            get
            {
                return dataGridView;
            }
            set
            {
                dataGridView = value;
            }
        }


        public bool EditingControlValueChanged
        {
            get
            {
                return valueChanged;
            }
            set
            {
                valueChanged = value;
            }
        }


        public Cursor EditingPanelCursor
        {
            get
            {
                return base.Cursor;
            }
        }

        protected override void OnValueChanged(EventArgs eventargs)
        {

            valueChanged = true;
            this.EditingControlDataGridView.NotifyCurrentCellDirty(true);
            base.OnValueChanged(eventargs);
        }
    }
</pre>
</div>
<p>&nbsp;调用：</p>
<div class="cnblogs_Highlighter">
<pre class="brush:csharp;gutter:true;">            //dataGridView1.Columns[3].HeaderText = "入職日期";
            GeovinDuCalendarColumn col = new GeovinDuCalendarColumn();
            this.dataGridView1.Columns.Insert(3,col);
            col.HeaderText = "入職日期";

 /// &lt;summary&gt;
        /// 设置默认值
        /// &lt;/summary&gt;
        /// &lt;param name="sender"&gt;&lt;/param&gt;
        /// &lt;param name="e"&gt;&lt;/param&gt;
        private void dataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
        {
            if (dataGridView1.Rows.Count &gt;= 1) //设定默认日期
            {
                this.dataGridView1.Rows[e.RowIndex].Cells[2].Value = "20E8C162-C09C-4F7A-9C97-0CA50E201F6B";
                this.dataGridView1.Rows[e.RowIndex].Cells[3].Value = DateTime.Now;
                this.dataGridView1.Rows[e.RowIndex].Cells[4].Value = "C50E08D5-7529-4F86-966E-9497AD67EA0C";
            }
        }
</pre>
</div>
<p>&nbsp;</p><img src="http://www.cnblogs.com/geovindu/aggbug/2251075.html?type=1" width="1" height="1" alt=""/><p>作者: <a href="http://www.cnblogs.com/geovindu/" target="_blank">®Geovin Du Dream Park™</a> 发表于 2011-11-16 12:54 <a href="http://www.cnblogs.com/geovindu/archive/2011/11/16/2251075.html" target="_blank">原文链接</a></p><p>评论: 2　<a href="http://www.cnblogs.com/geovindu/archive/2011/11/16/2251075.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/geovindu/archive/2011/11/16/2251075.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/129385/" target="_blank">Jon Rubinstein 暂别科技舞台：再见，HP</a><span style="color:gray">(2012-01-28 21:36)</span><br/>· <a href="http://news.cnblogs.com/n/129384/" target="_blank">塞班3设备更新换代 诺基亚Belle出货</a><span style="color:gray">(2012-01-28 21:34)</span><br/>· <a href="http://news.cnblogs.com/n/129383/" target="_blank">推土机Windows 7补丁权威测试</a><span style="color:gray">(2012-01-28 19:24)</span><br/>· <a href="http://news.cnblogs.com/n/129382/" target="_blank">诺基亚在印度：品牌优势，渠道特点，跟中国的对比</a><span style="color:gray">(2012-01-28 19:21)</span><br/>· <a href="http://news.cnblogs.com/n/129381/" target="_blank">世界最早的计算机密码和黑客</a><span style="color:gray">(2012-01-28 19:20)</span><br/></p><p>编辑推荐：<a href="http://kb.cnblogs.com/page/120592/" target="_blank">Ruby之父松本行弘的编程人生</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">我的园子</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://q.cnblogs.com/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>ServiceStack.Redis 使用教程</title><link>http://www.cnblogs.com/shanyou/archive/2011/11/10/2245082.html</link><dc:creator>张善友</dc:creator><author>张善友</author><pubDate>Thu, 10 Nov 2011 15:16:00 GMT</pubDate><guid>http://www.cnblogs.com/shanyou/archive/2011/11/10/2245082.html</guid><description><![CDATA[<p><p>环境准备</p>
<ul>
<li><a href="https://github.com/dmajkic/redis/downloads">Redis (使用Windows版本做测试，运营环境建议使用Linux版本)</a></li>
<li><a href="https://github.com/ServiceStack/ServiceStack.Redis/downloads" target="_blank">ServiceStack.Redis-v3.00</a></li>
</ul>
<p>在Windows上运行Redis服务器作开发和测试是很好的，但是在运营环境还是Linux版本靠谱，下面我们就先解压Redis到一个目录下：</p>
<p><a href="http://images.cnblogs.com/cnblogs_com/shanyou/201111/201111102316017046.png"><img style="display: inline; border: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/shanyou/201111/201111102316035910.png" alt="image" width="568" height="205" border="0" /></a></p>
<p>运行<strong>redis-server.exe</strong> 看到如下Windows控制台：</p>
<p><a href="http://images.cnblogs.com/cnblogs_com/shanyou/201111/20111110231606944.png"><img style="display: inline; border: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/shanyou/201111/201111102316093679.png" alt="image" width="634" height="273" border="0" /></a></p>
<p>上面我们可以看到Redis运行的端口是6372</p>
<p>我们先玩一下Redis的客户端控制台，在相同目录下运行<strong>redis-cli.exe</strong>会弹出另一个控制台程序，可以参考<a href="http://try.redis-db.com/">Try Redis tutorial</a>开始你的交互之旅。</p>
<p>输入命令 set car.make &ldquo;Ford&rdquo; 添加了一个car.make为Key，Value是Ford的数据进入Redis，输入命令get car.make就可以取回Ford</p>
<p><a href="http://images.cnblogs.com/cnblogs_com/shanyou/201111/201111102316118116.png"><img style="display: inline; border: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/shanyou/201111/201111102316132411.png" alt="image" width="626" height="209" border="0" /></a></p>
<p>下面我们进入正题，讲主角ServiceStack.Redis ：</p>
<p>首先创建一个控制台程序，然后解压缩<a href="https://github.com/downloads/ServiceStack/ServiceStack.Redis/ServiceStack.Redis-v3.00.zip">ServiceStack.Redis-v3.00.zip</a> ，然后添加下面的四个引用</p>
<ul>
<li>ServiceStack.Common</li>
<li>ServiceStack.Interfaces</li>
<li>ServiceStack.Redis</li>
<li>ServiceStack.Text</li>
</ul>
<p><a href="http://images.cnblogs.com/cnblogs_com/shanyou/201111/201111102316164622.png"><img style="display: inline; border: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/shanyou/201111/201111102316196243.png" alt="image" width="547" height="349" border="0" /></a></p>
<p>我们下面来写些代码，创建一个Car类并存储几个实例到Redis，然后让一个对象5秒后过期，等待6秒钟后输出Car的实例数</p>
<p>using System; <br />using System.Collections.Generic; <br />using System.Linq; <br />using System.Text; <br />using ServiceStack.Redis; <br />using System.Threading;</p>
<p>namespace RedisTutorial <br />{ <br />&nbsp;&nbsp;&nbsp; class Program <br />&nbsp;&nbsp;&nbsp; { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; static void Main(string[] args) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var redisClient = new RedisClient("localhost");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; using (var cars = redisClient.GetTypedClient&lt;Car&gt;()) <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 (cars.GetAll().Count &gt; 0) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cars.DeleteAll();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var dansFord = new Car <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; Id = cars.GetNextSequence(), <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Title = "Dan's Ford", <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Make = new Make { Name = "Ford" }, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Model = new Model { Name = "Fiesta" } <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; var beccisFord = new Car <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; Id = cars.GetNextSequence(), <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Title = "Becci's Ford", <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Make = new Make { Name = "Ford" }, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Model = new Model { Name = "Focus" } <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; var vauxhallAstra = new Car <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; Id = cars.GetNextSequence(), <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Title = "Dans Vauxhall Astra", <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Make = new Make { Name = "Vauxhall" }, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Model = new Model { Name = "Asta" } <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; var vauxhallNova = new Car <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; Id = cars.GetNextSequence(), <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Title = "Dans Vauxhall Nova", <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Make = new Make { Name = "Vauxhall" }, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Model = new Model { Name = "Nova" } <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; var carsToStore = new List&lt;Car&gt; { dansFord, beccisFord, vauxhallAstra, vauxhallNova }; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cars.StoreAll(carsToStore);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine("Redis Has-&gt; " + cars.GetAll().Count + " cars");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cars.ExpireAt(vauxhallAstra.Id, DateTime.Now.AddSeconds(5)); //Expire Vauxhall Astra in 5 seconds</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Thread.Sleep(6000); //Wait 6 seconds to prove we can expire our old Astra</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine("Redis Has-&gt; " + cars.GetAll().Count + " cars");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Get Cars out of Redis <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var carsFromRedis = cars.GetAll().Where(car =&gt; car.Make.Name == "Ford");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; foreach (var car in carsFromRedis) <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; Console.WriteLine("Redis Has a -&gt;" + car.Title); <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; } <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.ReadLine(); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public class Car <br />&nbsp;&nbsp;&nbsp; { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public long Id { get; set; } <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public string Title { get; set; } <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public string Description { get; set; } <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public Make Make { get; set; } <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public Model Model { get; set; } <br />&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public class Make <br />&nbsp;&nbsp;&nbsp; { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public int Id { get; set; } <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public string Name { get; set; } <br />&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public class Model <br />&nbsp;&nbsp;&nbsp; { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public int Id { get; set; } <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public Make Make { get; set; } <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public string Name { get; set; } <br />&nbsp;&nbsp;&nbsp; }</p>
<p>}</p>
<p><a href="http://images.cnblogs.com/cnblogs_com/shanyou/201111/201111102316214617.png"><img style="display: inline; border: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/shanyou/201111/201111102316238289.png" alt="image" width="594" height="238" border="0" /></a>&nbsp;</p>
<p>例子代码下载：<a title="RedisTutorial.zip" href="http://files.cnblogs.com/shanyou/RedisTutorial.zip">RedisTutorial.zip</a></p>
<p><a href="http://www.cnblogs.com/goodspeed/archive/2011/07/26/servicestack_redis_optimize.html">ServiceStack.Redis的问题与修正</a></p>
<p><a href="http://club.sm160.com/showtopic-884854.aspx" target="_blank">性能测试：Redis千万级的数据量的性能测试</a></p>
<p><a href="http://database.51cto.com/art/201107/276333.htm" target="_blank">几点建议，让Redis在你的系统中发挥更大作用</a></p><img src="http://www.cnblogs.com/shanyou/aggbug/2245082.html?type=1" width="1" height="1" alt=""/><p>作者: <a href="http://www.cnblogs.com/shanyou/" target="_blank">张善友</a> 发表于 2011-11-10 23:16 <a href="http://www.cnblogs.com/shanyou/archive/2011/11/10/2245082.html" target="_blank">原文链接</a></p><p>评论: 1　<a href="http://www.cnblogs.com/shanyou/archive/2011/11/10/2245082.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/shanyou/archive/2011/11/10/2245082.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/129385/" target="_blank">Jon Rubinstein 暂别科技舞台：再见，HP</a><span style="color:gray">(2012-01-28 21:36)</span><br/>· <a href="http://news.cnblogs.com/n/129384/" target="_blank">塞班3设备更新换代 诺基亚Belle出货</a><span style="color:gray">(2012-01-28 21:34)</span><br/>· <a href="http://news.cnblogs.com/n/129383/" target="_blank">推土机Windows 7补丁权威测试</a><span style="color:gray">(2012-01-28 19:24)</span><br/>· <a href="http://news.cnblogs.com/n/129382/" target="_blank">诺基亚在印度：品牌优势，渠道特点，跟中国的对比</a><span style="color:gray">(2012-01-28 19:21)</span><br/>· <a href="http://news.cnblogs.com/n/129381/" target="_blank">世界最早的计算机密码和黑客</a><span style="color:gray">(2012-01-28 19:20)</span><br/></p><p>编辑推荐：<a href="http://kb.cnblogs.com/page/120592/" target="_blank">Ruby之父松本行弘的编程人生</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">我的园子</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://q.cnblogs.com/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>手机、平板、TV大融合中的创业机遇暨Smart TV技术沙龙深圳站公告</title><link>http://www.cnblogs.com/xlzhu/archive/2011/11/07/2239252.html</link><dc:creator>xlzhu</dc:creator><author>xlzhu</author><pubDate>Mon, 07 Nov 2011 06:50:00 GMT</pubDate><guid>http://www.cnblogs.com/xlzhu/archive/2011/11/07/2239252.html</guid><description><![CDATA[<p><p>活动介绍：手机、平板、TV大融合中的创业机遇暨Smart TV沙龙是针对移动开发者、跨平台开发团队及企业IT决策者的一个包含技术普及、产品展示和行业交流的系列线下沙龙活动，活动除了为广大参会来宾设置了丰富多彩的互动课程外还有多台Smart TV在现场供开发者试用。不论您身为一名移动开发者、还是身为跨平台应用的开发人员，我们都欢迎您参加Smart TV沙龙，您将会发现与Smart TV相关的产品、开发工具、更新的资讯、更有用的资源，能有效率地来开发基于Smart TV平台的应用和服务。Smart TV沙龙巡展将在11月19日在深圳开展巡展的第二站活动。欢迎感兴趣的开发者、创业公司、跨平台开发团队以及媒体圈的朋友参加。活动免费，更有惊喜大奖抽送！</p>
<p>&nbsp;</p>
<p>活动时间：2011年11月19日(星期六)</p>
<p>活动地点：深圳市 罗湖区深南东路5002号 地王大厦信兴广场1楼111-112号 星期五餐厅 场地电话：0755-82460757</p>
<p>乘车路线：公共汽车深南路西向书城站；地铁1号线2号线大剧院站D出口</p>
<p align="left">地图：</p>
<p>&nbsp;</p>
<p><img src="http://pic002.cnblogs.com/images/2011/620/2011110714453756.png" alt="" /></p>
<p>&nbsp;</p>
<p>活动日程：</p>
<p>13:00-13:55 来宾签到入场</p>
<p>13:55-14:00 活动开场 主持人开场介绍活动及来宾</p>
<p>14:00-14:20 智能电视与新的发展机遇</p>
<p>14:20-14:50 放眼全球-海外精彩TV应用共享</p>
<p>14:50-15:30 智能电视应用开发指导</p>
<p>15:30-15:40 Coffee Break</p>
<p>15:40-16:20 从Mobile到TV，跨平台开发实战及经验分享</p>
<p>16:20-17:00 手机、平板、TV大融合中的创业机遇 圆桌讨论</p>
<p>17:00-17:10 抽奖</p>
<p>&nbsp;</p>
<p>论坛嘉宾：</p>
<p>朱兴林-微软深圳.NET俱乐部创始人/微软MVP;</p>
<p>葛涵涛-移动新观察论坛(MobileTMT)创始人;</p>
<p>何子艺-三星电子Smart TV应用服务高级经理;</p>
<p>腾讯公司、雷锋网、黑鲨科技、有米网、IDH等公司代表</p>
<p>嘉宾人选不断更新中，请关注深圳.NET俱乐部微博(新浪：<a href="http://weibo.com/szdotnetclub" target="_blank">http://weibo.com/szdotnetclub</a> 腾讯：<a href="http://weibo.com/szdotnetclub" target="_blank">http://t.qq.com/szdotnetclub</a>)获取最新活动和其他深圳.NET俱乐部消息，此篇博文地址：<a href="http://www.cnblogs.com/xlzhu/archive/2011/11/07/2239252.html">http://www.cnblogs.com/xlzhu/archive/2011/11/07/2239252.html</a></p>
<p align="left">&nbsp;</p>
<p align="left">报名方式：新浪微博报名(<a href="http://event.weibo.com/256435" target="_blank">http://event.weibo.com/256435</a>)或到网站报名(<a href="http://www.badadev.com.cn" target="_blank">http://www.badadev.com.cn</a>)</p><img src="http://www.cnblogs.com/xlzhu/aggbug/2239252.html?type=1" width="1" height="1" alt=""/><p>作者: <a href="http://www.cnblogs.com/xlzhu/" target="_blank">xlzhu</a> 发表于 2011-11-07 14:50 <a href="http://www.cnblogs.com/xlzhu/archive/2011/11/07/2239252.html" target="_blank">原文链接</a></p><p>评论: 0　<a href="http://www.cnblogs.com/xlzhu/archive/2011/11/07/2239252.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/xlzhu/archive/2011/11/07/2239252.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/129385/" target="_blank">Jon Rubinstein 暂别科技舞台：再见，HP</a><span style="color:gray">(2012-01-28 21:36)</span><br/>· <a href="http://news.cnblogs.com/n/129384/" target="_blank">塞班3设备更新换代 诺基亚Belle出货</a><span style="color:gray">(2012-01-28 21:34)</span><br/>· <a href="http://news.cnblogs.com/n/129383/" target="_blank">推土机Windows 7补丁权威测试</a><span style="color:gray">(2012-01-28 19:24)</span><br/>· <a href="http://news.cnblogs.com/n/129382/" target="_blank">诺基亚在印度：品牌优势，渠道特点，跟中国的对比</a><span style="color:gray">(2012-01-28 19:21)</span><br/>· <a href="http://news.cnblogs.com/n/129381/" target="_blank">世界最早的计算机密码和黑客</a><span style="color:gray">(2012-01-28 19:20)</span><br/></p><p>编辑推荐：<a href="http://kb.cnblogs.com/page/120592/" target="_blank">Ruby之父松本行弘的编程人生</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">我的园子</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://q.cnblogs.com/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>你吃的食用油是你自己选的吗？是最好的吗？</title><link>http://www.cnblogs.com/AloneSword/archive/2011/11/06/2238317.html</link><dc:creator>孤剑</dc:creator><author>孤剑</author><pubDate>Sun, 06 Nov 2011 11:54:00 GMT</pubDate><guid>http://www.cnblogs.com/AloneSword/archive/2011/11/06/2238317.html</guid><description><![CDATA[<p><p>今天陪LP去逛街，晚上回来时突然说家里的油没有了，一起去买油。到了商场就傻眼了，各种食用油，还有各种阿姨的炮轰，&ldquo;这个好&rdquo;&ldquo;这个今天打折&rdquo;&ldquo;这个今天直降&times;&times;&rdquo;</p>
<p>LP拉着我说要自己选，两个人一商量，只认家里的&ldquo;菜籽油&rdquo;。好不容易在一个角落里找到了3种食用油，两份中粮集团的，一份金龙鱼的，摆在一起对比，冥思苦想，看着上面的各种说明，不知道那种&ldquo;好&rdquo;。</p>
<p>正在冥思时，一个阿姨上来&ldquo;指点&rdquo;了，看看等级、工艺、原料就知道哪种好了。半信半疑的，也不知道她的判断标准是否正确。但家里也没有什么油了，不得已按照她的标准买了个小瓶的回来试试。</p>
<p>回来第一件事情就是查查食用油的标准，看看那个阿姨的所说的3个标准如何，查询有有了下表：</p>
<p>&nbsp;</p>
<p><a href="http://images.cnblogs.com/cnblogs_com/AloneSword/201111/201111061953419821.png"><img style="display: inline; border: 0px;" title="image" src="http://images.cnblogs.com/cnblogs_com/AloneSword/201111/201111061953531041.png" alt="image" width="700" height="305" /></a></p>
<p>&nbsp;</p>
<p>上表是回来后自己查询的结果：越接近天然的越好。以后的标准就按照绿色方格的来：等级：一级；工艺：压榨；原料：非转基因</p><img src="http://www.cnblogs.com/AloneSword/aggbug/2238317.html?type=1" width="1" height="1" alt=""/><p>作者: <a href="http://www.cnblogs.com/AloneSword/" target="_blank">孤剑</a> 发表于 2011-11-06 19:54 <a href="http://www.cnblogs.com/AloneSword/archive/2011/11/06/2238317.html" target="_blank">原文链接</a></p><p>评论: 2　<a href="http://www.cnblogs.com/AloneSword/archive/2011/11/06/2238317.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/AloneSword/archive/2011/11/06/2238317.html#commentform" target="_blank">发表评论</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/129385/" target="_blank">Jon Rubinstein 暂别科技舞台：再见，HP</a><span style="color:gray">(2012-01-28 21:36)</span><br/>· <a href="http://news.cnblogs.com/n/129384/" target="_blank">塞班3设备更新换代 诺基亚Belle出货</a><span style="color:gray">(2012-01-28 21:34)</span><br/>· <a href="http://news.cnblogs.com/n/129383/" target="_blank">推土机Windows 7补丁权威测试</a><span style="color:gray">(2012-01-28 19:24)</span><br/>· <a href="http://news.cnblogs.com/n/129382/" target="_blank">诺基亚在印度：品牌优势，渠道特点，跟中国的对比</a><span style="color:gray">(2012-01-28 19:21)</span><br/>· <a href="http://news.cnblogs.com/n/129381/" target="_blank">世界最早的计算机密码和黑客</a><span style="color:gray">(2012-01-28 19:20)</span><br/></p><p>编辑推荐：<a href="http://kb.cnblogs.com/page/120592/" target="_blank">Ruby之父松本行弘的编程人生</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">我的园子</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://q.cnblogs.com/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item></channel></rss>
