<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-cN" xml:base="http://udnz.com/"><id>http://udnz.com/Atom.aspx</id><updated>2010-09-06T15:27:26</updated><link href="http://udnz.com/Atom.aspx" /><link rel="self" href="http://udnz.com/Atom.aspx" /><title>Hi, BeNuts! -- 学习笔记</title><entry><id>http://udnz.com/Article/How-to-design-and-query-category-table.aspx</id><title><![CDATA[无限级分类表的设计、查询、转换]]></title><link href="http://udnz.com/Article/How-to-design-and-query-category-table.aspx" /><updated>2010-08-09T17:08:01</updated><summary><![CDATA[本文介绍无限级分类数据表的设计、查询和表形式转换]]></summary></entry><entry><id>http://udnz.com/Article/Folder_And_File_Name_Roles.aspx</id><title><![CDATA[Windows系统中文件、文件夹命名规范及其正则表达式]]></title><link href="http://udnz.com/Article/Folder_And_File_Name_Roles.aspx" /><updated>2010-07-28T13:33:07</updated><summary><![CDATA[一般情况下，所有的汉字和英文字母都可以作为文件和文件夹的名字或是其中的一部分，有少数特殊的符号和被保留的字母组合不能被用作文件和文件夹名字或是其中一部分。]]></summary></entry><entry><id>http://udnz.com/Article/How_To_Use_Connection_Manager_API.aspx</id><title><![CDATA[[C#]Windows Mobile 6.0/6.5 手机GPRS连接上网]]></title><link href="http://udnz.com/Article/How_To_Use_Connection_Manager_API.aspx" /><updated>2010-06-25T14:06:00</updated><summary><![CDATA[因开发BeNuts配套程序手机微博需要，研究了一下WM系统的网络连接开发，根据参考和MSDN帮助文档封装了一个类，目前可以支持：

枚举手机可用的网络连接
使用系统默认设置联网
使用指定网络连接联网
关闭指定的网络连接
查询指定连接的网络连接状态

附DEMO程序下载]]></summary></entry><entry><id>http://udnz.com/Article/SendEmail_By_SqlServer.aspx</id><title><![CDATA[多图祥解使用 SQL Server 2005/2008 发送数据库邮件]]></title><link href="http://udnz.com/Article/SendEmail_By_SqlServer.aspx" /><updated>2010-05-24T17:03:06</updated><summary><![CDATA[SQL Server 可以直接用来发送邮件。其中Sql Mail可以在Sql 2000中使用，数据库邮件可以在2005及以上版本上使用。手上只有2008，以下以SQL Server 2008为例详细图解说明配置的过程。]]></summary></entry><entry><id>http://udnz.com/Article/KeyCode_In_Wm6.5_On_Samsung_I8000.aspx</id><title><![CDATA[【WM6.5】三星I8000按键码及窗体消息发送的方法备忘]]></title><link href="http://udnz.com/Article/KeyCode_In_Wm6.5_On_Samsung_I8000.aspx" /><updated>2010-05-16T19:43:46</updated><summary><![CDATA[平时喜欢听收音机，但三星I8000无法用线控接听键为收音机换台，很不方便，想做一个小程序解决这个问题，于是分两步走：
1.拦截线控接听键
2.以某种方式控制收音机换台（如系统消息等）
就目前的研究结果而言，线控接听键还无法拦截，只能在KeyUp的时候响应。]]></summary></entry><entry><id>http://udnz.com/Article/Auto_Backup_MSSQL_To_Remote_Server.aspx</id><title><![CDATA[用作业实现自动备份MSSQL数据库到远程服务器]]></title><link href="http://udnz.com/Article/Auto_Backup_MSSQL_To_Remote_Server.aspx" /><updated>2010-04-29T13:07:46</updated><summary><![CDATA[此代码实现SQL数据库远程备份，放到作业里面执行可以自动备份数据库、自动删除@keepNDays天前备份。
此代码将本地所有的用户数据库备份到共享目录“\\backupServerIp\ShareName\数据库备份”下。
并删除30天前的备份文件。要备份成功必须能够对共享目录有操作权限！]]></summary></entry><entry><id>http://udnz.com/Article/Debug-In-CSharp-Conditional.aspx</id><title><![CDATA[C#.NET开发中善用条件编译&mdash;&mdash;优雅的Conditional]]></title><link href="http://udnz.com/Article/Debug-In-CSharp-Conditional.aspx" /><updated>2010-04-13T11:27:56</updated><summary><![CDATA[曾几何时，看到了这个方法属性，但当时只记得其功能而没有认真记下它本身。在后来很长一段时间内，屡次需要用到这个功能却又忘记了这个方法属性到底是什么，这此期间莫不痛心疾首。

直到今天，无意间又发现了它——ConditionalAttribute，让我感觉如获至宝。
实际上，用的多了你就知道了，Conditional 的使用远不是“优雅”这么简单的。]]></summary></entry><entry><id>http://udnz.com/Article/ActiveX-in-DotNet.aspx</id><title><![CDATA[c#.NET中开发可用于Web网页的ActiveX控件]]></title><link href="http://udnz.com/Article/ActiveX-in-DotNet.aspx" /><updated>2010-04-09T17:37:03</updated><summary><![CDATA[一、COM可见及GUID
二、修改AssemblyInfo.cs文件
三、类的实现
四、实现事件
五、注册和注销
六、调用
七、常见问题]]></summary></entry><entry><id>http://udnz.com/Article/Get_Html_By_HttpWebRequest.aspx</id><title><![CDATA[使用HttpWebRequest发送HTTP请求，同时支持GET/POST方式提交。]]></title><link href="http://udnz.com/Article/Get_Html_By_HttpWebRequest.aspx" /><updated>2010-03-23T16:31:20</updated><summary><![CDATA[使用HttpWebRequest发送HTTP请求，同时支持GET/POST方式提交。
理论上支持任何HTTP 1.1 协议谓词，不过就实际使用情况来说，仅对GET/POST方式进行了测试，其他谓词并未测试。]]></summary></entry><entry><id>http://udnz.com/Article/GetLength_In_CSharp.aspx</id><title><![CDATA[C#中如何获取一个字符串的实际字符数]]></title><link href="http://udnz.com/Article/GetLength_In_CSharp.aspx" /><updated>2010-03-19T14:54:25</updated><summary><![CDATA[在包含中文的字符串处理时，除了裁切固定长度的操作之外，有时也需要获取一个字符串的实际字符数，比如我们限制输入框字符数的时候。而C#提供的string.Length属性却无法满足我们的要求，于是我写了两个方法来获取这个长度，经过测试，GetLength 的执行效率几乎是 GetLength_Obsoleted 的 4 倍！]]></summary></entry><entry><id>http://udnz.com/Article/Is_That_Power_Of_Two.aspx</id><title><![CDATA[C# 中如何检查无符号长整形数是否为2的正整次方[终极版]]]></title><link href="http://udnz.com/Article/Is_That_Power_Of_Two.aspx" /><updated>2010-02-24T17:26:38</updated><summary><![CDATA[如何检查无符号长整形数是否为2的正整次方？
刚接触这个命题的时候，简单地想了想——很简单：
第一个方案：除2法。将它一直除以2，最后得到1则标识这个数是2的正整次方，得到一个小于1的小数则不是。
后来一想，这样的算法效率肯定不敢恭维，于是就有了第一个改进版：除2法的基础上进行奇偶判定。
但后来继续挖掘信息，又一次改进了方法：进行二进制位比较，效率得到了大幅的提高。]]></summary></entry><entry><id>http://udnz.com/Article/Marshal_PtrToStructure.aspx</id><title><![CDATA[[海康开发笔记]将内存片段格式化为C#类对象时需要注意对象的字段顺序]]></title><link href="http://udnz.com/Article/Marshal_PtrToStructure.aspx" /><updated>2010-02-23T15:09:16</updated><summary><![CDATA[将内存片段byte[] data 格式化为结构或类实例时，结构/类的属性或字段定义顺序将影响格式化结果。
各个字段的定义顺序必须和产生原数据包时所用的结构体中各字段的定义顺序一致，否则转化出来的类实例字段值将产生逻辑错误。]]></summary></entry><entry><id>http://udnz.com/Article/Winform_Maximized.aspx</id><title><![CDATA[C# WinForm 全屏]]></title><link href="http://udnz.com/Article/Winform_Maximized.aspx" /><updated>2010-01-25T13:24:40</updated><summary><![CDATA[1.最大化操作必须先 FormBorderStyle.None 后 FormWindowState.Maximized，否则将无法覆盖任务栏。 
2.如果已经 FormWindowState.Maximized，则需要先设为非 FormWindowState.Maximized 的状态， 否则后面的 FormWindowState.Maximized 将不起作用，违背了“1.”的内容。]]></summary></entry><entry><id>http://udnz.com/Article/IndexOf_Vs_Contains.aspx</id><title><![CDATA[C#中查询字符串中是否包含指定字符/串，使用IndexOf还是Contains?]]></title><link href="http://udnz.com/Article/IndexOf_Vs_Contains.aspx" /><updated>2010-01-15T15:43:25</updated><summary><![CDATA[C#中查询字符串中是否包含指定字符/串，我以前一直都使用的是IndexOf来判断的。
但今天做的这次试验，给了我一个无情的打击，原来一直以来使用的方法都是不好的啊，用Contains的执行效率比IndexOf效率高多了。]]></summary></entry><entry><id>http://udnz.com/Article/functions_in_axd_are_undefinded.aspx</id><title><![CDATA[[.axd]&ldquo;WebForm_PostBackOptions未定义&rdquo;及其他相关问题的相关解决方法]]></title><link href="http://udnz.com/Article/functions_in_axd_are_undefinded.aspx" /><updated>2009-11-18T15:22:53</updated><summary><![CDATA[一个.NET的web项目，本来运行得非常好的，突然之间报了个WebForm_PostBackOptions未定义这么个js错误，然后导致了页面无法PostBack，很严重，很生气。

顺藤摸瓜，毕竟"WebForm_PostBackOptions"这个东西并不是我自己定义的，看样子，有点像微软的东西，于是便摸到了源代码。最后分析得出，问题是出在时间上。而代码是微软的，没道理就这么随随便便错了。于是检查了一下服务器时间，靠，2008年？整整迟了一年？OK，将服务器时间调整过来，仅这一下，页面居然就一切正常了！

根据现象猜想，这段代码应该有一个缓存的机制。在一定时间之内多次访问这个页面时，这段JS会直接使用服务器缓存。于是，当原本的缓存过期，服务器时间却又调到了很久以前，那么“愚蠢”的事情就发生了——调用时根据服务器时间判断，可以调用缓存，而缓存里却已经没有了这段JS的对象。于是乎，后面报的“WebForm_PostBackOptions未定义”这个错误就自然而然了。

总之， 这个问题的根本原因是.axd没有被正确执行。]]></summary></entry><entry><id>http://udnz.com/Article/FileManage_By_API_SHFileOperation_In_Csharp.aspx</id><title><![CDATA[C#中使用API(SHFileOperation)进行文件操作，特别说明了回收站相关参数]]></title><link href="http://udnz.com/Article/FileManage_By_API_SHFileOperation_In_Csharp.aspx" /><updated>2009-07-21T11:45:23</updated><summary><![CDATA[项目中使用了磁盘阵列柜，每秒有上百兆的数据存入磁盘，这就有了从磁盘删除文件的需求。为了满足这一需求，我做了一个用于删除过期数据的系统服务。

说来这个东西本身是很简单的，但是由于数据量的巨大价值磁盘阵列空间容量的巨大（8T，1T=1024G），在实际操作中也遇到了不少麻烦。需求很简单，遍历磁盘指定目录下的所有目录和文件，根据一个比较规则判定文件是否过期，如果过期就删除。最初的设计也很简单，三个步骤：遍历 -> 过期检测 -> 删除。有了需求和程序框架设计，于是开始实施。

在C#中，DirectoryInfo和FileInfo为我们提供了足够的方法，在程序第一次成型的时候我主要使用了下面的方法：
遍历：DirectoryInfo.GetDirectories()，DirectoryInfo.GetFiles()
删除：DirectoryInfo.Delete()，FileInfo.Delete()

本机使用时效果很好，但实际上服务器运行就出现了问题：磁盘过大，文件过多，导致执行效率极其缓慢，甚至无法遍历出文件夹和文件，删除一个文件就需要好几分钟。当然，这和磁盘I/O有关，需要在有限的I/O下提高效率。为了提高效率，改用API的方式。使用SHFileOperation来进行文件、文件夹的删除操作。代码见下：]]></summary></entry><entry><id>http://udnz.com/Article/CutStr.aspx</id><title><![CDATA[在C#中截取指定长度的中文字符串（效率提高2500倍）]]></title><link href="http://udnz.com/Article/CutStr.aspx" /><updated>2009-07-08T18:03:00</updated><summary><![CDATA[C#中字符串截断本没有那么麻烦，问题就出在string.Substring()这个方法将中文也按一个字符计算，导致我们在实际应用中截取字符串（中英文组合）后的“长度”不一致。

国际惯例，在网上搜索了一下，大致得到了两中截断算法：
1. 从起始位置取得字符 -> 逐一用正则表达式匹配 -> 拼接成最终字符串。（这是广为流传的方法，也是效率最低的方法。）
2. 从起始位置取得字符 -> 逐一用ASCII比较 -> 再拼接成最终字符串。

相比之下，算法2比算法1高明，毕竟ASCII比较比正则表达式的执行效率更高。但最终，我仍然没有使用算法2，而是进行了进一步的优化，代码见下：]]></summary></entry><entry><id>http://udnz.com/Article/ConvertIPAddressToNumber.aspx</id><title><![CDATA[C#中IP地址与数字之间的互转（网上流传的方法有Bug）]]></title><link href="http://udnz.com/Article/ConvertIPAddressToNumber.aspx" /><updated>2009-03-24T16:27:34</updated><summary><![CDATA[项目中有IP与Int32类型相互转换的需求，于是在网上搜索了相关代码，但发现网上的代码有Bug，加以修改发布如下。]]></summary></entry><entry><id>http://udnz.com/Article/BeNuts_160.aspx</id><title><![CDATA[样式表中同一ID标签的多次定义，谁的优先级高？]]></title><link href="http://udnz.com/Article/BeNuts_160.aspx" /><updated>2008-03-03T17:13:13</updated><summary><![CDATA[]]></summary></entry><entry><id>http://udnz.com/Article/BeNuts_159.aspx</id><title><![CDATA[SQL语句技巧及SQL/MYsql随机取前N条记录]]></title><link href="http://udnz.com/Article/BeNuts_159.aspx" /><updated>2008-03-03T17:13:12</updated><summary><![CDATA[SQL、MySQL数据库随机取前N条记录比Access数据库要方便得多了，分别只需要一句SQL语句就可以：

MySql:
select * from tablename order by rand() limit 10  

MsSql:
select top 10 * from tablename order by NEWID() 

另外，多使用“Top N”可以提高程序的执行效率，特别是记录特别多的时候，如

select top 1 * from users where id=123 
如此一来，查到一个后就不再继续搜索了（事实上也只有一个）。
]]></summary></entry><entry><id>http://udnz.com/Article/BeNuts_164.aspx</id><title><![CDATA[Vista/Win7操作系统(64位)+IIS7设置常见问题]]></title><link href="http://udnz.com/Article/BeNuts_164.aspx" /><updated>2008-01-06T17:13:16</updated><summary><![CDATA[注：以下内容同样适用于 Windows 7 系统。

自从装了Vista（64位），问题就一个一个来。现在就连IIS(7.0.0.0)里运行一个简单的ASP程序都出问题了。在开始正文之前，我想纠正一些错误认识：

Vista + IIS7支持Asp+Access无需更改应用程序池。 
以我自己的实践证明，使用默认的DefaultAppPool即可，你甚至可以停用Classic.NET AppPool。 
Windows Vista Enterprice版本同样含有IIS，当然也可以安装IIS。 
Windows Vista Enterprice：这个版本在Windows Vista Business的基础上增加支持MUI（多语言包），BitLocker和UNIX应用程序支持。这个版本并不准备零售，仅OEM提供给用户。我正使用的系统即是Windows Vista Enterprice，其功能是大于Windows Vista Business的。 

Q1:我的系统里面没有IIS？ 
A:系统默认是没有安装IIS的，需要你手动安装。

Q2:我访问添加的网站，返回了“An error occurred on the server when processing the URL. Please contact the system administrator”错误？ 
A:这个是因为你的程序某处有错误而产生的。并且IIS没有返回具体产生错误的原因。 

Q3:我又有了新的问题：“不允许的父路径” 
A:（见Q2）

Q4:“未指定提供程序，也没有]]></summary></entry><entry><id>http://udnz.com/Article/BlogContent_180.aspx</id><title><![CDATA[datediff函数？日期表达式？一个疏忽引发的思考]]></title><link href="http://udnz.com/Article/BlogContent_180.aspx" /><updated>2007-05-09T21:59:31</updated><summary><![CDATA[datediff("d","2007-5-9","2007-5-8") 

这一句是正确的，返回了“-1”。但是因为一时疏忽，写成了：

datediff("d",2007-5-9,2007-5-8) 返回了“1”。

后来一想不对，于是查了查VBScript 语言参考的datediff条目：

DateDiff(interval, date1, date2 [,firstdayofweek[, firstweekofyear]]) 其中说到，date1和date2都是“日期表达式”，并且对于“日期表达式”有如下说明：

任何可以被解释为日期的表达式。包括任何日期文字、看起来象日期的数字及字符串和由函数返回的日期的组合。日期表达式为数字或字符串的任意组合，表示从公元 100 年 1 月 1 日到公元 9999 年 12 月 31 日的日期。   日期以实数形式保存。小数点左边的数值代表日期；小数点右边的数值代表时间。负数表示公元 1899 年 12 月 30 日以前的日期。 

另又有：

日期文字   由数字符号 (#) 包围的任何有效格式的字符序列。有效格式包括区域设置指定的日期格式或通用日期格式。例如，应用程序的区域设置为英语（美国）时，#12/31/99# 表示公元 1999 年 12 月 31 日。  

那么datediff("d",2007-5-9,2007-5-8)中，此时的“2007-5-8”是日期表达式吗？]]></summary></entry><entry><id>http://udnz.com/Article/BlogContent_174.aspx</id><title><![CDATA[使用!DOCTYPE致使CSS区分大小写]]></title><link href="http://udnz.com/Article/BlogContent_174.aspx" /><updated>2007-03-15T18:37:05</updated><summary><![CDATA[今天才发现，原来不论是Strict严格声明还是Transitional过渡型声明，CSS样式在!DOCTYPE的作用下，都是区分大小写的。只有不声明网页的DOCTYPE，CSS才不区分大小写。]]></summary></entry><entry><id>http://udnz.com/Article/BlogContent_136.aspx</id><title><![CDATA[这些IP已经记录在案]]></title><link href="http://udnz.com/Article/BlogContent_136.aspx" /><updated>2006-11-22T11:11:06</updated><summary><![CDATA[前段时间我的Blog上总会出现这样那样的垃圾评论留言，加了验证码仍然无效后一气之下做了个小程序用于禁止外部表单的提交，并在Blog后台自动屏蔽相应IP，这些日子看来已经安分了，没有再见到那些垃圾评论了。

通过程序记录，下面的IP已经记录在案，这些可能会用到我以后的程序之中。]]></summary></entry><entry><id>http://udnz.com/Article/BlogContent_133.aspx</id><title><![CDATA[网页中打开TXT文本除了用FSO还能用什么？]]></title><link href="http://udnz.com/Article/BlogContent_133.aspx" /><updated>2006-11-10T10:19:47</updated><summary><![CDATA[一般来说，ASP程序操作TXT我们都使用FSO来执行，但是除了FSO之外，使用OpenDataSource也非常不错。]]></summary></entry><entry><id>http://udnz.com/Article/BlogContent_101.aspx</id><title><![CDATA[自动将ASP文件生成htm文件－HtmFileCreator-asp2htm]]></title><link href="http://udnz.com/Article/BlogContent_101.aspx" /><updated>2006-06-16T19:34:05</updated><summary><![CDATA[“建立一个存储模版的数据表，使用模版生成htm网页。”
嗯，我没有这么做，因为做这个程序时我没有足够的时间来这么做。即使这样做了以后也无法实现更多的更新（版式更新，这是要求的）。

于是下面的程序诞生了

'程序名称：htmFileCreator    

'程序功能：执行asp文件生成同名的htm文件    
'程序包含文件：asp2htm.asp    
'程序适用环境：需要将asp页面转化为htm页面以达到快速浏览的目的，  
'               且更新极少的页面（更新需要手动执行一次asp文件）。    
'                （回想起来这个程序其实根本一点用都没有，只是因为公司  
'               的特殊情况需要使用，既然做出来了，就记录下来吧。）    
'使用方法：比如要将index.asp生成index.htm（这里index.asp我们称做目标asp）    
'　　　　　          
'               引用本页，请自行修改路径    
'               call asp2htm_makeHtmFile                               
'               调用asp2htm_makeHtmFile过程  ]]></summary></entry><entry><id>http://udnz.com/Article/BlogContent_100.aspx</id><title><![CDATA[TrackBack功能为恶意广告开辟了广阔空间]]></title><link href="http://udnz.com/Article/BlogContent_100.aspx" /><updated>2006-06-12T10:07:38</updated><summary><![CDATA[现在，通过程序提交表单向留言本系统提交重复的广告已经是屡见不鲜了，以同样的原理，Blog也惨遭毒手，广告发布的途径就是让人又爱又恨的TrackBack。

Blog的TrackBack功能为Blog之间的沟通交流架起了一座桥梁，使得各个Blog网站联系了起来，让大家更有积极性地参与各种讨论。可以说，TrackBack是Blog区别于一般文章、新闻发布系统的本质区别之一。可是，它却也为那些恶意广告开辟了新的空间。]]></summary></entry><entry><id>http://udnz.com/Article/BlogContent_98.aspx</id><title><![CDATA[[flash]死神计时游戏]]></title><link href="http://udnz.com/Article/BlogContent_98.aspx" /><updated>2006-06-01T16:06:18</updated><summary><![CDATA[因为工作需要，做了个拼图游戏。很久没有做flash了，这个破玩意儿还浪费了我不少时间。

游戏倒计时默认为5分钟，这个可以在flash插入网页时另外设置，如“game.swf?fen=10”即表示游戏时间设置为10分钟。
每次开始游戏，图片被打乱的状态都是一样的，没做随机打乱了。

下面是fla源文件：（晕，压缩了竟然也有26.3 MB这么大！）

http://www.ourome.com/netlife/Blog/uploadfiles/uonun/god_of_death.rar
]]></summary></entry><entry><id>http://udnz.com/Article/BlogContent_93.aspx</id><title><![CDATA[基于HTTP的QQ协议]]></title><link href="http://udnz.com/Article/BlogContent_93.aspx" /><updated>2006-05-16T08:46:31</updated><summary><![CDATA[在论坛上又看到了关于QQ的问题，想起前段时间在网上查了的这些资料，本来是要做一个在web上运行的QQ的，但还有些问题没有解决，先把资料记录在这里。]]></summary></entry><entry><id>http://udnz.com/Article/BlogContent_75.aspx</id><title><![CDATA[从多个Access数据库中“链接”数据记录]]></title><link href="http://udnz.com/Article/BlogContent_75.aspx" /><updated>2006-01-24T11:14:34</updated><summary><![CDATA[问题：
有两个表：一个company（招聘企业信息表）存在于company.mdb，一个job（企业招聘职位表）存在于job.mdb。
约束：在company表里的一家企业可能会在job表里有多个招聘职位，查询时要列出这家企业的公司名和这家企业的所有招聘职位，就如下所示；


临时虚拟网络有限公司
聘：文员/业务员/项目经理


解决：

下面的这种写法，适用于两表存在于同一个数据库中，而对于上面所说的不同数据库情况已不再适用。]]></summary></entry></feed>