<?xml version="1.0" encoding="gb2312" ?>
<rss version="2.0">
<channel>
<title>千一网络</title>
<link>http://www.cftea.com/</link>
<description>让您的 Web 开发更轻松！</description>

<item>
<title><![CDATA[常用数学符号及其意义]]></title>
<link>http://www.cftea.com/c/2012/05/5556.asp</link>
<description><![CDATA[<P>（1）数量符号：如：i，2+i，a，x，自然对数底 e，圆周率π。</P>
<P>（2）运算符号：如加号（＋），减号（－），乘号（× 或 ·），除号（÷ 或／），两个集合的并集（∪），交集（∩），根号（√），对数（log，lg，ln），比（：），微分（dx），积分（∫）等。</P>
<P>（3）关系符号：如“＝”是等号，“≈”是近似符号，“≠”是不等号，“＞”是大于符号，“＜”是小于符号，“→ ”表示变量变化的趋势，“∽”是相似符号，“≌”是全等号，“∥”是平行符号，“⊥”是垂直符号，“∝”是反比例符号，“∈”是属于符号，“C”或“C 下面加一横”是“包含”符号等。</P>
<P>（4）结合符号：如圆括号“（）”方括号“［］”，花括号“｛｝”括线“—”</P>
<P>（5）性质符号：如正号“＋”，负号“－”，绝对值符号“‖”</P>
<P>（6）省略符号：如三角形（△），正弦（sin），余弦（cos），x 的函数（f(x)），极限（lim），因为（∵），所以（∴），总和（∑），连乘（∏），从 n 个元素中每次取出 r 个元素所有不同的组合数（C(r)(n) ），幂（A，Ac，Aq，x^n），阶乘（！）等。</P>
<P>&nbsp;</P>
<P>符号　意义</P>
<P>∞　无穷大</P>
<P>π　 圆周率</P>
<P>|x| 　绝对值</P>
<P>∪　并集</P>
<P>∩　交集</P>
<P>≥　大于等于</P>
<P>≤　小于等于</P>
<P>≡　恒等于或同余</P>
<P>ln(x) 　以 e 为底的对数</P>
<P>lg(x) 　以 10 为底的对数</P>
<P>floor(x) 　上取整函数</P>
<P>ceil(x) 　下取整函数</P>
<P>x mod y 　求余数</P>
<P>x - floor(x) 小数部分</P>
<P>∫ f(x)dx 　不定积分</P>
<P>∫ [a:b]f(x)dx 　 a 到 b 的定积分</P>
<P>数学符号的应用</P>
<P>P 为真等于 1 否则等于 0</P>
<P>∑ [1 ≤ k ≤ n]f(k) 对 n 进行求和 , 可以拓广至很多情况</P>
<P>如：∑ [n is prime][n &lt; 10]f(n)</P>
<P>∑∑ [1 ≤ i ≤ j ≤ n]n^2</P>
<P>lim f(x) (x-&gt;?) 求极限</P>
<P>f(z) f 关于 z 的 m 阶导函数</P>
<P>C(n:m) 组合数 ,n 中取 m</P>
<P>P(n:m) 排列数</P>
<P>m|n m 整除 n</P>
<P>m ⊥ n m 与 n 互质</P>
<P>a ∈ A a 属于集合 A</P>
<P>#A 集合 A 中的元素个数</P>
<P>更多请参见<A href="http://zh.wikipedia.org/wiki/%E6%95%B0%E5%AD%A6%E7%AC%A6%E5%8F%B7%E8%A1%A8" target=_blank>http://zh.wikipedia.org/wiki/%E6%95%B0%E5%AD%A6%E7%AC%A6%E5%8F%B7%E8%A1%A8</A>。</P>]]></description>
<pubDate>Fri, 11 May 2012 13:47:52  +0800</pubDate>
<unique><![CDATA[5556]]></unique>
<author><![CDATA[]]></author>
</item>

<item>
<title><![CDATA[Eval 会经过 HtmlEncode 转码吗？]]></title>
<link>http://www.cftea.com/c/2012/05/5555.asp</link>
<description><![CDATA[<P>在数据绑定中，GridView、DetailsView 等控件可用 Eval 进行绑定输出数据，这个数据是经过 HtmlEncode 编码的吗？</P>
<P>经过，也就是说，数据是 &lt;，输出为 &amp;lt; 代码，显示也就保持原样 &lt;。</P>]]></description>
<pubDate>Thu, 10 May 2012 12:53:54  +0800</pubDate>
<unique><![CDATA[5555]]></unique>
<author><![CDATA[vkvi]]></author>
</item>

<item>
<title><![CDATA[IE 中不显示 &nbsp; 为空格的解决]]></title>
<link>http://www.cftea.com/c/2012/05/5554.asp</link>
<description><![CDATA[<P>默认情况下多个连续的英文空格，在浏览器中只显示为一个，要想显示多个英文空格，得将每个空格转换为 &amp;nbsp;。</P>
<P>但是：如果是 UTF-8，如果是 IE。那么 &amp;nbsp; 将不会发生作用。</P>
<P><SPAN style="font-weight:bold;">解决办法</SPAN></P>
<P>指定编码：</P><TEXTAREA class="code css" cols=76 rows=10>*{font-family: Simsun;}</TEXTAREA> ]]></description>
<pubDate>Wed, 09 May 2012 12:49:00  +0800</pubDate>
<unique><![CDATA[5554]]></unique>
<author><![CDATA[vkvi]]></author>
</item>

<item>
<title><![CDATA[MAC 地址 C83A35 或 00B00C 开头的无线路由器得注意了]]></title>
<link>http://www.cftea.com/c/2012/05/5552.asp</link>
<description><![CDATA[<P>如果你的无线路由器前 6 位 MAC 地址是 C83A35 或 00B00C，就得小心了，因为这代表你的路由器基本在裸奔，对蹭网族高唱“我家大门常打开”——有网友在论坛爆出“裸奔 MAC 号”后，不少网友验证后称“准确率很高”，使用计算 PIN 值的软件，几分钟就可进去蹭网了。</P>
<P>防范方法：1. 关闭路由器的 QSS( 快速安全设置 ) 功能，如果确实需要使用，更改路由器出厂默认的 PIN 码。2、开启 MAC 过滤，只让自己设备网卡的 MAC 地址通过该路由器，并关闭 DHCP 自动分配，使用手动设置或者更改默认网段，更改路由器登录密码，定期更换设置等等。</P>]]></description>
<pubDate>Sat, 05 May 2012 06:27:49  +0800</pubDate>
<unique><![CDATA[5552]]></unique>
<author><![CDATA[]]></author>
</item>

<item>
<title><![CDATA[超炫特效的金山猎豹浏览器]]></title>
<link>http://www.cftea.com/c/2012/05/5553.asp</link>
<description><![CDATA[<P>金山的猎豹浏览器还处于内测阶段，从内测来看，超炫的特效是其卖点之一。</P>
<DIV style="TEXT-ALIGN: center"><EMBED align=middle src=http://player.youku.com/player.php/sid/XMzkwMDIzMjM2/v.swf width=480 height=400 type=application/x-shockwave-flash allowscriptaccess="always" allowfullscreen="true" quality="high"></EMBED></DIV>
<P>另外一项主打功能就是安全，为了表示其对安全的信息，推出了网购敢赔服务，如果因为使用猎豹浏览器导致帐号被盗，可获赔偿 1000 元。</P>
<P>从技术上来说，猎豹采用的是基于 Chrome 和 IE 的双内核浏览器，猎豹会智能地根据速度、兼容性来选择不同的内核。</P>]]></description>
<pubDate>Fri, 04 May 2012 17:33:32  +0800</pubDate>
<unique><![CDATA[5553]]></unique>
<author><![CDATA[vkvi]]></author>
</item>

<item>
<title><![CDATA[样式表优先级全而简的总结]]></title>
<link>http://www.cftea.com/c/2012/05/5551.asp</link>
<description><![CDATA[<P>全而简的总结？既全又简，不矛盾吗？不矛盾，全是指涉及的方面完善，简是指介绍最常见的应用。互联网讲究的就是效率，如果而大而全的教程，是没人看的，看了也记不住。麻痹，比话真多。</P>
<P><SPAN style="font-weight:bold;">默认样式的优先级最低</SPAN></P>
<P>比如虽然我们没有指定 li 前面有个黑点，但它实际上显示出来就有，这就是浏览器的默认样式，这个优先级最低。</P>
<P><SPAN style="font-weight:bold;">内联样式的优先级最高</SPAN></P>
<P>就是直接利用标签的 style 属性写的样式优先级最高。</P>
<P><SPAN style="font-weight:bold;">“页面内嵌样式 &gt; 外部文件样式”这种说法是错误的</SPAN></P>
<P>网上有人说“页面内嵌样式”的优先级高于“外部文件样式”，<SPAN style="color:blue;">其实这种说法是错误的</SPAN>，其实是在选择符优先级一样的情况下，谁在 HTML 代码位置的后面，谁生效（下一条就是说的这个）。</P>
<P><SPAN style="font-weight:bold;">优先级相同的话，写在后面的样式表优先级高</SPAN></P><TEXTAREA class="code css" rows=10 cols=76>.c1{color:red;}
.c1{color:green;} /*生效*/</TEXTAREA> 
<P>以上示例为了简单，都是使用的 .c1，有相同的优先级。还有，class 属性中可用空格隔开多个 className，在 class 属性中，哪个 className 写在前面、后面，是没有影响的，比如：class="c1 ca" <SPAN style="color:blue;">等效于</SPAN> class="ca c1"。</P>
<P><SPAN style="font-weight:bold;">“直接领导”的优先级高于间接领导</SPAN></P><TEXTAREA class="code css" rows=10 cols=76>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;

&lt;head&gt;
&lt;title&gt;千一网络&lt;/title&gt;
&lt;style type="text/css"&gt;
.c2{color:pink;}
#c {color:red;}
&lt;/style&gt;
&lt;/head&gt;

&lt;body&gt;
&lt;div id="c"&gt;
    &lt;div class="c1"&gt;
        1
        &lt;div class="c2"&gt;
            2
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;/body&gt;

&lt;/html&gt;</TEXTAREA> 
<P>id 的优先级是高于 class 的（后面会介绍），但是由于 2 这个内容的“直接领导”是 c2，所以说 c 虽然是 id，但它管不到，所以 2 显示为 pink（粉红色）。</P>
<P><SPAN style="font-weight:bold;">优先级：id &gt; class &gt;&nbsp;标签 &gt; 伪类</SPAN></P>
<P>同样是上面的 HTML 代码，把 CSS 换成：</P><TEXTAREA class="code css" rows=10 cols=76>.c2{color:pink;}
div{color:red;}</TEXTAREA> 
<P>那么 2 仍然是粉红色，因为 div 是标签，其优先级低于 class c2。伪类就是用冒号隔开的，比如 :hover。</P>
<P><SPAN style="font-weight:bold;">上面是个简单的例子，常用的实际上是多层级的情况下</SPAN></P><TEXTAREA class="code css" rows=10 cols=76>.c1 div.c2{color:pink;} /*生效*/
.c1 .c2{color:red;}</TEXTAREA> 
<P>再看：</P><TEXTAREA class="code css" rows=10 cols=76>div .c2{color:pink;} /*生效*/
.c2{color:red;}</TEXTAREA> 
<P>如上可以归纳为，层级越是具体，优先级越是高。如果从数学上来说：id 是一个数量级的，class 是一个数量级的，tag 是一个数量级的。无论多少个 class 都抵不过一个 id，无论多少个 tag 都比不上一个 class。比如说：</P><TEXTAREA class="code csharp" rows=10 cols=76>.c2{color:pink;} /*生效*/
div div div{color:red;}</TEXTAREA> ]]></description>
<pubDate>Fri, 04 May 2012 12:17:42  +0800</pubDate>
<unique><![CDATA[5551]]></unique>
<author><![CDATA[vkvi]]></author>
</item>

<item>
<title><![CDATA[微软 All-In-One Code Framework]]></title>
<link>http://www.cftea.com/c/2012/05/5550.asp</link>
<description><![CDATA[<P>微软 All-In-One Code Framework 是一款免费的、开发者所需的中心代码示例库，目的是为所有的微软开发技术提供典型的代码示例，减少开发人员在解决典型编码任务时的付出。</P>
<P style="text-align:center;"><IMG border=0 alt="微软 All-In-One Code Framework" src="http://www.cftea.com/c/2012/05/5550/YD59DKJDFHQ9FN3Q.png"></P>
<P><SPAN style="font-weight:bold;">官方网址</SPAN></P>
<P><A href="http://1code.codeplex.com/" target=_blank>http://1code.codeplex.com/</A></P>]]></description>
<pubDate>Tue, 01 May 2012 08:38:41  +0800</pubDate>
<unique><![CDATA[5550]]></unique>
<author><![CDATA[vkvi]]></author>
</item>

<item>
<title><![CDATA[备份 Windows Server 2008 的用户]]></title>
<link>http://www.cftea.com/c/2012/04/5549.asp</link>
<description><![CDATA[<P>在开始菜单中运行 credwiz，弹出如下对话框即可进行备份、还原。</P>
<P style="text-align:center;"><IMG alt="备份 Windows Server 2008 的用户" src="http://www.cftea.com/c/2012/04/5549/VHFOA8CP477UQNHK.png" border=0></P>
<P>在备份过程中，会要求按 Ctrl + Alt + Delete，如果是远程桌面，则按这三个键只在本地响应，要向远程桌面 mstsc 发送 Ctrl + Alt + Delete 键，可参见：<A href="http://www.cftea.com/c/2012/04/5548.asp" target=_blank>如何向远程桌面 mstsc 发送 Ctrl + Alt + Delete</A>。</P>]]></description>
<pubDate>Sun, 29 Apr 2012 06:12:06  +0800</pubDate>
<unique><![CDATA[5549]]></unique>
<author><![CDATA[vkvi]]></author>
</item>

<item>
<title><![CDATA[如何向远程桌面 mstsc 发送 Ctrl + Alt + Delete]]></title>
<link>http://www.cftea.com/c/2012/04/5548.asp</link>
<description><![CDATA[<P><SPAN style="font-weight:bold;">对于 Windows Server 2008 系统</SPAN></P>
<P>在远程端的开始菜单中，有一项“Windows 安全”，单击它即可。</P>
<P><SPAN style="font-weight:bold;">对于 Windows XP 系统</SPAN></P>
<P>在远程端的开始菜单中，有一项“设置”，其中有一项“Windows 安全性”，单击它即可。</P>]]></description>
<pubDate>Sat, 28 Apr 2012 06:49:38  +0800</pubDate>
<unique><![CDATA[5548]]></unique>
<author><![CDATA[vkvi]]></author>
</item>

<item>
<title><![CDATA[LINQ to SQL 学习笔记－查询(2)]]></title>
<link>http://www.cftea.com/c/2012/04/5547.asp</link>
<description><![CDATA[<P><SPAN style="font-weight:bold;">join 及一对多聚合</SPAN></P>
<P>Sites 和 Topics 是一对多的关系，即 Sites 的某个 SiteId 在 Topics 中可能关联一条记录，也可能是多条，也可能没有。</P><TEXTAREA class="code sql" cols=76 rows=10>var obj = from s in dc.Sites
          join t in dc.Topics on s.SiteId equals t.SiteId into topics
          where s.PathTree.StartsWith(pathTree)
          select new
          {
              s.SiteId,
              s.SiteKey,
              s.SiteName,
              TopicCount = topics.Count(i=&gt;i.CreatedOn&gt;=StartDate &amp;&amp; i.CreatedOn&lt;EndDate.AddDays(1))
          };

if (_orderby.SelectedValue == "quantity")
{
    obj = obj.OrderByDescending(i =&gt; i.TopicCount);
}
else
{
    obj = obj.OrderByDescending(i =&gt; i.SiteKey);
}</TEXTAREA> 
<P>如上代码，看似简单，实际包含了很多玄机。</P>
<UL>
<LI>into 相当于形成一个新的变量，但是这只是用法上来说，实际上是实现一对多的特殊效果，如果不要 into，那么上面的语句相当于 Sites 和 Topics 的 inner join 连接，如果某个 SiteId 在 Topics 中找不到，则该 Site 不会被选择出来，如果有多个，则会选择多个。有了 into 就不一样了，每一个 Site 都会被选择出来，每一个 Site 还会对应一个 topics，其对应的 topics 是 0 到多条与 SiteId 关联的 Topic。<SPAN style="color:blue;">这种效果是什么呢？这种效果就好比对象数据库了，一个 Site 对应一个 List&lt;Topic&gt;。</SPAN></LI>
<LI>计算 TopicCount 需要条件。我们没有像 SQL 那种思路放在 where 中，而是直接放在 Count 方法中。因为 t 已经 into 为 topics，在 where 中实现难以操作。</LI>
<LI>最后排序，起初我试图写 where (_orderby.SelectedValue == "quantity" ? topics.Count() : s.SiteKey) descending，但是由于二者一个是数字类型，一个是字符串类型，? : 不认这样的做法。所以干脆放到后面。</LI></UL>
<P><SPAN style="font-weight:bold;">join 多列（多条件）</SPAN></P>
<P>前面讲的 join 都只有一个条件，要使用 and、&amp;&amp; 实现多个条件会发现要报错。解决办法有多个。</P>
<P>简单的如果是多个等于条件，可用 new：</P><TEXTAREA class="code csharp" cols=76 rows=10>on new
{
    t.SiteId,
    t.UserId
}
equals
new
{
    s.SiteId,
    u.UserId
}</TEXTAREA> 
<P>如果是更复杂的，比如之前示例中的 CreatedOn 并没有与另外一个表关联，并且它是 &gt;= 这种，像这种可以放在 where 或其他地方。</P>
<P><SPAN style="font-weight:bold;">orderby</SPAN></P>
<P>orderby 没什么要说的，很 SQL 很相像，只是 orderby 的写法不是 order by。</P>
<P><SPAN style="font-weight:bold;">orderby 多列</SPAN></P>
<P>orderby 子句中可以直接像&nbsp;SQL 一样写多个字段，逗号隔开，没有什么特别说明的，这里只是说，如果不是说 orderby 语句，而是用 OrderBy、ThenBy 方法要注意的。要注意的就是：OrderBy 多个连用时，是后面的优先级高。</P>
<P>t.OrderBy(i=&gt;i.TopicId).OrderBy(i=&gt;i.ColumnId) 等效 SQL&nbsp;order by ColumnId, TopicId。</P>
<P>t.OrderBy(i=&gt;i.TopicId).ThenBy(i=&gt;i.ColumnId) 等效 SQL&nbsp;order by TopicId, ColumnId</P>
<P>还有带 OrderByDescending、ThenByDescending，用法一样，只是表示降序。</P>
<P><SPAN style="font-weight:bold;">group by</SPAN></P><TEXTAREA class="code csharp" cols=76 rows=10>var obj = from t in dc.ZeeHcm_Topics
          group t by t.SiteId into t2
          select new
          {
              TopicId = t2.Key,
              TopicCount = t2.Count()
          }; </TEXTAREA> 
<P>要注意，group by 不像 orderby 一样合在一起，而是中间还有个空格。并且 group by 的内容要 into。</P>
<P><SPAN style="font-weight:bold;">group by 多列</SPAN></P>
<P>多列怎么写呢？跟前面说的一样，用 new 对象：</P><TEXTAREA class="code csharp" cols=76 rows=10>var obj = from t in dc.ZeeHcm_Topics
          group t by new { t.SiteId, t.ColumnId } into t2
          select new
          {
              TopicId = t2.Key,
              TopicCount = t2.Count()
          };</TEXTAREA> 
<P><SPAN style="font-weight:bold;">参考资料</SPAN></P>
<UL>
<LI><A href="http://www.cnblogs.com/lyj/archive/2008/03/24/1119671.html" target=_blank>LINQ体验系列</A></LI>
<LI><A href="http://www.cnblogs.com/126/category/101197.html" target=_blank>LINQ to SQL 进阶系统</A></LI>
<LI><A href="http://www.cnblogs.com/lovecherry/archive/2007/08/13/853754.html" target=_blank>一步一步学 LINQ to SQL</A></LI>
<LI><A href="http://www.cftea.com/c/2009/08/BKXZ08SXT2V40F4O.asp" target=_blank>LINQ 步步学</A></LI></UL>]]></description>
<pubDate>Fri, 27 Apr 2012 06:34:41  +0800</pubDate>
<unique><![CDATA[5547]]></unique>
<author><![CDATA[vkvi]]></author>
</item>

<item>
<title><![CDATA[ListView 的 GridLines 怎么没用？]]></title>
<link>http://www.cftea.com/c/2012/04/5546.asp</link>
<description><![CDATA[<P>设置 ListView 的 GridLines 为 True，但仍然没有网格效果，怎么回事。</P>
<P>ListView 有多种模式（View），在 List 模式下，就没有网格，改为 Details 就可以看到了。</P>]]></description>
<pubDate>Thu, 26 Apr 2012 06:15:03  +0800</pubDate>
<unique><![CDATA[5546]]></unique>
<author><![CDATA[vkvi]]></author>
</item>

<item>
<title><![CDATA[StreamWriter 写入文件时关于编码的问题]]></title>
<link>http://www.cftea.com/c/2012/04/5545.asp</link>
<description><![CDATA[<TEXTAREA class="code csharp" rows=10 cols=76>using (StreamWriter writer = new StreamWriter("C:\\f1.txt"))
{
    writer.Write("cftea");
    writer.Close();
    writer.Dispose();
}
using (StreamWriter writer = new StreamWriter("C:\\f2.txt"))
{
    writer.Write("bom千一网络");
    writer.Close();
    writer.Dispose();
}</TEXTAREA> 
<P>第一个是全英文，所以生成的文件是 ANSI 编码；第二个由于有非英文，所以生成的文件是 UTF-8。</P>
<P>但是第二个生成的 UTF-8 没有 BOM，就是说可能不便于编码的自动识别。要写入带 BOM 的 UTF-8 文件，须明确指定编码，如下：</P><TEXTAREA class="code csharp" rows=10 cols=76>using (StreamWriter writer = new StreamWriter("C:\\f3.txt", false, Encoding.UTF8))
{
    writer.Write("cftea千一网络");
    writer.Close();
    writer.Dispose();
}</TEXTAREA> ]]></description>
<pubDate>Wed, 25 Apr 2012 06:11:48  +0800</pubDate>
<unique><![CDATA[5545]]></unique>
<author><![CDATA[vkvi]]></author>
</item>

<item>
<title><![CDATA[Encoding 的 EncodingName 与 WebName 区别]]></title>
<link>http://www.cftea.com/c/2012/04/5544.asp</link>
<description><![CDATA[<P>举例子来说明：</P>
<P><SPAN style="font-weight:bold;">UTF-8 的：</SPAN></P>
<UL>
<LI>EncodingName：Unicode(UTF-8)</LI>
<LI>WebName：utf-8</LI></UL>
<P><SPAN style="font-weight:bold;">GB2312 的：</SPAN></P>
<UL>
<LI>EncodingName：简体中文(GB2312)</LI>
<LI>WebName：gb2312</LI></UL>
<P><SPAN style="font-weight:bold;">可以看出 WebName 是 EncodingName 括号中的部分，且是小写。</SPAN></P>]]></description>
<pubDate>Tue, 24 Apr 2012 06:40:03  +0800</pubDate>
<unique><![CDATA[5544]]></unique>
<author><![CDATA[vkvi]]></author>
</item>

<item>
<title><![CDATA[靠 StreamReader 的 CurrentEncoding 来识别编码的注意]]></title>
<link>http://www.cftea.com/c/2012/04/5543.asp</link>
<description><![CDATA[<P>StreamReader 有十个构造函数，我们说其中三个：</P><TEXTAREA class="code csharp" rows=10 cols=76>StreamReader reader = new StreamReader(filePath);
StreamReader reader = new StreamReader(filePath, detectEncodingFromByteOrderMarks);
StreamReader reader = new StreamReader(filePath, detectEncodingFromByteOrderMarks, encoding);</TEXTAREA> 
<P>第一个构造函数是使用默认的编码读取文件。</P>
<P>第二个构造函数增加了一个参数 true/false，用来表示是否自动探测 BOM（文件前端标识文字编码的字节）。</P>
<P>第三个构造函数又增加了一个参数 encoding，因为有些编码（比如 GB2312、UTF7）就没有 BOM，就认识不到编码，就需要手动指定一个编码。</P>
<P>对于第一个构造函数，CurrentEncoding 就是 UTF-8。</P>
<P>对于第二个构造函数，如果识别到了编码，CurrentEncoding 就是识别到的编码，否则就是 UTF-8。</P>
<P>对于第三个构造函数，如果没有识别到编码，就是 encoding 指定的编码。</P>
<P><SPAN style="font-weight:bold;">真的没有解决办法了吗？</SPAN></P>
<P>我们还忽略了一个东西 Encoding.Default。</P><TEXTAREA class="code csharp" rows=10 cols=76>StreamReader reader = new StreamReader(filePath, Encoding.Default));
reader.Read();
MessageBox.Show(reader.CurrentEncoding.EncodingName);</TEXTAREA> 
<P><SPAN style="color:blue;">注意，此时 CurrentEncoding 就可以判断编码了，但是前提是一定要至少调用一个 Read（ReadToEnd 这些带 Read 的方法也可以） 之后。</SPAN></P>]]></description>
<pubDate>Mon, 23 Apr 2012 09:18:14  +0800</pubDate>
<unique><![CDATA[5543]]></unique>
<author><![CDATA[vkvi]]></author>
</item>

<item>
<title><![CDATA[用一句 SQL 更新表记录 ID 在另一个表关联/出现的次数]]></title>
<link>http://www.cftea.com/c/2012/04/5542.asp</link>
<description><![CDATA[<P>表之间关联可能会存在一对多方式，如何在 SQL Server 中实现一句 SQL 语句就更新 A 表的记录在另一个表对应的个数呢？</P><TEXTAREA class="code sql" cols=76 rows=10>update a set aInBCount=(select count(*) from b where b.aId=a.aId)</TEXTAREA>]]></description>
<pubDate>Sun, 22 Apr 2012 17:06:42  +0800</pubDate>
<unique><![CDATA[5542]]></unique>
<author><![CDATA[vkvi]]></author>
</item>

<item>
<title><![CDATA[VC# Delete 键实现列表框选择项删除]]></title>
<link>http://www.cftea.com/c/2012/04/5541.asp</link>
<description><![CDATA[<P>针对 KeyDown 事件，循环：若当前项选择了则删除；否则 i++。</P><TEXTAREA class="code csharp" rows=10 cols=76>private void _filePaths_KeyDown(object sender, KeyEventArgs e)
{
    // Delete 键删除
    if (e.KeyCode == Keys.Delete)
    {
        int i = 0;
        while (i &lt; _filePaths.Items.Count)
        {
            if (_filePaths.Items[i].Selected)
            {
                _filePaths.Items.RemoveAt(i);
            }
            else
            {
                i++;
            }
        }
    }
}</TEXTAREA> 
<P>您可能会说：这多复杂啊，用 _filePaths.SelectedItems.Clear(); 且不是一句代码就删除了。</P>
<P>错了，_filePaths.SelectedItems.Clear(); 表示从选中项中删除，并不是删除选中项。真拗口，从选中项中删除，说白了，它的作用就是清除选择，相当于“全不选”。</P>]]></description>
<pubDate>Sat, 21 Apr 2012 06:38:28  +0800</pubDate>
<unique><![CDATA[5541]]></unique>
<author><![CDATA[vkvi]]></author>
</item>

<item>
<title><![CDATA[VC# 中轻松实现文件拖拽]]></title>
<link>http://www.cftea.com/c/2012/04/5540.asp</link>
<description><![CDATA[<P><SPAN style="font-weight:bold;">第一步、要为接受拖拽的控件设置 AllowDrop 属性为 True。</SPAN></P>
<P>这个属性默认为 False，所以需要设置一下。</P>
<P><SPAN style="font-weight:bold;">第二步、响应文件拖拽</SPAN></P>
<P>为接受拖拽的控件设置事件处理程序 DragEnter，如果是文件（包含文件夹）拖拽，则响应之。</P><TEXTAREA class="code csharp" rows=10 cols=76>private void _filePaths_DragEnter(object sender, DragEventArgs e)
{
    if (e.Data.GetDataPresent(DataFormats.FileDrop))
    {
        e.Effect = DragDropEffects.Link;
    }
    else
    {
        e.Effect = DragDropEffects.None;
    }
}</TEXTAREA> 
<P><SPAN style="font-weight:bold;">第三步、获取拖拽的文件</SPAN></P>
<P>为接受拖拽的控件设置事件处理程序 DragDrop。</P><TEXTAREA class="code csharp" rows=10 cols=76>private void _filePaths_DragDrop(object sender, DragEventArgs e)
{
    string[] filePaths = (e.Data.GetData(DataFormats.FileDrop, false) as string[]);
    _filePaths.Items.Clear();
    for (int i = 0; i &lt; filePaths.Length; i++)
    {
        if (File.Exists(filePaths[i]))
        {
            // 用 File.Exists 判断是文件还是文件夹，是文件才加入。
            _filePaths.Items.Add(filePaths[i]);
        }
    }
}</TEXTAREA> ]]></description>
<pubDate>Fri, 20 Apr 2012 16:19:37  +0800</pubDate>
<unique><![CDATA[5540]]></unique>
<author><![CDATA[vkvi]]></author>
</item>

<item>
<title><![CDATA[LINQ to SQL 学习笔记－查询]]></title>
<link>http://www.cftea.com/c/2012/04/5539.asp</link>
<description><![CDATA[<P><SPAN style="font-weight:bold;">用不起？</SPAN></P>
<P>光 using System.Linq 还不够，要用 LINQ to SQL 还得引用 System.Data.Linq.dll。如果我们写 LINQ 代码时，没有自动列表提示，那多半就是这个原因了。</P>
<P><SPAN style="font-weight:bold;">一个简单的选择示例</SPAN></P>
<P>DataClassesDataContext（您不一定要取这个名字） 是一个 LINQ to SQL 类，建好类后，把相应的表拖到设计器上就可以了（注意：像 <A href="http://www.cftea.com/c/2012/02/7PYCISW8TEW1FRC7.asp" target=_blank>hierarchyid</A> 这种特殊字段类型，是不受支持的）。</P><TEXTAREA class="code csharp" rows=10 cols=76>DataClassesDataContext dc = new DataClassesDataContext();
var obj = from t in dc.Topics
          where t.TopicId == topicId
          select t.TopicId;
if (obj.Count() &gt; 0)
{
    Response.Write(obj.ToList&lt;int&gt;()[0]); // 显示第一条记录，如果无记录，则 [0] 会出错。
}</TEXTAREA> 
<P>纵然我们上述 SQL 是想选择一个 int 值，但结果 obj 不会是一个 int，而是 System.Linq.IQueryable。所以即使没有符合条件的记录，obj 也不会是 null，它是一个对象，只是没有项。</P>
<P><SPAN style="font-weight:bold;">一个高级点的选择示例</SPAN></P><TEXTAREA class="code csharp" rows=10 cols=76>var result = from t in dc.Topics 
join s in dc.Sites on t.SiteId equals s.SiteId 
where t.PublicationCount &gt; 0 &amp;&amp; t.SiteId == siteId  &amp;&amp; t.TopicName.StartsWith("cftea")
orderby t.TopicId descending 
select new 
{ 
    TopicId = t.TopicId, 
    TopicName = t.TopicName, 
    EffectiveTime = t.EffectiveTime, 
    SiteKey = s.SiteKey 
}; 
</TEXTAREA> 
<P>这个示例是想说明：</P>
<UL>
<LI>inner join 中要表达等于，不用 =、==，而用 equals；</LI>
<LI>where 中表达等于，不用 =，而用 ==；</LI>
<LI>where 中表达和，不用 and，用 &amp;&amp;；</LI>
<LI>可以像使用 C# 环境一样操作数据库的字段，比如上面的 StartsWidth；</LI>
<LI>另外，如果要使用 like 或时间日期函数，可用 System.Data.Linq.SqlClient.SqlMethods 类的 Like 等方法。</LI></UL>
<P><SPAN style="font-weight:bold;">分页</SPAN></P>
<P><TEXTAREA class="code csharp" rows=10 cols=76>obj = obj.Skip(pageIndex * pageSize).Take(pageSize);</TEXTAREA></P>
<P>如上获得指定页的记录，LINQ 会自动创建分页的 SQL 语句。而且这个分页速度非常很快噢。</P>
<P><SPAN style="font-weight:bold;">记录数</SPAN></P><TEXTAREA class="code csharp" rows=10 cols=76>Response.Write(obj.Count()); // 符合条件总的记录数
Response.Write("&lt;br&gt;");
Response.Write(obj.Skip(3).Take(3).Count()); // 分页后当前页的实际记录数</TEXTAREA> 
<P><SPAN style="font-weight:bold;">查看 LINQ 生成的 SQL 语句</SPAN></P>
<P>前面说了会自动创建分页的 SQL 语句，效率还很高，我想看看这个高效率的 SQL 语句是个啥样的，那么就 Response.Write(obj)，obj 就以 SQL 语句的形式输出了。</P>
<P><SPAN style="font-weight:bold;">相关阅读</SPAN></P>
<UL>
<LI><A href="http://kb.cnblogs.com/page/42465/" target=_blank>LINQ to SQL 语句</A></LI>
<LI><A href="http://www.cnblogs.com/lovecherry/archive/2007/08/17/859826.html" target=_blank>一步一步学Linq to sql（四）：查询句法</A></LI>
<LI><A href="http://www.cnblogs.com/126/archive/2007/08/01/839448.html" target=_blank>C#3.0入门系列（十一）-之 In, Like 操作</A></LI>
<LI><A href="http://www.cftea.com/c/2009/08/BKXZ08SXT2V40F4O.asp" target=_blank>LINQ 步步学</A></LI></UL>]]></description>
<pubDate>Thu, 19 Apr 2012 09:00:48  +0800</pubDate>
<unique><![CDATA[5539]]></unique>
<author><![CDATA[vkvi]]></author>
</item>

<item>
<title><![CDATA[SQL Server Management Studio 一则误报]]></title>
<link>http://www.cftea.com/c/2012/04/5538.asp</link>
<description><![CDATA[<P>在 SQL Server Management Studio 创建 for delete 的<A href="http://www.cftea.com/specials/trigger/" target=_blank>触发器</A>时，即时提示显示错误，说不能为级联删除（表关系中的级联删除）的表创建 <A href="http://www.cftea.com/c/761.asp" target=_blank>instead of</A> 触发器，可是我明明用的是 for 触发器啊。仅仅因为我之前出现过 instead of，就再也在这个窗口中消不掉提示了。</P>
<P>晕，不管它，执行，创建成功。</P>]]></description>
<pubDate>Wed, 18 Apr 2012 15:33:37  +0800</pubDate>
<unique><![CDATA[5538]]></unique>
<author><![CDATA[vkvi]]></author>
</item>

<item>
<title><![CDATA[hierarchyid 无法在 .NET 4.0 及以下的环境的 LINQ to SQL 中使用]]></title>
<link>http://www.cftea.com/c/2012/04/5537.asp</link>
<description><![CDATA[<P><A href="http://www.cftea.com/c/2012/02/7PYCISW8TEW1FRC7.asp" target=_blank>hierarchyid</A> 是 SQL Server 2008 中新增的用以表示层级的字段类型，用起来很方便，效率很高。但如果是要用于&nbsp;LINQ to SQL&nbsp;就不行了，至少现行的框架中都还不支持这个字段，如果我们新建一个 LINQ to SQL 类，往其中拖入含有 hierarchyid 字段的表时，将得到提示：一个或多个选定项包含设计器不支持的数据类型。这种情况下，我们只能从选择中排除这个字段，再拖入，但涉及到这个字段的 LINQ to SQL，肯定受影响了。</P>
<P style="text-align:center;"><IMG alt=一个或多个选定项包含设计器不支持的数据类型。 src="http://www.cftea.com/c/2012/04/5537/M18RLRB0GLYXP79R.png" border=0></P>]]></description>
<pubDate>Tue, 17 Apr 2012 16:47:26  +0800</pubDate>
<unique><![CDATA[5537]]></unique>
<author><![CDATA[vkvi]]></author>
</item>

</channel>
</rss>

