<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_wuhuacong(伍华聪)的专栏</title><subtitle type="text"/><id>http://feed.cnblogs.com/blog/u/12391/rss</id><updated>2012-02-09T23:35:36Z</updated><author><name>伍华聪</name><uri>http://www.cnblogs.com/wuhuacong/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/wuhuacong/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/12391/rss"/><entry><id>http://www.cnblogs.com/wuhuacong/archive/2012/02/10/2344722.html</id><title type="text">淘宝API开发系列---淘宝API的测试及使用2</title><summary type="text">继续前面一篇随笔《淘宝API开发系列---淘宝API的测试及使用》，来继续介绍淘宝API的具体代码开发部分，上篇主要是介绍淘宝SDK开发的一些流程及必备的信息，以及掌握如何学会利用API文档、淘宝API测试工具来获取我们所需的数据，其中我一般倾向于获取Json数据，然后进行分析，其中Json数据可以通过JsonView工具（http://jsonviewer.codeplex.com/）进行格式化显示，方便我们了解和区分各个属性的信息。另外淘宝的SDK里面，封装了很多对象，我们通过数据就可以获取到相关的信息了，不过注意的就是，我们每个接口调用，都要传入Fields的属性，如果我们没有指定相应的属性字段，那么接口返回的数据，就没有这项的，淘宝SDK的对象属性就会为空。</summary><published>2012-02-09T23:36:00Z</published><updated>2012-02-09T23:36:00Z</updated><author><name>伍华聪</name><uri>http://www.cnblogs.com/wuhuacong/</uri></author><link rel="alternate" href="http://www.cnblogs.com/wuhuacong/archive/2012/02/10/2344722.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/wuhuacong/archive/2012/02/10/2344722.html"/><content type="html">&lt;p&gt;继续前面一篇随笔《&lt;span  style="font-family: verdana, Arial, Helvetica, sans-serif; line-height: 18px; "&gt;&lt;a  href="http://www.cnblogs.com/wuhuacong/archive/2012/02/09/2344703.html" target="_blank" style="color: red; font-size: 14px; font-weight: bold; text-decoration: underline; "&gt;&lt;span&gt;淘宝API开发系列---淘宝API的测试及使用&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;》，来继续介绍淘宝API的具体代码开发部分，上篇主要是介绍淘宝SDK开发的一些流程及必备的信息，以及掌握如何学会利用API文档、淘宝API测试工具来获取我们所需的数据，其中我一般倾向于获取Json数据，然后进行分析，其中Json数据可以通过JsonView工具（&lt;a href="http://jsonviewer.codeplex.com/"&gt;http://jsonviewer.codeplex.com/&lt;/a&gt;）进行格式化显示，方便我们了解和区分各个属性的信息。另外淘宝的SDK里面，封装了很多对象，我们通过数据就可以获取到相关的信息了，不过注意的就是，我们每个接口调用，都要传入Fields的属性，如果我们没有指定相应的属性字段，那么接口返回的数据，就没有这项的，淘宝SDK的对象属性就会为空。&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/wuhuacong/taobao/taobaoJsonData.png" width="712" height="580" alt="" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;通过以上的工具，我们就能可视化属性的信息了，对接口数据的理解就更加清晰，首先我们来看看我测试例子的运行效果如下所示。&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/wuhuacong/taobao/taobaoSDKSample.png" width="952" height="471" alt="" /&gt;&lt;/p&gt;&lt;p&gt;其中上面例子的代码如下所示。&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;void&lt;/span&gt;&amp;nbsp;TestUserGet()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;单独用户的信息&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;单独用户的信息&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UserGetRequest&amp;nbsp;req&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&amp;nbsp;UserGetRequest();&amp;nbsp;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;实例化具体API对应的Request类&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;req.Fields&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;user_id,nick,created,buyer_credit,type,sex&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;req.Nick&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;wuhuacong&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UserGetResponse&amp;nbsp;rsp&amp;nbsp;=&amp;nbsp;myclient.Execute(req);&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;执行API请求并将该类转换为response对象&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine(rsp.Body);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&amp;nbsp;(rsp.User&amp;nbsp;!=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;null&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;Console.WriteLine(rsp.User.Nick);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;Console.WriteLine(ObjectToString(rsp.User));&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;List&amp;lt;User&amp;gt;&amp;nbsp;list&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&amp;nbsp;List&amp;lt;User&amp;gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list.Add(rsp.User);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.winGridView1.DisplayColumns&amp;nbsp;=&amp;nbsp;req.Fields.Replace(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;_&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: #800000;"&gt;""&lt;/span&gt;);&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;对应字段的属性没有&amp;#8220;_&amp;#8221;字符的&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.winGridView1.DataSource&amp;nbsp;=&amp;nbsp;list;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;void&lt;/span&gt;&amp;nbsp;TestItemGet()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;单独商品的信息&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;单独商品的信息&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ItemGetRequest&amp;nbsp;req&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&amp;nbsp;ItemGetRequest();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;req.Fields&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;num_iid,title,nick,pic_path,cid,price,type,location.city,delist_time,post_fee&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;req.NumIid&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800080;"&gt;3838293428L&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ItemGetResponse&amp;nbsp;itemRsp&amp;nbsp;=&amp;nbsp;myclient.Execute(req);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&amp;nbsp;(itemRsp&amp;nbsp;!=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;null&lt;/span&gt;&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;itemRsp.Item&amp;nbsp;!=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;null&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;Console.WriteLine(itemRsp.Item.Nick);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;Console.WriteLine(ObjectToString(itemRsp.Item));&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;List&amp;lt;Item&amp;gt;&amp;nbsp;list&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&amp;nbsp;List&amp;lt;Item&amp;gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list.Add(itemRsp.Item);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.winGridView1.DisplayColumns&amp;nbsp;=&amp;nbsp;req.Fields.Replace(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;_&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: #800000;"&gt;""&lt;/span&gt;);&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;对应字段的属性没有&amp;#8220;_&amp;#8221;字符的&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.winGridView1.DataSource&amp;nbsp;=&amp;nbsp;list;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;void&lt;/span&gt;&amp;nbsp;TestItemSearch()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;查询商品信息（不含类别）&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;查询商品信息（不含类别）&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ItemsGetRequest&amp;nbsp;req&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&amp;nbsp;ItemsGetRequest();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;req.Fields&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;num_iid,title,nick,pic_url,cid,price,type,delist_time,post_fee,score,volume&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;,location.city,location.state";&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;req.Q&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;笔记本&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;itemReq.Cid&amp;nbsp;=&amp;nbsp;"14";&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;req.OrderBy&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;volume:desc&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;req.PageNo&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800080;"&gt;1&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;req.PageSize&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800080;"&gt;40&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;显示列表信息&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ItemsGetResponse&amp;nbsp;itemRsp&amp;nbsp;=&amp;nbsp;myclient.Execute(req);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&amp;nbsp;(itemRsp&amp;nbsp;!=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;null&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;Console.WriteLine(itemRsp.TotalResults);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;foreach&amp;nbsp;(Item&amp;nbsp;item&amp;nbsp;in&amp;nbsp;itemRsp.Items)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine(ObjectToString(item));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;}&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.winGridView1.DisplayColumns&amp;nbsp;=&amp;nbsp;req.Fields.Replace(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;_&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: #800000;"&gt;""&lt;/span&gt;);&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;对应字段的属性没有&amp;#8220;_&amp;#8221;字符的&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.winGridView1.DataSource&amp;nbsp;=&amp;nbsp;itemRsp.Items;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;span  style="font-family: 'Courier New'; font-size: 13px; line-height: 19px; "&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;对于需要获取用户私密信息，如买入卖出等重要信息，还需要获取用户的SessionKey的，我们可以通过下面接口函数，弹出登录窗口，然后登录后，定位到对应的App应用页面，然后页面加载的时候，获取到对应的SessionKey、&lt;/p&gt;&lt;p&gt;&lt;span  style="font-family: Arial; line-height: 25px; "&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/wuhuacong/taobao/login.png" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-style: initial; border-color: initial; " /&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div style="display: inline-block; "&gt;&lt;/div&gt;&lt;span  style="font-family: Arial; line-height: 25px; "&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/wuhuacong/taobao/GetSessionKey.png" width="585" height="485" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-style: initial; border-color: initial; " /&gt;&amp;nbsp;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;判断是否顺利获取SessionKey&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&amp;nbsp;GetAuthorizeCode(&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&amp;nbsp;appKey)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&amp;nbsp;authorizeCode&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800000;"&gt;""&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FrmAuthorized&amp;nbsp;dlg&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&amp;nbsp;FrmAuthorized();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dlg.AppKey&amp;nbsp;=&amp;nbsp;appkey;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&amp;nbsp;(dlg.ShowDialog()&amp;nbsp;==&amp;nbsp;DialogResult.OK)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;authorizeCode&amp;nbsp;=&amp;nbsp;dlg.AuthrizeCode;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&amp;nbsp;(&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;.IsNullOrEmpty(authorizeCode))&amp;nbsp;&lt;span style="color: #0000FF;"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;null&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&amp;nbsp;sessionKeyUrl&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;.Format(TOP_AUTH_URL,&amp;nbsp;authorizeCode);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HttpHelper&amp;nbsp;helper&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&amp;nbsp;HttpHelper();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&amp;nbsp;html&amp;nbsp;=&amp;nbsp;helper.GetHtml(sessionKeyUrl);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;格式&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;top_appkey=1142&amp;amp;top_parameters=xxx&amp;amp;top_session=xxx&amp;amp;top_sign=xxx&amp;amp;encode=utf-8&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&amp;nbsp;reg&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;.*?&amp;amp;top_session=(?&amp;lt;session&amp;gt;.*?)&amp;amp;top_sign&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&amp;nbsp;sessionKey&amp;nbsp;=&amp;nbsp;CRegex.GetText(html,&amp;nbsp;reg,&amp;nbsp;&lt;span style="color: #800080;"&gt;1&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;return&lt;/span&gt;&amp;nbsp;sessionKey;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;span  style="font-family: 'Courier New'; font-size: 13px; line-height: 19px; "&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;最后我们看看其中获取已买记录的接口实现如下所示。&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;void&lt;/span&gt;&amp;nbsp;TestBuyInfo()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&amp;nbsp;(&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;.IsNullOrEmpty(sessionKey))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sessionKey&amp;nbsp;=&amp;nbsp;GetAuthorizeCode(&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.appkey);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;买入交易&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;买入交易&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TradesBoughtGetRequest&amp;nbsp;req&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&amp;nbsp;TradesBoughtGetRequest();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;req.Fields&amp;nbsp;=&amp;nbsp;"tid,title,price,type,num_iid,seller_nick,buyer_nick,status";&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;req.Fields&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;tid,title,price,type,num_iid,seller_nick,buyer_nick,status,receiver_state,receiver_city,receiver_district,receiver_address&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;req.PageNo&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800080;"&gt;1L&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;req.PageSize&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800080;"&gt;40L&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TradesBoughtGetResponse&amp;nbsp;rsp&amp;nbsp;=&amp;nbsp;myclient.Execute(req,&amp;nbsp;sessionKey);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&amp;nbsp;(rsp&amp;nbsp;!=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;null&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;Console.WriteLine(rsp.Trades.Count);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;if&amp;nbsp;(rsp.Trades.Count&amp;nbsp;&amp;gt;&amp;nbsp;0)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foreach&amp;nbsp;(Trade&amp;nbsp;item&amp;nbsp;in&amp;nbsp;rsp.Trades)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine(ObjectToString(item));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;}&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.winGridView1.DisplayColumns&amp;nbsp;=&amp;nbsp;req.Fields.Replace(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;_&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: #800000;"&gt;""&lt;/span&gt;);&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;对应字段的属性没有&amp;#8220;_&amp;#8221;字符的&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.winGridView1.DataSource&amp;nbsp;=&amp;nbsp;rsp.Trades;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;span  style="font-family: 'Courier New'; font-size: 13px; line-height: 19px; "&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;以上利用了我的Winform分页控件进行数据展示，因此代码要简化一些，当然，也可以用DataGridView来进行数据显示，不过代码方面可能要多一些。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/wuhuacong/aggbug/2344722.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/wuhuacong/archive/2012/02/10/2344722.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/wuhuacong/archive/2012/02/09/2344703.html</id><title type="text">淘宝API开发系列---淘宝API的测试及使用</title><summary type="text">在很久之前，由于对淘宝的API开发比较感兴趣，写了几篇关于淘宝API开发方面的随笔《淘宝API开发系列--开篇概述》和《淘宝API开发系列--商家的绑定》等文章，近期由于一客户需要一些淘宝API的例子，而我原来开发的例子已经过去两年了，之前我是基于一个中间组件top4net来进行开发的，这个模块就是在淘宝API SDK的基础上做了一些封装，不过原来的例子确已经不能运行了。因此重新捡起行头，继续研究有啥变化的地方，不过发现虽然时间过去已经快两年了，淘宝API的使用模式，一直没有变化过，可能变化的就是API的一些细微的地方吧，因此这次，就摒弃了中间组件的方式，就直接使用淘宝官方提供的taobao-sdk-net.zip(http://dl.open.taobao.com/sdk/taobao-sdk-net.zip) 来进行开发，发现其实模式一样，操作也差不多而已，但是处理起来的细节有很多不同的地方。</summary><published>2012-02-09T15:55:00Z</published><updated>2012-02-09T15:55:00Z</updated><author><name>伍华聪</name><uri>http://www.cnblogs.com/wuhuacong/</uri></author><link rel="alternate" href="http://www.cnblogs.com/wuhuacong/archive/2012/02/09/2344703.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/wuhuacong/archive/2012/02/09/2344703.html"/><content type="html">&lt;p&gt;在很久之前，由于对淘宝的API开发比较感兴趣，写了几篇关于淘宝API开发方面的随笔《&lt;span  style="font-family: Arial; font-weight: bold; line-height: 25px; "&gt;&lt;a id="cb_post_title_url" href="http://www.cnblogs.com/wuhuacong/archive/2010/03/19/1690240.html" style="color: #223355; text-decoration: none; "&gt;淘宝API开发系列--开篇概述&lt;/a&gt;&lt;/span&gt;》和《&lt;span  style="font-family: Arial; font-weight: bold; line-height: 25px; "&gt;&lt;a id="cb_post_title_url" href="http://www.cnblogs.com/wuhuacong/archive/2010/03/26/1697005.html" style="color: #223355; text-decoration: underline; "&gt;淘宝API开发系列--商家的绑定&lt;/a&gt;&lt;/span&gt;》等文章，近期由于一客户需要一些淘宝API的例子，而我原来开发的例子已经过去两年了，之前我是基于一个中间组件top4net来进行开发的，这个模块就是在淘宝API SDK的基础上做了一些封装，不过原来的例子确已经不能运行了。&lt;/p&gt;&lt;p&gt;因此重新捡起行头，继续研究有啥变化的地方，不过发现虽然时间过去已经快两年了，淘宝API的使用模式，一直没有变化过，可能变化的就是API的一些细微的地方吧，因此这次，就摒弃了中间组件的方式，就直接使用淘宝官方提供的taobao-sdk-net.zip(http://dl.open.taobao.com/sdk/taobao-sdk-net.zip) 来进行开发，发现其实模式一样，操作也差不多而已，但是处理起来的细节有很多不同的地方。&lt;/p&gt;&lt;p&gt;为了进行淘宝的API开发，首先我们需要做下面几件事情。&lt;/p&gt;&lt;p&gt;1）&lt;/p&gt;&lt;div style="display: inline-block; "&gt;&lt;/div&gt;&lt;span  style="font-family: Arial; line-height: 25px; "&gt;开发者注册一个账号，&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span  style="font-family: Arial; line-height: 25px; "&gt;2）然后为每个淘宝应用注册一个应用程序键（App Key)&lt;/span&gt;&amp;nbsp;。&lt;/p&gt;&lt;p&gt;3）下载淘宝API的SDK并掌握基本的API基础知识和调用，具体可以参考论坛的信息（&lt;a href="http://dev.open.taobao.com/bbs/forum.php"&gt;http://dev.open.taobao.com/bbs/forum.php&lt;/a&gt;&amp;nbsp;）里面的技术分享区等。&lt;/p&gt;&lt;p&gt;4）利用SDK接口和对象，传入AppKey或者必要的时候获取并传入SessionKey来进行程序开发。&lt;/p&gt;&lt;p&gt;5）利用淘宝平台的文档中心和API测试工具，对接口进行测试。从而了解返回信息，方便程序获取。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;以上是一般淘宝API应用开发的关键流程，其中通过淘宝文档中心和API测试工具，进行概念了解和接口信息查询很重要。因为这些数据就是我们需要在逐步显示出来的。淘宝的API很多，不过都分为了好几个领域，慢慢就会了解深入了。&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/wuhuacong/taobao/taobaoDoc.png" width="648" height="541" alt="" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;然后我们也可以通过淘宝平台的API测试工具来了解返回的数据信息，每个淘宝API最下面一般都有一个API工具的内容，如下所示。其中我们选择【API Tools在线测试工具】就可以测试返回的接口数据了。&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/wuhuacong/taobao/taobaoDocAPI.png" width="835" height="157" alt="" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/wuhuacong/taobao/taobaoAPITest.png" width="1002" height="619" alt="" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;对于以上这些淘宝API接口，不需要Session就可以访问的，就直接利用【系统分配】的内容就可以访问并获取到数据了。注意其中红色圈中部分即可。&lt;/p&gt;&lt;p&gt;对于有一些用户方面的私密数据，如交易数据，买入或者卖出的数据，我们就要自定义指定自己的SessionKey了，如下所示。&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/wuhuacong/taobao/taobaoAPITest2.png" width="1033" height="500" alt="" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;卖出的信息，也需要传入SessionKey的信息，在程序中处理，得到下面的结果。&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/wuhuacong/taobao/SoldOut.jpg" alt="" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/wuhuacong/aggbug/2344703.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/wuhuacong/archive/2012/02/09/2344703.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/wuhuacong/archive/2012/02/09/2341927.html</id><title type="text">Database2Sharp版本更新之自定义模板生成</title><summary type="text">代码生成工具一直是很多从事开发人员的必备，一般开发人员都会选择一款高效、适合自己开发模式的代码生成工具，我也不例外，我一直让我的Database2Sharp(http://www.iqidi.com/database2sharp.htm)代码生成工具围绕我的开发框架来生成代码，至今已经经过快7个年头的洗礼，主要是提供高效、快速的一键生成整个项目框架源码的操作。代码生成工具Database2Sharp自一开始，就采用基于模板方式的代码生成方式，这样提高生成效率，并且减少维护成本（相对某些硬编码代码生成的方式更优），方便用户对模板进行适当的修改等特点，不过虽然是提供了模板修改的功能，但是由于在工具的主界面上，并未提供对自定义模板文件的管理，因此以前的版本一直没有完成用户自定义模板管理维护的功能，本次版本更新就是弥补这一不足，发挥模板应有的魅力和功能。</summary><published>2012-02-09T01:57:00Z</published><updated>2012-02-09T01:57:00Z</updated><author><name>伍华聪</name><uri>http://www.cnblogs.com/wuhuacong/</uri></author><link rel="alternate" href="http://www.cnblogs.com/wuhuacong/archive/2012/02/09/2341927.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/wuhuacong/archive/2012/02/09/2341927.html"/><content type="html">&lt;div&gt;代码生成工具一直是很多从事开发人员的必备，一般开发人员都会选择一款高效、适合自己开发模式的代码生成工具，我也不例外，我一直让我的Database2Sharp(&lt;a href="http://www.iqidi.com/database2sharp.htm"&gt;http://www.iqidi.com/database2sharp.htm&lt;/a&gt;)代码生成工具围绕我的开发框架来生成代码，至今已经经过快7个年头的洗礼，主要是提供高效、快速的一键生成整个项目框架源码的操作。&lt;/div&gt;&#xD;
&lt;p&gt;代码生成工具Database2Sharp自一开始，就采用基于模板方式的代码生成方式，这样提高生成效率，并且减少维护成本（相对某些硬编码代码生成的方式更优），方便用户对模板进行适当的修改等特点，不过虽然是提供了模板修改的功能，但是由于在工具的主界面上，并未提供对自定义模板文件的管理，因此以前的版本一直没有完成用户自定义模板管理维护的功能，本次版本更新就是弥补这一不足，发挥模板应有的魅力和功能。&lt;/p&gt;&#xD;
&lt;p&gt;在实际开发当中，自定义模板生成是很多代码生成工具生成代码的重要补充，例如有些项目代码片段需要（&lt;strong&gt;例如控件赋值语句，或者控件数据显示语句等&lt;/strong&gt;），如果能通过自定义模板方式，利用模板引擎的灵活特点，以及已有数据库的结构信息，就很方便生成重复性强、有一定规律的代码。&lt;/p&gt;&#xD;
&lt;p&gt;因此，本次Database2Sharp版本更新，主要就是提供一个对自定义模板管理，方便利用自定义模板灵活、高效的特点，并且利用后台数据库表、字段等信息，为实际的项目代码片段生成服务，本次还调整了整体的软件界面布局，利用成熟的Weifenluo布局控件，更好展示多文档的信息。&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/wuhuacong/Database2Sharp/Database2sharp8.png" width="992" height="685" alt="" /&gt;&lt;br /&gt;&#xD;
&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;我们来看看自定义代码生成模块的功能是如何实现的，首先提供一个自定义模板列表进行维护，可以通过右键菜单进行添加、修改、重命名、删除等操作，模板代码可以进行【直接执行模板】和【选表进行代码生成】两种方式。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/wuhuacong/Database2Sharp/Database2sharp8_1.png" width="992" height="784" alt="" /&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;利用【选表进行代码生成】方式，可以很好利用后台的数据库表、字段等信息，结合模板生成高效的代码，如下所示。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/wuhuacong/Database2Sharp/Database2sharp8_2.png" width="992" height="780" alt="" /&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
另外，为了方便大家对模板引擎NVelocity的了解，在软件工具安装的时候，附带了几个常见的例子，如下所示。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/wuhuacong/Database2Sharp/Database2sharp8_3.png" width="217" height="225" alt="" /&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;例子的代码大致如下所示，主要是让大家快速了解Nvelocity的模板语言VTL的使用。如果对模板引擎更加深入的了解，可以查看我之前的随笔《&lt;a id="cb_post_title_url" href="http://www.cnblogs.com/wuhuacong/archive/2007/11/17/962172.html" style="color: #223355; "&gt;强大的模板引擎开源软件NVelocity&lt;/a&gt;》进一步了解。&lt;/p&gt;&#xD;
&lt;p&gt;遍历及注释，赋值语句例子。&amp;nbsp;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;##Foreach语法操作函数&lt;br /&gt;&#xD;
&lt;br /&gt;&#xD;
#&lt;span style="color: #0000FF;"&gt;set&lt;/span&gt;(&amp;nbsp;$criteria&amp;nbsp;=&amp;nbsp;[&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;name&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;address&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;]&amp;nbsp;)&lt;br /&gt;&#xD;
#&lt;span style="color: #0000FF;"&gt;foreach&lt;/span&gt;(&amp;nbsp;$criterion&amp;nbsp;&lt;span style="color: #0000FF;"&gt;in&lt;/span&gt;&amp;nbsp;$criteria&amp;nbsp;)&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$criterion&lt;br /&gt;&#xD;
#end&lt;br /&gt;&#xD;
&lt;br /&gt;&#xD;
&lt;br /&gt;&#xD;
##注释操作&lt;br /&gt;&#xD;
&lt;br /&gt;&#xD;
注释&lt;br /&gt;&#xD;
单行注释&lt;br /&gt;&#xD;
##&amp;nbsp;This&amp;nbsp;&lt;span style="color: #0000FF;"&gt;is&lt;/span&gt;&amp;nbsp;a&amp;nbsp;single&amp;nbsp;line&amp;nbsp;comment&lt;br /&gt;&#xD;
&lt;br /&gt;&#xD;
多行注释&amp;nbsp;&lt;br /&gt;&#xD;
#*&lt;br /&gt;&#xD;
&amp;nbsp;Thus&amp;nbsp;begins&amp;nbsp;a&amp;nbsp;multi-line&amp;nbsp;comment.&amp;nbsp;Online&amp;nbsp;visitors&amp;nbsp;won&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;t&lt;/span&gt;&lt;span style="color: #800000;"&gt;&lt;br /&gt;&#xD;
&lt;/span&gt;&amp;nbsp;see&amp;nbsp;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;&amp;nbsp;text&amp;nbsp;because&amp;nbsp;the&amp;nbsp;Velocity&amp;nbsp;Templating&amp;nbsp;Engine&amp;nbsp;will&lt;br /&gt;&#xD;
&amp;nbsp;ignore&amp;nbsp;it.&lt;br /&gt;&#xD;
&lt;span style="font-family: verdana, 'courier new'; font-size: 14px; line-height: 21px; "&gt;*#&lt;/span&gt;&lt;span style="font-family: verdana, 'courier new'; font-size: 14px; line-height: 21px; "&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
&lt;/p&gt;&#xD;
&lt;p&gt;条件结构的例子&amp;nbsp;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;##此处为注释说明&lt;br /&gt;&#xD;
##简单例子(主要规则：引用以$开头用于取得什么东西，而指令以#&amp;nbsp;开始用于做什么事情)&lt;br /&gt;&#xD;
##在VTL中，所有变量标识符的开头要加上$字符，如$Name，也可以用一种更加明确的方法表示，例如${name}。&lt;br /&gt;&#xD;
&lt;br /&gt;&#xD;
#&lt;span style="color: #0000FF;"&gt;set&lt;/span&gt;($foo&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;false&lt;/span&gt;)&lt;br /&gt;&#xD;
&lt;span style="color: #0000FF;"&gt;#if&lt;/span&gt;&amp;nbsp;($foo)&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;is&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;true&lt;/span&gt;&lt;br /&gt;&#xD;
#elseif&amp;nbsp;($bar)&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;is&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;false&lt;/span&gt;&lt;br /&gt;&#xD;
#elseif&amp;nbsp;(&lt;span style="color: #0000FF;"&gt;true&lt;/span&gt;)&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;&amp;nbsp;should&amp;nbsp;be&amp;nbsp;followed&amp;nbsp;by&amp;nbsp;two&amp;nbsp;blank&amp;nbsp;lines&lt;br /&gt;&#xD;
#end&lt;br /&gt;&#xD;
&lt;br /&gt;&#xD;
##&amp;nbsp;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;is&lt;/span&gt;&amp;nbsp;a&amp;nbsp;single&amp;nbsp;line&amp;nbsp;comment&lt;br /&gt;&#xD;
&lt;br /&gt;&#xD;
#*&lt;br /&gt;&#xD;
&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;is&lt;/span&gt;&amp;nbsp;a&amp;nbsp;multi&amp;nbsp;line&amp;nbsp;comment&lt;br /&gt;&#xD;
&lt;span style="color: #0000FF;"&gt;#if&lt;/span&gt;&amp;nbsp;(&lt;br /&gt;&#xD;
*#&lt;br /&gt;&#xD;
&lt;br /&gt;&#xD;
&lt;br /&gt;&#xD;
#&lt;span style="color: #0000FF;"&gt;set&lt;/span&gt;($user&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;jason&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;)&lt;br /&gt;&#xD;
#&lt;span style="color: #0000FF;"&gt;set&lt;/span&gt;($login&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;false&lt;/span&gt;)&lt;br /&gt;&#xD;
#&lt;span style="color: #0000FF;"&gt;set&lt;/span&gt;($count&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800080;"&gt;5&lt;/span&gt;)&lt;br /&gt;&#xD;
&lt;br /&gt;&#xD;
&lt;span style="color: #0000FF;"&gt;#if&lt;/span&gt;&amp;nbsp;($user&amp;nbsp;==&amp;nbsp;"jason")&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;the&amp;nbsp;user&amp;nbsp;$user&amp;nbsp;&lt;span style="color: #0000FF;"&gt;is&lt;/span&gt;&amp;nbsp;logged&amp;nbsp;&lt;span style="color: #0000FF;"&gt;in&lt;/span&gt;!&lt;br /&gt;&#xD;
#end&lt;br /&gt;&#xD;
&lt;br /&gt;&#xD;
&lt;span style="color: #0000FF;"&gt;#if&lt;/span&gt;&amp;nbsp;($count&amp;nbsp;==&amp;nbsp;5)&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;the&amp;nbsp;count&amp;nbsp;&lt;span style="color: #0000FF;"&gt;is&lt;/span&gt;&amp;nbsp;&lt;span style="color: #800080;"&gt;5&lt;/span&gt;!&lt;br /&gt;&#xD;
#end&lt;br /&gt;&#xD;
&lt;br /&gt;&#xD;
&lt;span style="color: #0000FF;"&gt;#if&lt;/span&gt;&amp;nbsp;($login&amp;nbsp;==&amp;nbsp;false)&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;the&amp;nbsp;user&amp;nbsp;isn&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;t&amp;nbsp;logged&amp;nbsp;in.&lt;/span&gt;&lt;span style="color: #800000;"&gt;&lt;br /&gt;&#xD;
&lt;/span&gt;#end&lt;br /&gt;&#xD;
&lt;br /&gt;&#xD;
&lt;span style="color: #0000FF;"&gt;#if&lt;/span&gt;&amp;nbsp;($count&amp;nbsp;!=&amp;nbsp;3)&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;\$count&amp;nbsp;&lt;span style="color: #0000FF;"&gt;is&lt;/span&gt;&amp;nbsp;not&amp;nbsp;equal&amp;nbsp;to&amp;nbsp;&lt;span style="color: #800080;"&gt;3&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: verdana, 'courier new'; font-size: 14px; line-height: 21px; "&gt;#end&lt;/span&gt;&lt;span style="font-family: verdana, 'courier new'; font-size: 14px; line-height: 21px; "&gt;&amp;nbsp;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
&lt;/p&gt;&#xD;
&lt;p&gt;宏脚本例子&amp;nbsp;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;##&amp;nbsp;#macro&amp;nbsp;脚本元素允许模板设计者在VTL&amp;nbsp;模板中定义重复的段。&amp;nbsp;&lt;br /&gt;&#xD;
##&amp;nbsp;Velocimacros&amp;nbsp;不管是在复杂还是简单的场合都非常有用。&lt;br /&gt;&#xD;
##&amp;nbsp;下面这个Velocimacro，仅用来节省击键和减少排版错误，介绍了一些NVelocity宏的概念。&amp;nbsp;&lt;br /&gt;&#xD;
##&amp;nbsp;可以带参数，参数放在宏名称的后面，空格隔开&lt;br /&gt;&#xD;
&lt;br /&gt;&#xD;
#macro(&amp;nbsp;d&amp;nbsp;)&lt;br /&gt;&#xD;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;&#xD;
#end&lt;br /&gt;&#xD;
&lt;span style="font-family: verdana, 'courier new'; font-size: 14px; line-height: 21px; "&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: verdana, 'courier new'; font-size: 14px; line-height: 21px; "&gt;#d()&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
&lt;/p&gt;&#xD;
&lt;p&gt;以及一些常用的赋值及数据显示代码片段&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;初始化&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;param&amp;nbsp;name="info"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;实体类信息&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&#xD;
&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;void&lt;/span&gt;&amp;nbsp;InitData(${ClassName}Info&amp;nbsp;info)&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&#xD;
#&lt;span style="color: #0000FF;"&gt;foreach&lt;/span&gt;($ColumnInfo&amp;nbsp;&lt;span style="color: #0000FF;"&gt;in&lt;/span&gt;&amp;nbsp;${TableInfo.ColumnList.Values})&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&#xD;
&lt;span style="color: #0000FF;"&gt;#if&lt;/span&gt;(${ColumnInfo.AutoIncrement}&amp;nbsp;==&amp;nbsp;false)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&#xD;
&lt;span style="color: #0000FF;"&gt;#if&lt;/span&gt;(${ColumnInfo.NetType}&amp;nbsp;==&amp;nbsp;"System.String"&amp;nbsp;)&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.txt${ColumnInfo.Name.Alias.ToCapit()}.Text&amp;nbsp;=&amp;nbsp;info.${ColumnInfo.Name.Alias.ToCapit()};&lt;br /&gt;&#xD;
#elseif(${ColumnInfo.NetType}&amp;nbsp;==&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;System.DateTime&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;)&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.txt${ColumnInfo.Name.Alias.ToCapit()}.Text&amp;nbsp;=&amp;nbsp;info.${ColumnInfo.Name.Alias.ToCapit()}.ToShortDateString();&lt;br /&gt;&#xD;
&lt;span style="color: #0000FF;"&gt;#else&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.txt${ColumnInfo.Name.Alias.ToCapit()}.Text&amp;nbsp;=&amp;nbsp;info.${ColumnInfo.Name.Alias.ToCapit()}.ToString();&lt;br /&gt;&#xD;
#end&lt;br /&gt;&#xD;
#end&amp;nbsp;#&lt;span style="color: #0000FF;"&gt;#endif&lt;/span&gt;&lt;br /&gt;&#xD;
#end&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;获取数据&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&#xD;
&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;private&lt;/span&gt;&amp;nbsp;${ClassName}Info&amp;nbsp;GetData()&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;${ClassName}Info&amp;nbsp;info&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&amp;nbsp;${ClassName}Info();&lt;br /&gt;&#xD;
#&lt;span style="color: #0000FF;"&gt;foreach&lt;/span&gt;($ColumnInfo&amp;nbsp;&lt;span style="color: #0000FF;"&gt;in&lt;/span&gt;&amp;nbsp;${TableInfo.ColumnList.Values})&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&#xD;
&lt;span style="color: #0000FF;"&gt;#if&lt;/span&gt;(${ColumnInfo.AutoIncrement}&amp;nbsp;==&amp;nbsp;false)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&#xD;
&lt;span style="color: #0000FF;"&gt;#if&lt;/span&gt;(${ColumnInfo.NetType}&amp;nbsp;==&amp;nbsp;"System.Decimal"&amp;nbsp;)&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;info.${ColumnInfo.Name.Alias.ToCapit()}&amp;nbsp;=&amp;nbsp;Helper.SafeConvertDecimal(&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.txt${ColumnInfo.Name.Alias.ToCapit()}.Text);&lt;br /&gt;&#xD;
#elseif(${ColumnInfo.NetType}&amp;nbsp;==&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;System.DateTime&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;info.${ColumnInfo.Name.Alias.ToCapit()}&amp;nbsp;=&amp;nbsp;Helper.SafeConvertDate(&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.txt${ColumnInfo.Name.Alias.ToCapit()}.Text);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&#xD;
&lt;span style="color: #0000FF;"&gt;#else&lt;/span&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;info.${ColumnInfo.Name.Alias.ToCapit()}&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.txt${ColumnInfo.Name.Alias.ToCapit()}.Text;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&#xD;
#end&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&#xD;
#end&amp;nbsp;#&lt;span style="color: #0000FF;"&gt;#endif&lt;/span&gt;&lt;br /&gt;&#xD;
#end&lt;/div&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: verdana, 'courier new'; font-size: 14px; line-height: 21px; "&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;span style="font-family: verdana, 'courier new'; font-size: 14px; line-height: 21px; "&gt;&amp;nbsp;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&#xD;
&lt;/p&gt;&#xD;
&lt;p&gt;当然，了解这些可能还不够，还需要了解模板后台，能够利用的数据属性等信息，包括数据库、表、字段等相关的属性，方便在模板引擎中进行调用，生成更加强大的代码片段。&lt;/p&gt;&#xD;
&lt;p&gt;软件安装后，有一个帮助文件，是提供给开发者进行了解模板后台数据的相关属性和方法的，如下所示。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/wuhuacong/Database2Sharp/Database2sharp8_4.png" width="526" height="147" alt="" /&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;运行后如下所示：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/wuhuacong/Database2Sharp/Database2sharp8_5.png" width="962" height="716" alt="" /&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;除了以上新增的功能外，一键生成基于我的Winform框架结构的项目代码，是最为重要的功能，可以体验一下。另外，代码生成工具生成的数据库文档，快速生成实体类信息等模块，也是开发非常常用的功能，如果想了解更加关于我的代码生成工具的信息，可以参考我博客里面的标签【&lt;a href="http://www.cnblogs.com/wuhuacong/tag/%E4%BB%A3%E7%A0%81%E7%94%9F%E6%88%90%E5%B7%A5%E5%85%B7/" style="color: #000000; text-decoration: none; display: inline-block; margin-right: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; font-size: 13px; line-height: normal; background-color: #eeeeee; "&gt;代码生成工具&lt;/a&gt;】。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/wuhuacong/aggbug/2341927.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/wuhuacong/archive/2012/02/09/2341927.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/wuhuacong/archive/2012/01/18/2325967.html</id><title type="text">数据库访问之Sqlite的不同之处</title><summary type="text">在我的Winform开发框架中，底层的数据访问支持多种不同的数据库，在数据库访问的开发过程中，发现Sqlite多数情况下，操作都和SqlServer或者说是和标准Sql差不多的。当然，Sqlite本身也有一些特殊的语句支持，本文主要根据自己的了解，以及在支持的Sqlite基类中的提炼，总结他们常用到的一些不同，以便以后查阅，并和大家分享讨论。在我的Winform开发框架中，是支持Sqlite等这样的数据库接入的，示例图如下所示。</summary><published>2012-01-18T13:37:00Z</published><updated>2012-01-18T13:37:00Z</updated><author><name>伍华聪</name><uri>http://www.cnblogs.com/wuhuacong/</uri></author><link rel="alternate" href="http://www.cnblogs.com/wuhuacong/archive/2012/01/18/2325967.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/wuhuacong/archive/2012/01/18/2325967.html"/><content type="html">&lt;p&gt;在我的Winform开发框架中，底层的数据访问支持多种不同的数据库，在数据库访问的开发过程中，发现Sqlite多数情况下，操作都和SqlServer或者说是和标准Sql差不多的。当然，Sqlite本身也有一些特殊的语句支持，本文主要根据自己的了解，以及在支持的Sqlite基类中的提炼，总结他们常用到的一些不同，以便以后查阅，并和大家分享讨论。&lt;/p&gt;&lt;p&gt;在我的Winform开发框架中，是支持Sqlite等这样的数据库接入的，示例图如下所示。&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span  style="font-family: Arial; line-height: 25px; "&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/wuhuacong/WinformUI/Enterprise_DataLayer1.png" width="364" height="346" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-style: initial; border-color: initial; " /&gt;&amp;nbsp;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;现在根据我整理的一些特殊地方，和大家分享讨论：&amp;nbsp;&lt;/p&gt;&lt;p&gt;1）特殊字符&lt;/p&gt;&lt;p&gt;每种数据库，基本上在操作SQL语句中，都有自己的一些特殊的分隔符号，如防止和关键字重名的特殊引用字符，SqlServer是[], 这方面Sqlite也沿用这个。参数化语句的占位符，SqlServer和Access是@，Oracle是：，而Sqlite则支持$和@。&lt;/p&gt;&lt;p&gt;2）获取返回刚刚插入的主键字段值（自增长）&lt;/p&gt;&lt;p&gt;这种操作也是经常用到的，一般Sqlserver是用SELECT SCOPE_IDENTITY()&amp;nbsp;语句操作，Access用的是SELECT @@IDENTITY，Oracle由于用的是序列，所以是SELECT Seq_TestTable.Currval ID From Dual这样的操作，Sqlite呢，他也有自己的特殊语句了，就是：Select LAST_INSERT_ROWID() ，是不是比较容易记住呢。&lt;/p&gt;&lt;p&gt;3）Limit语句使用&lt;/p&gt;&lt;p&gt;在SqlServer中，我们常用Top语句来操作数据，以便获取必要的记录信息，这个在Sqlite不支持的，而它和MySql一样，是使用LIMIT语句来实现相同的效果，下面就是我Winform开发框架中，获取第一条记录和最后一条记录的基类方法，我在这里分享一下。&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;查找记录表中最旧的一条记录&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;override&lt;/span&gt;&amp;nbsp;T&amp;nbsp;FindFirst()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&amp;nbsp;sql&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Select&amp;nbsp;{0}&amp;nbsp;From&amp;nbsp;{1}&amp;nbsp;Order&amp;nbsp;by&amp;nbsp;{2}&amp;nbsp;ASC&amp;nbsp;LIMIT&amp;nbsp;1&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;,&amp;nbsp;selectedFields,&amp;nbsp;tableName,&amp;nbsp;GetSafeFileName(sortField));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;T&amp;nbsp;entity&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;null&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Database&amp;nbsp;db&amp;nbsp;=&amp;nbsp;CreateDatabase();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DbCommand&amp;nbsp;command&amp;nbsp;=&amp;nbsp;db.GetSqlStringCommand(sql);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;using&lt;/span&gt;&amp;nbsp;(IDataReader&amp;nbsp;dr&amp;nbsp;=&amp;nbsp;db.ExecuteReader(command))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&amp;nbsp;(dr.Read())&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;entity&amp;nbsp;=&amp;nbsp;DataReaderToEntity(dr);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;return&lt;/span&gt;&amp;nbsp;entity;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;查找记录表中最新的一条记录&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;override&lt;/span&gt;&amp;nbsp;T&amp;nbsp;FindLast()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&amp;nbsp;sql&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Select&amp;nbsp;{0}&amp;nbsp;From&amp;nbsp;{1}&amp;nbsp;Order&amp;nbsp;by&amp;nbsp;{2}&amp;nbsp;DESC&amp;nbsp;LIMIT&amp;nbsp;1&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;,&amp;nbsp;selectedFields,&amp;nbsp;tableName,&amp;nbsp;GetSafeFileName(sortField));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;T&amp;nbsp;entity&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;null&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Database&amp;nbsp;db&amp;nbsp;=&amp;nbsp;CreateDatabase();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DbCommand&amp;nbsp;command&amp;nbsp;=&amp;nbsp;db.GetSqlStringCommand(sql);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;using&lt;/span&gt;&amp;nbsp;(IDataReader&amp;nbsp;dr&amp;nbsp;=&amp;nbsp;db.ExecuteReader(command))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&amp;nbsp;(dr.Read())&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;entity&amp;nbsp;=&amp;nbsp;DataReaderToEntity(dr);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;return&lt;/span&gt;&amp;nbsp;entity;&lt;br /&gt;&lt;span  style="font-family: verdana, 'courier new'; font-size: 14px; line-height: 21px; "&gt;&lt;p style="margin-top: 5px; margin-right: auto; margin-bottom: 5px; margin-left: auto; text-indent: 0px; "&gt;&lt;span  style="font-family: 'Courier New'; font-size: 13px; line-height: 19px; "&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;font  face="'Courier New'" size="2"&gt;&lt;span  style="line-height: 19px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;4、分页实现&lt;/p&gt;&lt;p&gt;前面我介绍了一篇文章，介绍整合了Sqlite语句分页逻辑的分页控件，随笔名称是《&lt;span  style="font-family: Arial; font-weight: bold; line-height: 25px; "&gt;&lt;a id="homepage1_HomePageDays_ctl04_DayList_TitleUrl_8" href="http://www.cnblogs.com/wuhuacong/archive/2011/11/24/2262068.html" style="color: #223355; text-decoration: underline; "&gt;Winform分页控件更新之集成Sqlite数据库分页&lt;/a&gt;&lt;/span&gt;》，其实Sqlite分页逻辑也不神秘，无非也是利用Limit语句实现所需要的记录获取，如下所示。&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;不依赖于存储过程的分页(SQLite)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;param&amp;nbsp;name="isDoCount"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;如果isDoCount为True，返回总数统计Sql；否则返回分页语句Sql&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&amp;nbsp;GetSQLiteSql(&lt;span style="color: #0000FF;"&gt;bool&lt;/span&gt;&amp;nbsp;isDoCount)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&amp;nbsp;sql&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800000;"&gt;""&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&amp;nbsp;(&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;.IsNullOrEmpty(&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.strwhere))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.strwhere&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;&amp;nbsp;(1=1)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&amp;nbsp;(isDoCount)&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;执行总数统计&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sql&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;select&amp;nbsp;count(*)&amp;nbsp;as&amp;nbsp;Total&amp;nbsp;from&amp;nbsp;{0}&amp;nbsp;Where&amp;nbsp;{1}&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.TableOrSqlWrapper,&amp;nbsp;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.strwhere);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;else&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;SELECT&amp;nbsp;*&amp;nbsp;FROM&amp;nbsp;表名称&amp;nbsp;LIMIT&amp;nbsp;M,N&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&amp;nbsp;strOrder&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;&amp;nbsp;order&amp;nbsp;by&amp;nbsp;{0}&amp;nbsp;{1}&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.fieldNameToSort,&amp;nbsp;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.isDescending&amp;nbsp;?&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;DESC&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;:&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;ASC&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;int&lt;/span&gt;&amp;nbsp;minRow&amp;nbsp;=&amp;nbsp;pageSize&amp;nbsp;*&amp;nbsp;(pageIndex&amp;nbsp;-&amp;nbsp;&lt;span style="color: #800080;"&gt;1&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;int&lt;/span&gt;&amp;nbsp;maxRow&amp;nbsp;=&amp;nbsp;pageSize&amp;nbsp;*&amp;nbsp;pageIndex;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sql&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;select&amp;nbsp;{0}&amp;nbsp;from&amp;nbsp;{1}&amp;nbsp;Where&amp;nbsp;{2}&amp;nbsp;{3}&amp;nbsp;LIMIT&amp;nbsp;{4},{5}&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fieldsToReturn,&amp;nbsp;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.TableOrSqlWrapper,&amp;nbsp;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.strwhere,&amp;nbsp;strOrder,&amp;nbsp;minRow,&amp;nbsp;maxRow);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;return&lt;/span&gt;&amp;nbsp;sql;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;span  style="font-family: 'Courier New'; font-size: 13px; line-height: 19px; "&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/wuhuacong/aggbug/2325967.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/wuhuacong/archive/2012/01/18/2325967.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/wuhuacong/archive/2012/01/16/2324101.html</id><title type="text">Winform开发框架之数据访问层的设计</title><summary type="text">我在前面几篇介绍过我的Winform开发框架的相关内容，其中主要集中在界面展现以及各层的总体设计上，还没有空来得及深入进行各个重要细节的讲解，今天我们来介绍、讨论下我的Winform开发框架之数据访问层的设计方面的知识，希望对大家有所帮助。前面介绍过，该Winform开发框架支持多种数据库的访问，只需要对配置进行修改即可切换。为了实现功能强大的数据访问基类，并尽可能减少重复代码，高度提炼基类是很有效的方法。适当的集成关系，使得代码量更少，扩展更加容易，这个就是我的Winform框架的优化思想。</summary><published>2012-01-16T13:26:00Z</published><updated>2012-01-16T13:26:00Z</updated><author><name>伍华聪</name><uri>http://www.cnblogs.com/wuhuacong/</uri></author><link rel="alternate" href="http://www.cnblogs.com/wuhuacong/archive/2012/01/16/2324101.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/wuhuacong/archive/2012/01/16/2324101.html"/><content type="html">&lt;p&gt;我在前面几篇介绍过我的Winform开发框架的相关内容，其中主要集中在界面展现以及各层的总体设计上，还没有空来得及深入进行各个重要细节的讲解，今天我们来介绍、讨论下我的Winform开发框架之数据访问层的设计方面的知识，希望对大家有所帮助。&lt;/p&gt;&lt;p&gt;前面介绍过，该Winform开发框架支持多种数据库的访问，只需要对配置进行修改即可切换，如下图所示。&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/wuhuacong/WinformUI/Enterprise_DataLayer1.png" width="364" height="346" alt="" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;其中我们可以看到，里面有几种数据访问层的相关数据，大致知道是通过同一的IDAL数据访问层接口派生出几个对应不同数据库的操作层，由业务逻辑层BLL进行相应的调用，但是具体细节从上图并不能了解到。&lt;/p&gt;&lt;p&gt;其实他们的大致关系如下图所示。&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/wuhuacong/WinformUI/DataAccessLayer2.png" width="828" height="397" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;首先BLL层，通过BLLFactory对象，根据配置信息，实例化不同的业务访问对象，转换为数据访问层接口进行调用的，BLLFactory通过反射间接方式，构建出不同数据库对象的数据访问层，而数据访问对象，他们都集成了基类BaseDAL，这个基类封装类了绝大多数的增删改查等基础性操作，并通过高度抽象，只需要继承该基类的子类重载部分函数即可完成较为丰富的操作实现。具体的继承关系如下图所示。&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/wuhuacong/WinformUI/DataAccessLayer3.png" width="721" height="502" alt="" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;由于每个不同数据库都需要拥有一个BaseDAL，那么很多相同的操作代码就会发生冗余，因为大多数数据库的基础操作是一样的，只有一部分比较特别，需要进行个性化处理，因此对以上的数据访问层进行优化设计，得到下面的设计图，如下所示。&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/wuhuacong/WinformUI/DataAccessLayer4.png" width="719" height="620" alt="" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;由于把BaseDAL层的通用操作，进一步提升抽象到AbstractBaseDAL 类里面进行管理，因此，BaseDAL虽然在各种数据库的数据访问层中存在，但是，却只是需要实现很少的代码，如下所示。&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/wuhuacong/WinformUI/DataAccessLayer5.png" width="930" height="214" alt="" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;因为不同的数据库，FindFirst（查找第一条）、FindLast（查找最后一条）、Insert2(插入记录后，返回新增的主键值）、以及分页查询FindToDataTable、FindWithPager等不同。因此数据访问层的BaseDAL子类需要覆盖基类AbstractBaseDAL的这些实现。&lt;/p&gt;&lt;p&gt;通过实现部分个性化数据库操作的函数及强大的基类&lt;/p&gt;&lt;div style="display: inline-block; "&gt;&lt;/div&gt;AbstractBaseDAL实现，我们可以看到，整个数据访问层基类得到非常强大的操作功能，如下所示。&lt;br /&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/wuhuacong/WinformUI/DataAccessLayer6.png" width="999" height="638" alt="" /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;为了说明问题，我列举几个上面函数不同的实现给读者，以便说明问题。&lt;/p&gt;&lt;p&gt;1）SqlServer的FindFirst语句如下：&lt;/p&gt;&lt;div style="display: inline-block; "&gt;&lt;div&gt;&lt;div&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&amp;nbsp;sql&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Select&amp;nbsp;top&amp;nbsp;1&amp;nbsp;{0}&amp;nbsp;From&amp;nbsp;{1}&amp;nbsp;Order&amp;nbsp;by&amp;nbsp;{2}&amp;nbsp;ASC&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;,&amp;nbsp;selectedFields,&amp;nbsp;tableName,&amp;nbsp;GetSafeFileName(sortField));&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;2）Oracle的FindFirst语句如下：&lt;/p&gt;&lt;p&gt;&lt;span  style="font-family: 'Courier New'; font-size: 13px; line-height: 19px; "&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&amp;nbsp;sql&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #800000;"&gt;@"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Select&amp;nbsp;*&amp;nbsp;from&amp;nbsp;(Select&amp;nbsp;{0}&amp;nbsp;From&amp;nbsp;{1}&amp;nbsp;Order&amp;nbsp;by&amp;nbsp;{2}&amp;nbsp;ASC)&amp;nbsp;&amp;nbsp;&amp;nbsp;WHERE&amp;nbsp;ROWNUM&amp;nbsp;&amp;lt;=&amp;nbsp;1&amp;nbsp;ORDER&amp;nbsp;BY&amp;nbsp;ROWNUM&amp;nbsp;ASC&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;,&amp;nbsp;selectedFields,&amp;nbsp;tableName,&amp;nbsp;GetSafeFileName(sortField));&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;3）Sqlite的FindFirst语句如下：&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span  style="font-family: 'Courier New'; font-size: 13px; line-height: 19px; "&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&amp;nbsp;sql&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Select&amp;nbsp;{0}&amp;nbsp;From&amp;nbsp;{1}&amp;nbsp;Order&amp;nbsp;by&amp;nbsp;{2}&amp;nbsp;ASC&amp;nbsp;LIMIT&amp;nbsp;1&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;,&amp;nbsp;selectedFields,&amp;nbsp;tableName,&amp;nbsp;GetSafeFileName(sortField));&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;为了实现功能强大的数据访问基类，并尽可能减少重复代码，高度提炼基类是很有效的方法。适当的集成关系，使得代码量更少，扩展更加容易，这个就是我的Winform框架的优化思想。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/wuhuacong/aggbug/2324101.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/wuhuacong/archive/2012/01/16/2324101.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/wuhuacong/archive/2012/01/03/2311338.html</id><title type="text">使用微软企业库EnterpriseLibary访问SQLite数据库</title><summary type="text">SQLite是一个小型的C程序库，实现了独立的，可嵌入的，零配置的SQL数据库引擎，SQLite用的非常广泛，支持通用的SQL92标准，支持事务操作，支持最大可达2T的数据库，在小型数据库使用性能上由于微软的Access数据库等等特点。由于默认的微软企业库EnterpriseLibary不支持SQLite的数据库访问，因此需要在企业库EnterpriseLibary中访问这种数据库的话，需要使用一个企业库的扩展类库，该类库可以http://entlibcontrib.codeplex.com/ 上下载，结合一起使用，非常方便，很好的利用了微软企业库的优势和特点。</summary><published>2012-01-03T13:27:00Z</published><updated>2012-01-03T13:27:00Z</updated><author><name>伍华聪</name><uri>http://www.cnblogs.com/wuhuacong/</uri></author><link rel="alternate" href="http://www.cnblogs.com/wuhuacong/archive/2012/01/03/2311338.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/wuhuacong/archive/2012/01/03/2311338.html"/><content type="html">&lt;p&gt;&lt;span  style="font-family: Arial; line-height: 25px; "&gt;SQLite是一个小型的C程序库，实现了独立的，可嵌入的，零配置的SQL数据库引擎，SQLite用的非常广泛，支持通用的SQL92标准，支持事务操作，&lt;div style="display: inline-block; "&gt;&lt;/div&gt;&lt;/span&gt;&lt;span  style="color: #333333; font-family: Arial; line-height: 26px; "&gt;支持最大可达2T的数据库，在小型数据库使用性能上由于微软的Access数据库等等特点。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;由于默认的微软企业库EnterpriseLibary不支持&lt;div style="display: inline-block; "&gt;&lt;/div&gt;&lt;span  style="font-family: Arial; line-height: 25px; "&gt;SQLite的数据库访问，因此需要在&lt;div style="display: inline-block; "&gt;&lt;/div&gt;&lt;/span&gt;&lt;span  style="font-family: Arial; line-height: 25px; "&gt;&lt;/span&gt;&lt;div style="display: inline-block; "&gt;&lt;/div&gt;企业库EnterpriseLibary中访问这种数据库的话，需要使用一个企业库的扩展类库，该类库可以&lt;a href="http://entlibcontrib.codeplex.com/"&gt;http://entlibcontrib.codeplex.com/&lt;/a&gt;&amp;nbsp;上下载，结合一起使用，非常方便，很好的利用了微软企业库的优势和特点。&lt;/p&gt;&lt;p&gt;默认如果没有采用微软&lt;div style="display: inline-block; "&gt;&lt;/div&gt;企业库EnterpriseLibary&amp;nbsp;的话，紧紧使用SQLite的对象来操作数据库，是这样的&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;执行SQL查询语句，返回查询结果的所有记录的第一个字段,用逗号分隔。&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;param&amp;nbsp;name="sql"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;SQL语句&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;returns&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;返回查询结果的所有记录的第一个字段,用逗号分隔。&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&amp;nbsp;SqlValueList2(&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&amp;nbsp;sql)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SQLiteConnection&amp;nbsp;connection&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&amp;nbsp;SQLiteConnection(connectionString);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SQLiteCommand&amp;nbsp;cmd&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&amp;nbsp;SQLiteCommand(sql,&amp;nbsp;connection);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;connection.Open();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;StringBuilder&amp;nbsp;result&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&amp;nbsp;StringBuilder();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;using&lt;/span&gt;&amp;nbsp;(SQLiteDataReader&amp;nbsp;dr&amp;nbsp;=&amp;nbsp;cmd.ExecuteReader())&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;while&lt;/span&gt;&amp;nbsp;(dr.Read())&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;result.AppendFormat(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;{0},&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;,&amp;nbsp;dr[&lt;span style="color: #800080;"&gt;0&lt;/span&gt;].ToString());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&amp;nbsp;strResult&amp;nbsp;=&amp;nbsp;result.ToString().Trim(&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;,&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;return&lt;/span&gt;&amp;nbsp;strResult;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;执行SQL查询语句，返回所有记录的DataTable集合。&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;param&amp;nbsp;name="sql"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;SQL查询语句&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&amp;nbsp;DataTable&amp;nbsp;SqlTable2(&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&amp;nbsp;sql)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DataSet&amp;nbsp;ds&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&amp;nbsp;DataSet();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SQLiteDataAdapter&amp;nbsp;adpater&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&amp;nbsp;SQLiteDataAdapter(sql,&amp;nbsp;connectionString);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;adpater.Fill(ds);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;return&lt;/span&gt;&amp;nbsp;ds.Tables[&lt;span style="color: #800080;"&gt;0&lt;/span&gt;];&lt;br /&gt;&lt;span  style="font-family: verdana, 'courier new'; font-size: 14px; line-height: 21px; "&gt;&lt;span  style="font-family: 'Courier New'; font-size: 13px; line-height: 19px; "&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;font  face="'Courier New'" size="2"&gt;&lt;span  style="line-height: 19px;"&gt;如果使用上面的做法，只需要指定连接字符串ConnectionString即可，一般可以这样指定其数据库连接字符串。&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;span  style="font-family: 'Courier New'; font-size: 13px; line-height: 19px; "&gt;&amp;nbsp; &amp;nbsp;connectionString&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #800000;"&gt;@"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Data&amp;nbsp;Source={0}\OrderWater.db;Version=3;&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;,&amp;nbsp;Application.StartupPath);&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;如果是使用微软的企业库EnterpriseLibary来进行数据库访问的话，那么需要在配置文件中配置数据库访问，如下所示。&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/wuhuacong/others/sqliteConfig.png" alt="" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;注意红色框部分就可以顺利配置好Sqlite数据库的企业库配置信息了。&lt;/p&gt;&lt;p&gt;然后我们在代码中访问使用Sqlite数据库的时候，就非常透明了。&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;执行SQL查询语句，返回查询结果的所有记录的第一个字段,用逗号分隔。&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;param&amp;nbsp;name="sql"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;SQL语句&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;returns&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;返回查询结果的所有记录的第一个字段,用逗号分隔。&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&amp;nbsp;SqlValueList(&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&amp;nbsp;sql)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Database&amp;nbsp;db&amp;nbsp;=&amp;nbsp;DatabaseFactory.CreateDatabase();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DbCommand&amp;nbsp;cmd&amp;nbsp;=&amp;nbsp;db.GetSqlStringCommand(sql);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;StringBuilder&amp;nbsp;result&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&amp;nbsp;StringBuilder();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;using&lt;/span&gt;&amp;nbsp;(IDataReader&amp;nbsp;dr&amp;nbsp;=&amp;nbsp;db.ExecuteReader(cmd))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;result.AppendFormat(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;{0},&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;,&amp;nbsp;dr[&lt;span style="color: #800080;"&gt;0&lt;/span&gt;].ToString());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&amp;nbsp;strResult&amp;nbsp;=&amp;nbsp;result.ToString().Trim(&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;,&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;return&lt;/span&gt;&amp;nbsp;strResult;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;执行SQL查询语句，返回所有记录的DataTable集合。&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;param&amp;nbsp;name="sql"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;SQL查询语句&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&amp;nbsp;DataTable&amp;nbsp;SqlTable(&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&amp;nbsp;sql)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Database&amp;nbsp;db&amp;nbsp;=&amp;nbsp;DatabaseFactory.CreateDatabase();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DbCommand&amp;nbsp;cmd&amp;nbsp;=&amp;nbsp;db.GetSqlStringCommand(sql);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;return&lt;/span&gt;&amp;nbsp;db.ExecuteDataSet(cmd).Tables[&lt;span style="color: #800080;"&gt;0&lt;/span&gt;];&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;span  style="font-family: 'Courier New'; font-size: 13px; line-height: 19px; "&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;如果结合我的分页控件使用，那么分页控件的查询数据的使用代码如下所示：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;标准的记录查询函数&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;param&amp;nbsp;name="where"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;param&amp;nbsp;name="pagerInfo"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;private&lt;/span&gt;&amp;nbsp;DataTable&amp;nbsp;FindToDataTable(&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;where&lt;/span&gt;,&amp;nbsp;PagerInfo&amp;nbsp;pagerInfo)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;WHC.Pager.WinControl.PagerHelper&amp;nbsp;helper&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&amp;nbsp;WHC.Pager.WinControl.PagerHelper(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;All_Customer&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;*&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;LastUpdated&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;,&amp;nbsp;pagerInfo.PageSize,&amp;nbsp;pagerInfo.CurrenetPageIndex,&amp;nbsp;&lt;span style="color: #0000FF;"&gt;true&lt;/span&gt;,&amp;nbsp;&lt;span style="color: #0000FF;"&gt;where&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&amp;nbsp;countSql&amp;nbsp;=&amp;nbsp;helper.GetPagingSql(WHC.Pager.WinControl.DatabaseType.SQLite,&amp;nbsp;&lt;span style="color: #0000FF;"&gt;true&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&amp;nbsp;dataSql&amp;nbsp;=&amp;nbsp;helper.GetPagingSql(WHC.Pager.WinControl.DatabaseType.SQLite,&amp;nbsp;&lt;span style="color: #0000FF;"&gt;false&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&amp;nbsp;value&amp;nbsp;=&amp;nbsp;SqlValueList(countSql);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pagerInfo.RecordCount&amp;nbsp;=&amp;nbsp;Convert.ToInt32(value);&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;为了显示具体的信息，需要设置总记录数&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DataTable&amp;nbsp;dt&amp;nbsp;=&amp;nbsp;SqlTable(dataSql);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;return&lt;/span&gt;&amp;nbsp;dt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;span  style="font-family: 'Courier New'; font-size: 13px; line-height: 19px; "&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;效果如下所示：&lt;/p&gt;&lt;p&gt;&lt;span  style="font-family: Arial; line-height: 25px; "&gt;&lt;p style="margin-top: 5px; margin-right: auto; margin-left: auto; margin-bottom: 5px; text-indent: 0px; "&gt;&lt;span  style="font-family: Arial; line-height: 25px; "&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/wuhuacong/winformControl/PagerUpdate_normal.png" width="859" height="516" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-style: initial; border-color: initial; border-style: initial; border-color: initial; border-style: initial; border-color: initial; " /&gt;&amp;nbsp;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin-top: 5px; margin-right: auto; margin-left: auto; margin-bottom: 5px; text-indent: 0px; "&gt;DevExpress样式版本的分页控件效果如下所示（均支持SQLite分页）&lt;/p&gt;&lt;p style="margin-top: 5px; margin-right: auto; margin-left: auto; margin-bottom: 5px; text-indent: 0px; "&gt;&lt;span  style="font-family: Arial; line-height: 25px; "&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/wuhuacong/winformControl/PagerUpdate_DevExpress.png" width="979" height="411" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-style: initial; border-color: initial; border-style: initial; border-color: initial; border-style: initial; border-color: initial; " /&gt;&amp;nbsp;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;/span&gt;由于Sqlite的开发，在日常的项目中，还是比较常见的，因此，为了方便，我把Sqlite的数据访问也集成到我的Winform框架系统中了，这样通过扩展，支持更多的数据库，项目视图如下所示。&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/wuhuacong/others/EnterpriseSqlite.png" alt="" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;如果你有Sqlite的项目开发，使用这个做好的框架，应该是能事半功倍的。&lt;/p&gt;&lt;p&gt;最后，希望和大家一起共同研究技术，探讨代码。。。&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt; &lt;img src="http://www.cnblogs.com/wuhuacong/aggbug/2311338.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/wuhuacong/archive/2012/01/03/2311338.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/wuhuacong/archive/2011/12/30/2307936.html</id><title type="text">Winform分页控件支持表头全选操作实现</title><summary type="text">前面介绍了一篇《Winform传统DataGridView和DevExpress控件的GridControl两者表头全选功能的实现（源码提供）》，介绍了传统DataGridView和DevExpress控件的GridView的表头全选功能实现，现把功能应用在我的Winform分页控件上，只需要很少的代码即可实现，代码更加简洁优雅。Winform分页控件，在很多场合都需要用到，由于整合较多的功能操作，使用起来效果更好，界面统一性也比较一致。其中的勾选操作，在有些场合下，也是比较有用的，因此提供该功能的整合。</summary><published>2011-12-30T12:26:00Z</published><updated>2011-12-30T12:26:00Z</updated><author><name>伍华聪</name><uri>http://www.cnblogs.com/wuhuacong/</uri></author><link rel="alternate" href="http://www.cnblogs.com/wuhuacong/archive/2011/12/30/2307936.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/wuhuacong/archive/2011/12/30/2307936.html"/><content type="html">&lt;p&gt;前面介绍了一篇《&lt;span  style="font-family: verdana, Arial, Helvetica, sans-serif; line-height: 18px; "&gt;&lt;a  href="http://www.cnblogs.com/wuhuacong/archive/2011/12/30/2307600.html" target="_blank" style="color: #105cb6; font-size: 14px; font-weight: bold; text-decoration: underline; "&gt;Winform传统DataGridView和DevExpress控件的GridControl两者表头全选功能的实现（源码提供）&lt;/a&gt;&lt;/span&gt;》，介绍了传统DataGridView和DevExpress控件的GridView的表头全选功能实现，现把功能应用在我的Winform分页控件上，只需要很少的代码即可实现，代码更加简洁优雅。&lt;/p&gt;&lt;p&gt;Winform分页控件，在很多场合都需要用到，由于整合较多的功能操作，使用起来效果更好，界面统一性也比较一致。其中的勾选操作，在有些场合下，也是比较有用的，因此提供该功能的整合。&amp;nbsp;&lt;/p&gt;&lt;p&gt;我们先来看看基于我的分页控件实现的表头全选功能，界面效果如何。&lt;/p&gt;&lt;p&gt;1）传统界面的效果&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/wuhuacong/winformControl/WinformPager_CheckAll.png" width="854" height="510" alt="" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;2）DotNetBar界面效果&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/wuhuacong/winformControl/WinformPager_CheckAll2.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;3）DevExpress界面效果&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/wuhuacong/winformControl/WinformPager_CheckAll3.png" width="981" height="488" alt="" /&gt;&lt;/p&gt;&lt;p&gt;以上就是.NET开发中非常广泛应用的三组界面效果，分页控件分别提供了3种控件实现，几乎所有的属性及操作方法均一致，本实例中实现表头操作也是完全一致的，我们以其中传统界面效果的分页控件来进行介绍。&lt;/p&gt;&lt;p&gt;首先指定分页控件的全选列的字段名称（&lt;strong&gt;如果是&lt;/strong&gt;&lt;strong style="color: red; "&gt;DataTable&lt;/strong&gt;&lt;strong&gt;类型数据源，那么就是&lt;/strong&gt;&lt;strong style="color: red; "&gt;数据列名&lt;/strong&gt;&lt;strong&gt;，如果是&lt;/strong&gt;&lt;strong style="color: red; "&gt;实体类&lt;/strong&gt;&lt;strong&gt;，那么就是实体类的&lt;/strong&gt;&lt;strong style="color: red; "&gt;属性名称&lt;/strong&gt;）&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/wuhuacong/winformControl/WinformPager_CheckAll_Code1.png" width="1004" height="416" alt="" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;另外在绑定数据的时候，添加一列对应上面的字段的IsCheck即可。&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/wuhuacong/winformControl/WinformPager_CheckAll_Code2.png" width="1149" height="580" alt="" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;以上代码指定，就出现本文开始的效果了，可以实现表头的全选操作，是不是还算简洁优雅的呢，其他效果的DotNetBar和DevExpresss界面效果的，使用方法完全一致。&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/wuhuacong/aggbug/2307936.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/wuhuacong/archive/2011/12/30/2307936.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/wuhuacong/archive/2011/12/30/2307600.html</id><title type="text">Winform传统DataGridView和DevExpress控件的GridControl两者表头全选功能的实现（源码提供）</title><summary type="text">在开发一个个人项目的时候，有客户反映默认GridView多选操作不是很方便和理想，想在列表的左边增加一列可以勾选，并且最好支持列表头部全选的操作，否则数据多的时候一个个勾选要到天荒地老。基于以上需求，找了不少例子进行比较，并对代码进行测试改进，终于完成了以上的功能了， 并且由于我本身做了多套界面的处理，因此，基于传统的DataGridView全选操作不能少，而且基于DevExpress控件的GridView全选操作也应该支持，呵呵。</summary><published>2011-12-30T11:49:00Z</published><updated>2011-12-30T11:49:00Z</updated><author><name>伍华聪</name><uri>http://www.cnblogs.com/wuhuacong/</uri></author><link rel="alternate" href="http://www.cnblogs.com/wuhuacong/archive/2011/12/30/2307600.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/wuhuacong/archive/2011/12/30/2307600.html"/><content type="html">&lt;p&gt;在开发一个个人项目的时候，有客户反映默认GridView多选操作不是很方便和理想，想在列表的左边增加一列可以勾选，并且最好支持列表头部全选的操作，否则数据多的时候一个个勾选要到天荒地老。&lt;/p&gt;&lt;p&gt;基于以上需求，找了不少例子进行比较，并对代码进行测试改进，终于完成了以上的功能了， 并且由于我本身做了多套界面的处理，因此，基于传统的DataGridView全选操作不能少，而且基于DevExpress控件的GridView全选操作也应该支持，呵呵。&lt;/p&gt;&lt;p&gt;无图无真相，下面先上图介绍两种不同的效果，然后在详细介绍代码的实现。&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/wuhuacong/winformControl/GridViewSelectAll_1.png" width="712" height="476" alt="" /&gt;&amp;nbsp;&lt;br /&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/wuhuacong/winformControl/GridViewSelectAll_2.png" width="605" height="384" alt="" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;1）DevExpress控件的GridView的实现多选操作&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;先讲DevExpress控件的GridView的实现，要实现的功能基本上是处理单击全选操作、重新绘制表头等操作，首先在加载第一步实现相关的事件和操作，如下所示。&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.gridView1.Click&amp;nbsp;+=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&amp;nbsp;System.EventHandler(&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.gridView1_Click);&lt;br /&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.gridView1.CustomDrawColumnHeader&amp;nbsp;+=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&amp;nbsp;DevExpress.XtraGrid.Views.Grid.ColumnHeaderCustomDrawEventHandler(&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.gridView1_CustomDrawColumnHeader);&lt;br /&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.gridView1.DataSourceChanged&amp;nbsp;+=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&amp;nbsp;EventHandler(gridView1_DataSourceChanged);&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;然后就是实现里面的事件操作了，对应的代码如下所示。&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;void&lt;/span&gt;&amp;nbsp;gridView1_Click(&lt;span style="color: #0000FF;"&gt;object&lt;/span&gt;&amp;nbsp;sender,&amp;nbsp;EventArgs&amp;nbsp;e)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&amp;nbsp;(DevControlHelper.ClickGridCheckBox(&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.gridView1,&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Check&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;,&amp;nbsp;m_checkStatus))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m_checkStatus&amp;nbsp;=&amp;nbsp;!m_checkStatus;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;void&lt;/span&gt;&amp;nbsp;gridView1_CustomDrawColumnHeader(&lt;span style="color: #0000FF;"&gt;object&lt;/span&gt;&amp;nbsp;sender,&amp;nbsp;DevExpress.XtraGrid.Views.Grid.ColumnHeaderCustomDrawEventArgs&amp;nbsp;e)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&amp;nbsp;(e.Column&amp;nbsp;!=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;null&lt;/span&gt;&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;e.Column.FieldName&amp;nbsp;==&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Check&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;e.Info.InnerElements.Clear();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;e.Painter.DrawObject(e.Info);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DevControlHelper.DrawCheckBox(e,&amp;nbsp;m_checkStatus);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;e.Handled&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;true&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;void&lt;/span&gt;&amp;nbsp;gridView1_DataSourceChanged(&lt;span style="color: #0000FF;"&gt;object&lt;/span&gt;&amp;nbsp;sender,&amp;nbsp;EventArgs&amp;nbsp;e)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GridColumn&amp;nbsp;column&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.gridView1.Columns.ColumnByFieldName(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Check&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&amp;nbsp;(column&amp;nbsp;!=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;null&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;column.Width&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800080;"&gt;80&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;column.OptionsColumn.ShowCaption&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;false&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;column.ColumnEdit&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&amp;nbsp;RepositoryItemCheckEdit();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;其中单击和绘制表头的操作，交给另外一个类&lt;span style="background-color: #f5f5f5; font-family: 'Courier New'; font-size: 13px; line-height: 19px; "&gt;DevControlHelper&lt;/span&gt;来独立进行处理，数据源变化&lt;span style="background-color: #f5f5f5; font-family: 'Courier New'; font-size: 13px; line-height: 19px; "&gt;gridView1_DataSourceChanged&lt;/span&gt;实现的操作是寻找对应的全选列，并设置列宽、隐藏表头标题，并设置为复选框样式。&lt;/p&gt;&lt;p&gt;&lt;span style="background-color: #f5f5f5; font-family: 'Courier New'; font-size: 13px; line-height: 19px; "&gt;DevControlHelper&lt;/span&gt;&amp;nbsp;类的实现代码如下所示：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;void&lt;/span&gt;&amp;nbsp;DrawCheckBox(DevExpress.XtraGrid.Views.Grid.ColumnHeaderCustomDrawEventArgs&amp;nbsp;e,&amp;nbsp;&lt;span style="color: #0000FF;"&gt;bool&lt;/span&gt;&amp;nbsp;chk)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RepositoryItemCheckEdit&amp;nbsp;repositoryCheck&amp;nbsp;=&amp;nbsp;e.Column.ColumnEdit&amp;nbsp;&lt;span style="color: #0000FF;"&gt;as&lt;/span&gt;&amp;nbsp;RepositoryItemCheckEdit;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&amp;nbsp;(repositoryCheck&amp;nbsp;!=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;null&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Graphics&amp;nbsp;g&amp;nbsp;=&amp;nbsp;e.Graphics;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Rectangle&amp;nbsp;r&amp;nbsp;=&amp;nbsp;e.Bounds;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DevExpress.XtraEditors.ViewInfo.CheckEditViewInfo&amp;nbsp;info;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DevExpress.XtraEditors.Drawing.CheckEditPainter&amp;nbsp;painter;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DevExpress.XtraEditors.Drawing.ControlGraphicsInfoArgs&amp;nbsp;args;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;info&amp;nbsp;=&amp;nbsp;repositoryCheck.CreateViewInfo()&amp;nbsp;&lt;span style="color: #0000FF;"&gt;as&lt;/span&gt;&amp;nbsp;DevExpress.XtraEditors.ViewInfo.CheckEditViewInfo;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;painter&amp;nbsp;=&amp;nbsp;repositoryCheck.CreatePainter()&amp;nbsp;&lt;span style="color: #0000FF;"&gt;as&lt;/span&gt;&amp;nbsp;DevExpress.XtraEditors.Drawing.CheckEditPainter;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;info.EditValue&amp;nbsp;=&amp;nbsp;chk;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;info.Bounds&amp;nbsp;=&amp;nbsp;r;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;info.CalcViewInfo(g);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;args&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&amp;nbsp;DevExpress.XtraEditors.Drawing.ControlGraphicsInfoArgs(info,&amp;nbsp;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&amp;nbsp;DevExpress.Utils.Drawing.GraphicsCache(g),&amp;nbsp;r);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;painter.Draw(args);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;args.Cache.Dispose();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;bool&lt;/span&gt;&amp;nbsp;ClickGridCheckBox(DevExpress.XtraGrid.Views.Grid.GridView&amp;nbsp;gridView,&amp;nbsp;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&amp;nbsp;fieldName,&amp;nbsp;&lt;span style="color: #0000FF;"&gt;bool&lt;/span&gt;&amp;nbsp;currentStatus)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;bool&lt;/span&gt;&amp;nbsp;result&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;false&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&amp;nbsp;(gridView&amp;nbsp;!=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;null&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;gridView.ClearSorting();&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;禁止排序&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;gridView.PostEditor();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DevExpress.XtraGrid.Views.Grid.ViewInfo.GridHitInfo&amp;nbsp;info;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Point&amp;nbsp;pt&amp;nbsp;=&amp;nbsp;gridView.GridControl.PointToClient(Control.MousePosition);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;info&amp;nbsp;=&amp;nbsp;gridView.CalcHitInfo(pt);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&amp;nbsp;(info.InColumn&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;info.Column&amp;nbsp;!=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;null&lt;/span&gt;&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;info.Column.FieldName&amp;nbsp;==&amp;nbsp;fieldName)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;for&lt;/span&gt;&amp;nbsp;(&lt;span style="color: #0000FF;"&gt;int&lt;/span&gt;&amp;nbsp;i&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;;&amp;nbsp;i&amp;nbsp;&amp;lt;&amp;nbsp;gridView.RowCount;&amp;nbsp;i++)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;gridView.SetRowCellValue(i,&amp;nbsp;fieldName,&amp;nbsp;!currentStatus);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;true&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;return&lt;/span&gt;&amp;nbsp;result;&lt;br /&gt;&lt;span style="font-family: verdana, 'courier new'; font-size: 14px; line-height: 21px; "&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;span style="font-family: verdana, 'courier new'; font-size: 14px; line-height: 21px; "&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;2）传统DataGridView实现全选操作&lt;/p&gt;&lt;p&gt;首先在第一列增加一个CheckBox控件，然后通过相关的事件，调整其位置，并相应对应的单击全选操作，初始化代码如下所示。&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; CheckBox&amp;nbsp;HeaderCheckBox&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;null&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&amp;nbsp;FrmNormalGridViewSelect()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;InitializeComponent();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&amp;nbsp;(!&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.DesignMode)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HeaderCheckBox&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&amp;nbsp;CheckBox();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HeaderCheckBox.Size&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&amp;nbsp;Size(&lt;span style="color: #800080;"&gt;15&lt;/span&gt;,&amp;nbsp;&lt;span style="color: #800080;"&gt;15&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.dgvSelectAll.Controls.Add(HeaderCheckBox);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HeaderCheckBox.KeyUp&amp;nbsp;+=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&amp;nbsp;KeyEventHandler(HeaderCheckBox_KeyUp);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HeaderCheckBox.MouseClick&amp;nbsp;+=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&amp;nbsp;MouseEventHandler(HeaderCheckBox_MouseClick);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dgvSelectAll.CurrentCellDirtyStateChanged&amp;nbsp;+=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&amp;nbsp;EventHandler(dgvSelectAll_CurrentCellDirtyStateChanged);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dgvSelectAll.CellPainting&amp;nbsp;+=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&amp;nbsp;DataGridViewCellPaintingEventHandler(dgvSelectAll_CellPainting);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;事件实现了CheckBox重绘调整，并处理单击事件，如下所示。&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;void&lt;/span&gt;&amp;nbsp;HeaderCheckBox_MouseClick(&lt;span style="color: #0000FF;"&gt;object&lt;/span&gt;&amp;nbsp;sender,&amp;nbsp;MouseEventArgs&amp;nbsp;e)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HeaderCheckBoxClick((CheckBox)sender);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;void&lt;/span&gt;&amp;nbsp;dgvSelectAll_CellPainting(&lt;span style="color: #0000FF;"&gt;object&lt;/span&gt;&amp;nbsp;sender,&amp;nbsp;DataGridViewCellPaintingEventArgs&amp;nbsp;e)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&amp;nbsp;(e.RowIndex&amp;nbsp;==&amp;nbsp;-&lt;span style="color: #800080;"&gt;1&lt;/span&gt;&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;e.ColumnIndex&amp;nbsp;==&amp;nbsp;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ResetHeaderCheckBoxLocation(e.ColumnIndex,&amp;nbsp;e.RowIndex);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;void&lt;/span&gt;&amp;nbsp;ResetHeaderCheckBoxLocation(&lt;span style="color: #0000FF;"&gt;int&lt;/span&gt;&amp;nbsp;ColumnIndex,&amp;nbsp;&lt;span style="color: #0000FF;"&gt;int&lt;/span&gt;&amp;nbsp;RowIndex)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Rectangle&amp;nbsp;oRectangle&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.dgvSelectAll.GetCellDisplayRectangle(ColumnIndex,&amp;nbsp;RowIndex,&amp;nbsp;&lt;span style="color: #0000FF;"&gt;true&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Point&amp;nbsp;oPoint&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&amp;nbsp;Point();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;oPoint.X&amp;nbsp;=&amp;nbsp;oRectangle.Location.X&amp;nbsp;+&amp;nbsp;(oRectangle.Width&amp;nbsp;-&amp;nbsp;HeaderCheckBox.Width)&amp;nbsp;/&amp;nbsp;&lt;span style="color: #800080;"&gt;2&lt;/span&gt;&amp;nbsp;+&amp;nbsp;&lt;span style="color: #800080;"&gt;1&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;oPoint.Y&amp;nbsp;=&amp;nbsp;oRectangle.Location.Y&amp;nbsp;+&amp;nbsp;(oRectangle.Height&amp;nbsp;-&amp;nbsp;HeaderCheckBox.Height)&amp;nbsp;/&amp;nbsp;&lt;span style="color: #800080;"&gt;2&lt;/span&gt;&amp;nbsp;+&amp;nbsp;&lt;span style="color: #800080;"&gt;1&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HeaderCheckBox.Location&amp;nbsp;=&amp;nbsp;oPoint;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;void&lt;/span&gt;&amp;nbsp;HeaderCheckBoxClick(CheckBox&amp;nbsp;HCheckBox)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;foreach&lt;/span&gt;&amp;nbsp;(DataGridViewRow&amp;nbsp;Row&amp;nbsp;&lt;span style="color: #0000FF;"&gt;in&lt;/span&gt;&amp;nbsp;dgvSelectAll.Rows)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;((DataGridViewCheckBoxCell)Row.Cells[&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;chkBxSelect&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;]).Value&amp;nbsp;=&amp;nbsp;HCheckBox.Checked;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dgvSelectAll.RefreshEdit();&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;包括两个界面样式的详细例子的源码地址如下：&lt;a href="http://files.cnblogs.com/wuhuacong/TestGridViewCheck.rar"&gt;http://files.cnblogs.com/wuhuacong/TestGridViewCheck.rar&amp;nbsp;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;非常感谢你阅读及支持，如果有好的建议及问题，可以联系我，共同讨论促进。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/wuhuacong/aggbug/2307600.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/wuhuacong/archive/2011/12/30/2307600.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/wuhuacong/archive/2011/12/23/2299614.html</id><title type="text">WCF开发框架形成之旅--个人图片信息的上传保存</title><summary type="text">一般在业务系统里面，除了存储个人的基本信息外，可能也都需要存储个人的一些图片信息，通常如肖像、名片、身份证等重要图片信息，而这些信息偏小为了方便管理，一般也是和个人基本信息一起放在数据库里面的。本人在开发形成自己的Winform开发框架及WCF开发框架过程中，对这些进行了优化整理，现公布出来和大家一起讨论学习，希望给大家提供一个参考外，自己有进一步的提升。本文主要以WCF开发框架下的个人图片信息上传保存作为主题，介绍其中涉及到的一些知识点和操作，以及规避其中一些常见的问题。</summary><published>2011-12-23T08:57:00Z</published><updated>2011-12-23T08:57:00Z</updated><author><name>伍华聪</name><uri>http://www.cnblogs.com/wuhuacong/</uri></author><link rel="alternate" href="http://www.cnblogs.com/wuhuacong/archive/2011/12/23/2299614.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/wuhuacong/archive/2011/12/23/2299614.html"/><content type="html">&lt;p&gt;一般在业务系统里面，除了存储个人的基本信息外，可能也都需要存储个人的一些图片信息，通常如肖像、名片、身份证等重要图片信息，而这些信息偏小为了方便管理，一般也是和个人基本信息一起放在数据库里面的。&lt;/p&gt;&lt;p&gt;本人在开发形成自己的Winform开发框架及WCF开发框架过程中，对这些进行了优化整理，现公布出来和大家一起讨论学习，希望给大家提供一个参考外，自己有进一步的提升。本文主要以WCF开发框架下的个人图片信息上传保存作为主题，介绍其中涉及到的一些知识点和操作，以及规避其中一些常见的问题。&lt;/p&gt;&lt;p&gt;1）首先，我们需要在数据库里面设置几个Image对象字段（我这里采用的是SqlServer数据库）。&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/wuhuacong/wcf/wcf_uploadImage1.png" width="393" height="325" alt="" /&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;2）我们需要先做好数据库存储底层的操作函数，把图片信息存储在不同的字段里面，由于这个操作类似，因此设置一个枚举来选择不同的字段存储，如下所示。&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;根据图片枚举类型获取对应的字段名称&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;param&amp;nbsp;name="imageType"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;图片枚举类型&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&amp;nbsp;GetFieldNameByImageType(UserImageType&amp;nbsp;imageType)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&amp;nbsp;fieldName&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Portrait&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;switch&lt;/span&gt;&amp;nbsp;(imageType)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;case&lt;/span&gt;&amp;nbsp;UserImageType.个人肖像:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fieldName&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Portrait&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;case&lt;/span&gt;&amp;nbsp;UserImageType.身份证照片1:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fieldName&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;IDPhoto1&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;case&lt;/span&gt;&amp;nbsp;UserImageType.身份证照片2:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fieldName&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;IDPhoto2&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;case&lt;/span&gt;&amp;nbsp;UserImageType.名片1:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fieldName&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;BusinessCard1&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;case&lt;/span&gt;&amp;nbsp;UserImageType.名片2:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fieldName&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;BusinessCard2&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;return&lt;/span&gt;&amp;nbsp;fieldName;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;更新个人相关图片数据&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;param&amp;nbsp;name="imagetype"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;图片类型&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;param&amp;nbsp;name="userId"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;用户ID&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;param&amp;nbsp;name="imageBytes"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;图片字节数组&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;bool&lt;/span&gt;&amp;nbsp;UpdatePersonImageBytes(UserImageType&amp;nbsp;imagetype,&amp;nbsp;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&amp;nbsp;userId,&amp;nbsp;&lt;span style="color: #0000FF;"&gt;byte&lt;/span&gt;[]&amp;nbsp;imageBytes)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&amp;nbsp;fieldName&amp;nbsp;=&amp;nbsp;GetFieldNameByImageType(imagetype);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&amp;nbsp;sql&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;update&amp;nbsp;Users&amp;nbsp;set&amp;nbsp;{0}=@image&amp;nbsp;where&amp;nbsp;Id&amp;nbsp;=&amp;nbsp;'{1}'&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;,&amp;nbsp;fieldName,&amp;nbsp;userId);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Database&amp;nbsp;db&amp;nbsp;=&amp;nbsp;DatabaseFactory.CreateDatabase();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DbCommand&amp;nbsp;dbCommand&amp;nbsp;=&amp;nbsp;db.GetSqlStringCommand(sql);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;db.AddInParameter(dbCommand,&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;image&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;,&amp;nbsp;DbType.Binary,&amp;nbsp;imageBytes);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;return&lt;/span&gt;&amp;nbsp;db.ExecuteNonQuery(dbCommand)&amp;nbsp;&amp;gt;&amp;nbsp;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;}&amp;nbsp;&lt;/p&gt;&lt;p&gt;3）以上是保存图片的操作，还需要做一个通用类型的图片下载操作，把用户图片信息保存在byte数组中，方便在客户端把字节转换为具体的文件字节。&lt;/p&gt;&lt;p&gt;&lt;span style="color: #808080; "&gt;///&lt;/span&gt;&lt;span style="color: #008000; "&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080; "&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;根据个人图片枚举类型获取图片数据&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;param&amp;nbsp;name="imagetype"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;图片枚举类型&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;byte&lt;/span&gt;[]&amp;nbsp;GetPersonImageBytes(UserImageType&amp;nbsp;imagetype,&amp;nbsp;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&amp;nbsp;userId)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&amp;nbsp;fieldName&amp;nbsp;=&amp;nbsp;GetFieldNameByImageType(imagetype);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&amp;nbsp;sql&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Select&amp;nbsp;{0}&amp;nbsp;from&amp;nbsp;Users&amp;nbsp;where&amp;nbsp;Id&amp;nbsp;=&amp;nbsp;'{1}'&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;,&amp;nbsp;fieldName,&amp;nbsp;userId);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Database&amp;nbsp;db&amp;nbsp;=&amp;nbsp;DatabaseFactory.CreateDatabase();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DbCommand&amp;nbsp;dbCommand&amp;nbsp;=&amp;nbsp;db.GetSqlStringCommand(sql);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;byte&lt;/span&gt;[]&amp;nbsp;imageBytes&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;null&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;using&lt;/span&gt;&amp;nbsp;(IDataReader&amp;nbsp;reader&amp;nbsp;=&amp;nbsp;db.ExecuteReader(dbCommand))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&amp;nbsp;(reader.Read())&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;imageBytes&amp;nbsp;=&amp;nbsp;(reader.IsDBNull(reader.GetOrdinal(fieldName)))&amp;nbsp;?&amp;nbsp;&lt;span style="color: #0000FF;"&gt;null&lt;/span&gt;&amp;nbsp;:&amp;nbsp;(&lt;span style="color: #0000FF;"&gt;byte&lt;/span&gt;[])reader[&lt;span style="color: #800080;"&gt;0&lt;/span&gt;];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;return&lt;/span&gt;&amp;nbsp;imageBytes;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;4）然后设计一个图片上传显示的窗体，其中窗体的图片控件默认显示一个替代的图片，一个美观，二个也方便用户快速设置图片，如下所示。&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/wuhuacong/wcf/wcf_uploadImage2.png" width="965" height="786" alt="" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;其最终效果如下所示，除了可以展示图片外，双击可以预览图片的内容，便于用户放大缩小对图片细看。&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/wuhuacong/wcf/wcf_uploadImage3.png" alt="" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;5）其中实现图片上传的WCF客户端代码如下所示。&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;void&lt;/span&gt;&amp;nbsp;btnSavePortrait_Click(&lt;span style="color: #0000FF;"&gt;object&lt;/span&gt;&amp;nbsp;sender,&amp;nbsp;EventArgs&amp;nbsp;e)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&amp;nbsp;(picPortrait.Image&amp;nbsp;!=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;null&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&amp;nbsp;UserServiceClient().Using(client&amp;nbsp;=&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;try&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;byte&lt;/span&gt;[]&amp;nbsp;imageBytes&amp;nbsp;=&amp;nbsp;ImageHelper.ImageToBytes(&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.picPortrait.Image);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;bool&lt;/span&gt;&amp;nbsp;sucess&amp;nbsp;=&amp;nbsp;client.UpdatePersonImageBytes(UserImageType.个人肖像,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Portal.gc.LoginInfo.Id,&amp;nbsp;imageBytes);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MessageDxUtil.ShowTips(sucess&amp;nbsp;?&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;个人肖像&amp;nbsp;图片保存成功！&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;:&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;保存失败！&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;catch&lt;/span&gt;&amp;nbsp;(Exception&amp;nbsp;ex)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MessageDxUtil.ShowError(ex.Message);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;LogTextHelper.Error(ex);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;span style="font-family: verdana, 'courier new'; font-size: 14px; line-height: 21px; "&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;span style="font-family: verdana, 'courier new'; font-size: 14px; line-height: 21px; "&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;重置图片的代码如下所示。&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&lt;span style="color: #0000FF;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;void&lt;/span&gt;&amp;nbsp;ResetDefaultImage(UserImageType&amp;nbsp;imageType)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.ComponentModel.ComponentResourceManager&amp;nbsp;resources&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&amp;nbsp;System.ComponentModel.ComponentResourceManager(&lt;span style="color: #0000FF;"&gt;typeof&lt;/span&gt;(FrmPersonalInfo));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;switch&lt;/span&gt;&amp;nbsp;(imageType)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;case&lt;/span&gt;&amp;nbsp;UserImageType.个人肖像:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.picPortrait.EditValue&amp;nbsp;=&amp;nbsp;((&lt;span style="color: #0000FF;"&gt;object&lt;/span&gt;)(resources.GetObject(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;picPortrait.EditValue&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;)));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;case&lt;/span&gt;&amp;nbsp;UserImageType.身份证照片1:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.picIDCard1.EditValue&amp;nbsp;=&amp;nbsp;((&lt;span style="color: #0000FF;"&gt;object&lt;/span&gt;)(resources.GetObject(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;picIDCard1.EditValue&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;)));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;case&lt;/span&gt;&amp;nbsp;UserImageType.身份证照片2:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.picIDCard2.EditValue&amp;nbsp;=&amp;nbsp;((&lt;span style="color: #0000FF;"&gt;object&lt;/span&gt;)(resources.GetObject(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;picIDCard2.EditValue&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;)));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;case&lt;/span&gt;&amp;nbsp;UserImageType.名片1:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.picCard1.EditValue&amp;nbsp;=&amp;nbsp;((&lt;span style="color: #0000FF;"&gt;object&lt;/span&gt;)(resources.GetObject(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;picCard1.EditValue&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;)));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;case&lt;/span&gt;&amp;nbsp;UserImageType.名片2:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.picCard2.EditValue&amp;nbsp;=&amp;nbsp;((&lt;span style="color: #0000FF;"&gt;object&lt;/span&gt;)(resources.GetObject(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;picCard2.EditValue&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;)));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;span style="font-family: verdana, 'courier new'; font-size: 14px; line-height: 21px; "&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;span style="font-family: verdana, 'courier new'; font-size: 14px; line-height: 21px; "&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;由于采用了枚举类型&lt;span style="background-color: #f5f5f5; font-family: 'Courier New'; font-size: 13px; line-height: 19px; "&gt;UserImageType&lt;/span&gt;来区分不同的图片信息，因此多种图片的上传、显示、重置操作，基本上都相同的，较好地实现了代码的重用。另外值得注意的是，WCF默认不支持大一点的图片上传，一般需要设置配置文件来实现图片数据的上传（一般图片还是有点大的），所以需要设置服务端和客户端的配置文件，如下所示。&lt;/p&gt;&lt;p&gt;服务端的Web.Config配置文件如下所示&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/wuhuacong/wcf/wcf_uploadImage4.png" width="935" height="601" alt="" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;客户端配置如下所示。&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/wuhuacong/wcf/wcf_uploadImage5.png" width="906" height="498" alt="" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/wuhuacong/aggbug/2299614.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/wuhuacong/archive/2011/12/23/2299614.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/wuhuacong/archive/2011/12/03/2274808.html</id><title type="text">WCF开发框架形成之旅---终极WCF框架是什么样子的</title><summary type="text">前面几篇WCF框架的文章，一直是介绍我的WCF框架的形成中的知识，期间虽然我在工作项目中已经成功运用各种WCF的概念及特性，而且是多个部门之间的数据管理系统，基本上WCF框架的雏形已经形成了，不过我一直想把我成熟的Winform开发框架，提炼整合到WCF框架上，这样在成熟的Winform框架基础上应用的WCF技术，才是我真个WCF开发框架的终极形式，虽然项目时间很紧，但一直未曾停步，前阵子通宵达旦完成，并经过多番测试，今天有幸和大家分享一下这个WCF框架的真面目及其中的一些经验总结。</summary><published>2011-12-03T09:47:00Z</published><updated>2011-12-03T09:47:00Z</updated><author><name>伍华聪</name><uri>http://www.cnblogs.com/wuhuacong/</uri></author><link rel="alternate" href="http://www.cnblogs.com/wuhuacong/archive/2011/12/03/2274808.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/wuhuacong/archive/2011/12/03/2274808.html"/><content type="html">&lt;p&gt;前面几篇WCF框架的文章，一直是介绍我的WCF框架的形成中的知识，期间虽然我在工作项目中已经成功运用各种WCF的概念及特性，而且是多个部门之间的数据管理系统，基本上WCF框架的雏形已经形成了，不过我一直想把我成熟的Winform开发框架，提炼整合到WCF框架上，这样在成熟的Winform框架基础上应用的WCF技术，才是我整个WCF开发框架的终极形式，虽然项目时间很紧，但业余空闲时间我一直未曾停步，前阵子通宵达旦完成，并经过多番测试，今天有幸和大家分享一下这个WCF框架的真面目及其中的一些经验总结。&lt;/p&gt;&lt;p&gt;整个终极的WCF框架和Winform一样，整合了权限控制管理、字典管理模块、公用类库、通用程序自动更新等模块，具备良好的界面布局和分布式服务应用的特点，支持数据分页、数据导入、Excel导出、支持多界面样式、支持闪屏、热键控制、多数据库支持，并且和代码生成工具Database2Sharp紧密结合等等特点，不一一尽数。&lt;/p&gt;&lt;p&gt;前面几篇介绍了WCF相关的开发知识，如果有兴趣可以浏览下：&lt;/p&gt;&lt;p&gt;&lt;span  style="color: #333333; font-family: Verdana; font-size: 12px; line-height: normal; "&gt;&lt;a  href="http://www.cnblogs.com/wuhuacong/archive/2011/10/10/2205180.html" style="color: #222222; text-decoration: none; background: inherit; font-size: 12px; font-weight: normal; "&gt;WCF开发框架形成之旅--WCF应用常见问题处理&lt;/a&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span  style="color: #333333; font-family: Verdana; font-size: 12px; line-height: normal; "&gt;&lt;a  href="http://www.cnblogs.com/wuhuacong/archive/2011/09/29/2195528.html" style="color: #222222; text-decoration: none; background: inherit; font-size: 12px; font-weight: normal; "&gt;WCF开发框架形成之旅--如何实现X509证书加密&lt;/a&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span  style="color: #333333; font-family: Verdana; font-size: 12px; line-height: normal; "&gt;&lt;a  href="http://www.cnblogs.com/wuhuacong/archive/2011/09/29/2195442.html" style="color: #001e6a; text-decoration: underline; background: inherit; background-color: #f5f5f5; font-size: 12px; font-weight: normal; "&gt;WCF开发框架形成之旅--您的数据是否需要加密&lt;/a&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span  style="color: #333333; font-family: Verdana; font-size: 12px; line-height: normal; "&gt;&lt;a  href="http://www.cnblogs.com/wuhuacong/archive/2011/09/22/2185619.html" style="color: #001e6a; text-decoration: underline; background: inherit; background-color: #f5f5f5; font-size: 12px; font-weight: normal; "&gt;基于我的Winform开发框架扩展而成的WCF开发框架&lt;/a&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span  style="font-family: Arial; line-height: 25px; "&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 5px; margin-right: auto; margin-left: auto; margin-bottom: 5px; text-indent: 0px; "&gt;基于Winform框架改造而成的WCF框架分层结构如下所示，首先我们在界面UI层和业务逻辑BLL层插入一层WCF服务层，界面层UI不再业务层BLL打交道，而是代之以WCF服务层的客户端代理类打交道，而WCF服务层则是BLL层更进一步的包装，设计图如下所示。&lt;/p&gt;&lt;p style="margin-top: 5px; margin-right: auto; margin-left: auto; margin-bottom: 5px; text-indent: 0px; "&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/wuhuacong/wcf/wcf_framework.png" width="615" height="795" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-style: initial; border-color: initial; " /&gt;&amp;nbsp;&lt;/p&gt;整个WCF框架的项目工程如下所示，其中展开的是服务层，把所有项目中涉及到的业务类，公布为WCF服务层，如果系统设计数据比较敏感，可以采用证书加密传输，或者通过其他加密方式，具体可以参考我的随笔《&lt;span  style="font-family: Arial; font-weight: bold; line-height: 25px; "&gt;&lt;a id="ctl01_TitleUrl" href="http://www.cnblogs.com/wuhuacong/archive/2011/09/29/2195528.html" style="color: #223355; text-decoration: none; "&gt;WCF开发框架形成之旅--如何实现X509证书加密&lt;/a&gt;》&lt;/span&gt;：&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/wuhuacong/wcf/WCFWareHouse.png" width="305" height="833" alt="" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;上图把数据合约类（或者实体类）放到一个独立的层，这个是无奈之举，因为我的业务类之间有一些公用的实体类信息需要传输，如果把他整合到服务层，那么就会发生命名冲突的问题，这样把数据合约类（或者实体类）独立成工程项目作为引用，就能够解决该问题。&lt;/p&gt;&lt;p&gt;本WCF框架中的WHC.WareHouseMis层是业务逻辑层，包含业务逻辑、数据访问层在内的整个模块，其中支持SQLServer数据库、Access数据库两种数据库访问，由于构造通过工厂方式，因此通过配置参数即可实现切换，当然扩展下即可实现更多的数据库接入。&lt;/p&gt;&lt;p&gt;另外本WCF框架提供两种常见的界面框架，一种是传统的界面框架（采用Weifenluo布局空间），一种采用DevExpress界面组件形成，均具有一定的代表性，WCF框架的界面层，虽然其获取数据的方式不同，但和Winform框架具备相同的功能，如数据分页，数据导入、数据导出、权限控制、字典管理等等。&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;下面的图示界面层工程项目展开的截图，我们可以看到，在Winform框架中独立的通用权限管理模块、通用字典管理模块，在这里做了一个整合，不再是独立应用的程序集模块，所谓合久必分，分久必合，就是这样的道理。其中红色部分就是字典和权限管理的控制界面模块，这里把它作为界面的一部分，方便服务层的统一部署，统一使用或者统一修改配置等。 另外绿色部分是界面层的基类，这个和Winform框架是一样的，都是为了达到统一、合理封装的目的。&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/wuhuacong/wcf/WCFWareHouse2.png" width="319" height="487" alt="" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;我们来看看两种不同的界面效果，如下所示：&lt;/p&gt;&lt;p&gt;1）传统的界面布局效果如下所示。&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/wuhuacong/wcf/WCFWareHouse_Normal.png" width="1032" height="751" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;2）基于漂亮的界面控件DevExpress的界面效果如下所示&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/wuhuacong/wcf/WCFWareHouse_DevExpress.png" alt="" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;3）由于WCF框架整合了字典模块和权限模块的界面，因此同时更新了界面效果，其中DevExpress界面效果的字典模块如下所示&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/wuhuacong/wcf/WCFWareHouse_Dictionary.png" alt="" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;4）其中DevExpess界面效果的权限控制模块如下所示&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/wuhuacong/wcf/WCFWareHouse_Security.png" width="891" height="671" alt="" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;另外包含的WCF框架模块自动更新模块，由于采用了图片的背景界面效果。Winform开发框架和WCF开发框架的效果一样，而且都是采用独立的自动更新模块，通过配置更新地址和配置文件即可实现，不再赘述。&lt;/p&gt;&lt;p&gt;&lt;span  style="font-family: Arial; line-height: 25px; "&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/wuhuacong/winformControl/CommonAutoUpdate.png" width="496" height="239" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-style: initial; border-color: initial; " /&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;本文主要介绍WCF开发框架的总体内容，不设计代码，这可能给一切代码至上的朋友有些失望，不过却可以作为给大家进行分布式部署应用的一个思路及参考，如果您有好的建议或者问题，希望大家一起沟通，共同进步。&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/wuhuacong/aggbug/2274808.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/wuhuacong/archive/2011/12/03/2274808.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
