<?xml version="1.0" encoding="utf-8"?><rss version="2.0">
<channel>
<title><![CDATA[我的1997]]></title>
<link>http://blog.pfan.cn/akey307</link>
<description>编程爱好者博客</description>
<language>zh-cn</language>
			<item>
		<title><![CDATA[如何查找&nbsp;SQL&nbsp;server&nbsp;instance]]></title>
		<link>http://blog.pfan.cn/akey307/52410.html</link>
		<description><![CDATA[打开SQL Server Configuration Manager 后，就可以看到
 
Server Type 是 SQL Server 的就是 Server instance. 
在该服务器上，有两个instance, MSSQLSERVER 和 TESTINSTANCE. 其中 MSSQLSERVER 是 default instance
 

如果想要暂停或启动该 instance, 可以右击，然后选择属性]]></description>
		<author><![CDATA[akey307]]></author>
		<pubDate>2011-04-12 19:42:00</pubDate>
		</item>
				<item>
		<title><![CDATA[log4net&nbsp;的一些常见问题]]></title>
		<link>http://blog.pfan.cn/akey307/52288.html</link>
		<description><![CDATA[Log4net 的配置文件应该放在哪里？
&nbsp;
·&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; App.config 或 web.config
&nbsp;
·&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 单独的一个xml 文件
&nbsp;
·&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 无配置文件，在程序代码中进行配置
&nbsp;
&nbsp;
&nbsp;
Log4net 的配置文件中是否一定需要 &lt;Logger&gt; tab?
&nbsp;
不需要，请看以下的例子：
&nbsp;
&lt;log4net&gt;
&nbsp;
&nbsp; &lt;!-- 輸出到Console --&gt;
&nbsp;
&nbsp; &lt;appender name="A1" type="log4net.Appender.ConsoleAppender"&gt;
&nbsp;
&nbsp;&nbsp;&nbsp; &lt;layout type="log4net.Layout.PatternLayout"&gt;
&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;conversionPattern value="%date %-5level %logger - %message%newline" /&gt;
&nbsp;
&nbsp;&nbsp;&nbsp; &lt;/layout&gt;
&nbsp;
&nbsp; &lt;/appender&gt;
&nbsp;
&nbsp; &lt;root&gt;
&nbsp;
&nbsp;&nbsp;&nbsp; &lt;!-- 輸出訊息等級 --&gt;
&nbsp;
&nbsp;&nbsp;&nbsp; &lt;level value="ALL" /&gt;
&nbsp;
&nbsp;&nbsp;&nbsp; &lt;appender-ref ref="A1" /&gt;&nbsp;&nbsp;&nbsp; 
&nbsp; &lt;/root&gt;]]></description>
		<author><![CDATA[akey307]]></author>
		<pubDate>2011-03-08 21:53:00</pubDate>
		</item>
				<item>
		<title><![CDATA[如何把共享程序集添加到引用]]></title>
		<link>http://blog.pfan.cn/akey307/52284.html</link>
		<description><![CDATA[1.&nbsp;&nbsp;&nbsp; 如何创建强名程序集
&nbsp;
&nbsp;
&nbsp;
可以用VS来产生公钥密钥对文件, Project Properties à Signing
&nbsp;
&nbsp;
&nbsp;
2.&nbsp;&nbsp;&nbsp; 如何查看public key token
&nbsp;
&nbsp;
&nbsp;
可以用命令&nbsp;&nbsp;&nbsp; sn –T [assembly]
&nbsp;
&nbsp;
&nbsp;
3.&nbsp;&nbsp;&nbsp; 安装共享程序集
&nbsp;
&nbsp;
&nbsp;
只有强名程序集才可以安装到Gac中。可以用命令 
&nbsp;&nbsp; 
gacutil /i [assembly]
&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
4.&nbsp;&nbsp;&nbsp; 卸载共享程序集
&nbsp;
&nbsp;
&nbsp;
可以在C:\Windows\assembly目录下，找到要卸载的程序集，右键单击，然后选择Uninstall.
&nbsp;
&nbsp;
&nbsp;
5.&nbsp;&nbsp;&nbsp; 如何对共享程序集在VS中添加引用
&nbsp;
&nbsp;
&nbsp;
首先运行Start &gt; Run &gt; "C:\windows\assembly\gac_msil".
&nbsp;
&nbsp;
&nbsp;
选择你要找的程序集的文件夹，然后进入该文件夹，再选择正确的版本的文件夹。
&nbsp;
&nbsp;
&nbsp;
找到你要的程序集后，可先将其临时拷贝到一个位置，再把这个拷贝程序集添加到引用中，然后便可以删除这个临时程序集拷贝，因为VS会自动在GAC中搜索该程序集。]]></description>
		<author><![CDATA[akey307]]></author>
		<pubDate>2011-03-07 23:31:00</pubDate>
		</item>
				<item>
		<title><![CDATA[程序集与强命程序集]]></title>
		<link>http://blog.pfan.cn/akey307/52283.html</link>
		<description><![CDATA[作者： 王雪鹏 
来源：aspcool
&nbsp;
&nbsp;
&nbsp;
1.&nbsp;&nbsp; 程序集（Assembly）的概念： 
&nbsp;&nbsp; 
首先：程序集是一个或多个托管模块，以及一些资源文件的逻辑组合。因为它是一个逻辑上的组合，所以程序集的逻辑表示和物理表示可以相互分离。如何将代码和资源划分到不同的文件中完全取决于我们。程序集允许我们将文件的部署分解开来，同时又将所有的文件看作一个单独的集合。 

其次：因为CLR是直接和程序集打交道的，所以程序集也是组件复用，以及实施安全策略和版本策略的最小单元（安全策略，版本信息等都只能是加在程序集上）。
&nbsp;
&nbsp;
&nbsp;
注意：程序集是一个逻辑组合，它可以包含很多个文件。大多数程序集（比如使用Visual Studio创建的那些）一般都是单文件程序集，也就是只有一个.exe或者.dll文件（目前.NET的程序集只有这两种格式）。在这种情况下，程序集清单（manifest）直接嵌入到单文件程序集中。
&nbsp;
&nbsp;
&nbsp;
2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 强命名程序集（Strong Name Assembly）的概念 
&nbsp;
因为不同的公司可能会开发出有相同名字的程序集来，如果这些程序集都被复制到同一 个相同的目录下，最后一个安装的程序集将会代替前面的程序集。这就是著名的Windows “DLL Hell”出现的原因。 
&nbsp;&nbsp; 
很明显，简单的用文件名来区分程序集是不够的，CLR需要支持某种机制来唯一的标识一个程序集。这就是所谓的强命名程序集。 
&nbsp;&nbsp; 
一个强命名程序集包含四个唯一标志程序集的特性：文件名（没有扩展名），版本号，语言文化信息（如果有的话），公有秘钥。 
&nbsp;&nbsp; 
这些信息存储在程序集的清单（manifest）中。清单包含了程序集的元数据，并嵌入在程序集的某个文件中。 
&nbsp;&nbsp; 
下面的字符串标识了四个不同的程序集文件： 
&nbsp;&nbsp; 
&nbsp;&nbsp; “MyType, Version=1.0.1.0, 
&nbsp;&nb]]></description>
		<author><![CDATA[akey307]]></author>
		<pubDate>2011-03-07 23:30:00</pubDate>
		</item>
				<item>
		<title><![CDATA[浅谈公共语言运行库]]></title>
		<link>http://blog.pfan.cn/akey307/52282.html</link>
		<description><![CDATA[C#的源代码首先要被编译为Microsoft的中间语言(IL)的代码。这些中间代码也被称为托管代码。它们不是文本代码，而是类似Java源程序被编译后的字节代码。然后使用公共语言运行库(CLR)作为执行环境来执行这些托管代码。这样做的好处有：
&nbsp;
(1)&nbsp;&nbsp;&nbsp; 平台无关
&nbsp;
&nbsp;
&nbsp;
只要安装了.Net Framework的平台就可以用CLR来执行中间代码。换句话说，相同的源代码在不同的平台上编译得到的中间代码都是一样的，而不同的平台需要不同的CLR来执行中间代码。当然这个不是绝对的平台无关，不是说就可以把C#的程序拿到Linux中编译运行了。目前主要还是在Windows平台上运行托管代码。也有一些工程致力于把.Net Framework应用到Linux平台中。
&nbsp;
&nbsp;
&nbsp;
(2)&nbsp;&nbsp;&nbsp; 提高性能
&nbsp;
&nbsp;
&nbsp;
托管代码要经过再次编译才能变成机器的本地代码，看起来.Net的程序性能比起直接编译为本地代码的程序运行效率要低，可是实际上，Microsoft采用了一些手段来提高.Net程序的性能。
&nbsp;
·&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 即时编译(JIT编译)，也就是运行托管代码时，只编译用到的那部分代码，而不是先把这个托管代码编译好，然后再运行。
&nbsp;
·&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 编译器接合处理器进行编译。以往直接编译为本地代码的编译器，比如Visual Studio 6中的编译器，不会考虑处理器的不同特性。它不知道你使用的是奔腾3还是奔腾4的处理器，而CLR把处理器的特性考虑了进去。也就是说，编译器会对处理器的特定性能进行代码的优化。]]></description>
		<author><![CDATA[akey307]]></author>
		<pubDate>2011-03-07 23:29:00</pubDate>
		</item>
				<item>
		<title><![CDATA[Using&nbsp;log4net]]></title>
		<link>http://blog.pfan.cn/akey307/52281.html</link>
		<description><![CDATA[http://ondotnet.com/pub/a/dotnet/2003/06/16/log4net.html?page=3]]></description>
		<author><![CDATA[akey307]]></author>
		<pubDate>2011-03-07 23:27:00</pubDate>
		</item>
				<item>
		<title><![CDATA[How&nbsp;to&nbsp;Find&nbsp;CRM&nbsp;Version&nbsp;and&nbsp;Orgnization]]></title>
		<link>http://blog.pfan.cn/akey307/52233.html</link>
		<description><![CDATA[http://mscrmonline.wordpress.com/2009/12/25/how-to-find-microsoft-crm-version-and-organization-info/

Here is how to find what version of the Microsoft CRM 4.0 including the Update Rollup applied and Organization Info you are running:
&nbsp;
CRM Web Client &gt;&gt; Help &gt;&gt; About Microsoft Dynamics CRM
&nbsp;
&nbsp;
&nbsp;

&nbsp;
&nbsp;
In the above example, the version is 4.0.7333.1644 and the organization name is “MicrosoftCRM” (Note: this is the Organization’s Friendly Name – the Unique Could be different).
&nbsp;
You may wonder what are the numbers after the 4… – they indicate the Update Rollup applied.
&nbsp;
Here is a list of v4.0 version numbers and their corresponding Update Rollups: 
&nbsp;
4.0.7333.3 – Base Installation, No Update Rollup
4.0.7333.1113 – Update Rollup 1
4.0.7333.1316 – Update Rollup 2
4.0.7333.1408 – Update Rollup 3
4.0.7333.1551 – Update Rollup 4
4.0.7333.1644 – Update Rollup 5
4.0.7333.1750 – Update Rollup 6
4.0.7333.2138 – Upda]]></description>
		<author><![CDATA[akey307]]></author>
		<pubDate>2011-02-17 21:25:00</pubDate>
		</item>
				<item>
		<title><![CDATA[MSDN、OEM、OPK、RTM&nbsp;版本差異]]></title>
		<link>http://blog.pfan.cn/akey307/52227.html</link>
		<description><![CDATA[http://www.wretch.cc/blog/upeqmas/3711247

(一)MSDN (Microsoft Developer Network)版
MSDN軟件是微軟公司面向軟件開發者的一種版本。MSDN 涵蓋了所有可以被開發擴充的平台和應用程序，如微軟公司的百科全書 Encarta，或者是各種遊戲，是不包括在 MSDN 之內的，因為這些產品直接面向最終用戶，沒有進行程序開發的必要。
&nbsp;
(二)OEM(Original Equipment Manufacturer)版
OEM軟件只能隨機器出貨，不能零售，所以也叫做隨機版。OEM軟件只能全新安裝，不能從舊有操作系統升級。如果買筆記型計算機或品牌計算機就會有隨機版軟件。包裝不像零售版精美，通常只有一片cd和說明書(授權書)。這種系統通常會少一些驅動，而且目前的OEM軟件很少放在光盤裡能給你安裝，要麼就是恢復盤，要麼就是硬盤鏡像。
&nbsp;
(三)OPK(OEM PreInstallaion Kit)版
Windows OPK 光碟只提供給 OEM 廠商，除了包含 Windows PE，Windows OPK 光碟能開機進入前述的 Windows PE 基本預設環境。獲得微軟授權使用 Windows PE 的非 OEM 廠商會收到 Windows PE 光碟，這片光碟包含 Windows PE 建置工具。Windows OPK 光碟亦包含相同的 Windows PE 建置工具。企業用戶與 OEM 廠商雖然都可以利用 Windows PE 技術來部署 Windows，但實際的需求也有相當程度的差異，因此微軟在 Windows Vista 除了為 OEM 廠商提供 OPK 光碟，也為企業部署 Windows Vista 推出了 WAKI 工具；OPK 或 WAIK 的許多技術和工具都相同，而 Windows PE 也是兩者共同的技術之一。相較於提供給一般企業並 可公開下載的 WAIK (英文) 以及提供給 OEM 廠商的 OPK，Windows PE 光碟僅提供給與微軟簽訂 Software Assurance（軟體保證）、Enterprise Agreements 或 Campus Agreements（校園合約）等大量授權的客戶。
&nbsp;
(四)RTM(Relea]]></description>
		<author><![CDATA[akey307]]></author>
		<pubDate>2011-02-16 17:21:00</pubDate>
		</item>
				<item>
		<title><![CDATA[C#&nbsp;正则表达式]]></title>
		<link>http://blog.pfan.cn/akey307/51827.html</link>
		<description><![CDATA[http://www.wangqi.com/html/2006-12/9250.htm
&nbsp;




字符语法


语法解释


语法例子




\d


匹配数字（0~9）


‘\d’匹配8,不匹配12；




\D


匹配非数字


‘\D’匹配c,不匹配3；




\w


匹配任意单字符


‘\w\w’ 匹配A3,不匹配@3；




\W


匹配非单字符


‘\W’匹配@,不匹配c；




\s


匹配空白字符


‘\d\s\d’匹配3 d,不匹配abc；




\S


匹配非空字符


‘\S\S\S’匹配A#4,不匹配3 d；




.


匹配任意字符


‘....’匹配A$ 5,不匹配换行；




[…]


匹配括号中任意字符


[b-d]匹配b、c、d, 不匹配e；




[^…]


匹配非括号字符


[^b-z]匹配a,不匹配b-z的字符；




&nbsp;




重复语法


语法解释


语法例子




{n}


匹配n次字符


\d{3}匹配\d\d\d,不匹配\d\d或\d\d\d\d




{n,}


匹配n次和n次以上


\w{2}匹配\w\w和\w\w\w以上,不匹配\w




{n,m}


匹配n次上m次下


\s{1,3}匹配\s,\s\s,\s\s\s,不匹配\s\s\s\s




?


匹配0或1次


5?匹配5或0，不匹配非5和0




+


匹配一次或多次


\S+匹配一个以上\S，不匹配非一个以上\S




*


匹配0次以上


\W*匹配0以上\W，不匹配非N*\W




&nbsp;




重复语法


语法解释


语法例子




^


定位后面模式开始位置


&nbsp;]]></description>
		<author><![CDATA[akey307]]></author>
		<pubDate>2010-09-28 05:57:00</pubDate>
		</item>
				<item>
		<title><![CDATA[C#的一些运算符]]></title>
		<link>http://blog.pfan.cn/akey307/51826.html</link>
		<description><![CDATA[参见《C#高级编程》第四版
is 运算符
is 运算符可以检查对象是否与特定的类型兼容。”兼容”表示对象是该类型，或者派生于该类型。例如，要检查变量是否与object类型兼容:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int i = 10;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (i is object)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine("i is an object");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
int和从object继承而来的其他C#数据类型一样，表达式i is object将得到true,并显示信息。
&nbsp;
as运算符
as运算符用于执行引用类型的显式类型转换。如果要转换的类型与指定的类型兼容，转换就会成功进行；如果类型不兼容，as运算符就会返回值null。如下面的代码所示，如果object引用不指向string实例，把object引用转换为string就会返回null:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; object o1 = "Some String";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; object o2 = 5;
&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string s1 = o1 as string; // s1 = "Some String"
&nbsp;]]></description>
		<author><![CDATA[akey307]]></author>
		<pubDate>2010-09-28 05:54:00</pubDate>
		</item>
				<item>
		<title><![CDATA[动态创建控件时，Page.Load事件之后也需要恢复ViewState]]></title>
		<link>http://blog.pfan.cn/akey307/51774.html</link>
		<description><![CDATA[我曾经发过一个帖子问这样的问题：
在下面的代码中，我想实现的是： 
(1) 第一次打开网页，TextBox中的文本为"Good Morning." 
(2) 单击Button，形成Postback，然后更改TextBox的文本为"Good Afternoon" 
可是不管怎样，TextBox的文本总是 "Good Morning.", 请各位帮我看看是什么原因。 
(我不想捕捉Button的Onclick事件) 

C# code 
&nbsp;
&nbsp;&nbsp;&nbsp; public partial class _Default : System.Web.UI.Page
&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; protected void Page_Load(object sender, EventArgs e)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Button button1 = new Button();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; button1.Text = "Click";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; button1.ID = "button1";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TextBox textBox1 = new TextBox();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; te]]></description>
		<author><![CDATA[akey307]]></author>
		<pubDate>2010-09-15 21:52:00</pubDate>
		</item>
				<item>
		<title><![CDATA[C#&nbsp;生成随机数]]></title>
		<link>http://blog.pfan.cn/akey307/51770.html</link>
		<description><![CDATA[使用随机数只需要两步：
(1)&nbsp;&nbsp;&nbsp; 创建随机种子，默认方式是以当前时间作为种子；Random r = new Random()
(2)&nbsp;&nbsp;&nbsp; 取随机数；int i = r.Next(0, 3) //注意这里是取 [0, 3)的整数，但是取不到3
&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Random ranobj = new Random();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; foreach (SangoWujiang w in wujiangs)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int i = (int)w.Force - 1 + ranobj.Next(0, 3);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (i &lt; 0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; w.Force = 0;
&nbs]]></description>
		<author><![CDATA[akey307]]></author>
		<pubDate>2010-09-14 15:47:00</pubDate>
		</item>
				<item>
		<title><![CDATA[实现IFormattable接口的例子]]></title>
		<link>http://blog.pfan.cn/akey307/51753.html</link>
		<description><![CDATA[参见C#高级编程(第4版)第8章 字符串和正则表达式
&nbsp;
&nbsp;
&nbsp;&nbsp;&nbsp; class Program
&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; static void Main(string[] args)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Vector v1 = new Vector(1, 32, 5);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Vector v2 = new Vector(845.4, 54.3, -7.8);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine("\nIn IJK format, \nv1 is {0,30:IJK}\nv2 is {1,30:IJK}", v1, v2);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine("\nIn default format, \nv1 is {0,30}\nv2 is {1,30}", v1, v2);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine("\nIn VE format, \nv1 is {0,30:VE}\nv2 is {1,30:VE}", v1, v2);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp; }
&nbsp;
&nbsp;&nbsp;&nbsp; class Vector : IForma]]></description>
		<author><![CDATA[akey307]]></author>
		<pubDate>2010-09-08 20:26:00</pubDate>
		</item>
				<item>
		<title><![CDATA[什么是装箱和拆箱]]></title>
		<link>http://blog.pfan.cn/akey307/51752.html</link>
		<description><![CDATA[转自 http://blog.csdn.net/yuyu622/archive/2007/09/07/1776604.aspx
装箱（boxing）和拆箱（unboxing）是.NET提出得新概念！

.NET的所有类型都是由基类System.Object继承过来的，包括最常用的基础类型：int, byte, short，bool等等，就是说所有的事物都是对象。如果申明这些类型得时候都在堆(HEAP)中分配内存，会造成极低的效率！

.NET如何解决这个问题得了？正是通过将类型分成值型(value)和引用型(referencetype)，C#中定义的值类型包括原类型（Sbyte、Byte、Short、Ushort、Int、Uint、Long、Ulong、Char、Float、Double、Bool、Decimal）、枚举(enum)、结构(struct)，引用类型包括：类、数组、接口、委托、字符串等。

值型就是在栈中分配内存，在申明的同时就初始化，以确保数据不为NULL；
引用型是在堆中分配内存，初始化为null，引用型是需要GARBAGE COLLECTION来回收内存的，值型不用，超出了作用范围，系统就会自动释放！

下面就来说装箱和拆箱的定义！
装箱就是隐式的将一个值型转换为引用型对象。比如：
int i=0;
Syste.Object obj=i;
这个过程就是装箱！就是将i装箱！
拆箱就是将一个引用型对象转换成任意值型！比如：
int i=0;
System.Object obj=i;
int j=(int)obj;
这个过程前2句是将i装箱，后一句是将obj拆箱！
再写个代码，看看进行了几次装拆箱！
int i=0;
System.Object obj=i;
Console.WriteLine(i+","+(int)obj);
其中共发生了3次装箱和一次拆箱！^_^，看出来了吧？！
第一次是将i装箱，第2次是输出的时候将i转换成string类型，而string类型为引用类型，即又是装箱，第三次装箱就是(int)obj的转换成string类型，装箱！拆箱就是(int)obj，将obj拆箱！！
再举一个例子,
public enum TimeOfDay
{
&nbsp;&nbsp;&nbsp; Mo]]></description>
		<author><![CDATA[akey307]]></author>
		<pubDate>2010-09-08 20:25:00</pubDate>
		</item>
				<item>
		<title><![CDATA[ODBC浅谈]]></title>
		<link>http://blog.pfan.cn/akey307/50809.html</link>
		<description><![CDATA[&nbsp;
《SQL Server 2005数据库基础及应用技术教程与实训》周奇
ODBC(Open Database Connectivity)是一种数据库访问标准，通过一组标准的函数调用(API)来实现数据库访问。ODBC API是独立于数据库的，表面上它是由一组函数调用组成，但是ODBC的核心是SQL语句。ODBC函数的主要功能是将SQL语句发送到目标数据库中，然后处理这些SQL语句产生的结果。
&nbsp;
1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ODBC组件
ODBC使用的分层体系结构包括ODBC应用程序、驱动程序管理器、ODBC驱动程序和数据源。

&nbsp;

&nbsp;
(1) ODBC应用程序：该程序与ODBC驱动程序管理器(ODBC32.DLL)进行动态或静态地连接，且调用由驱动程序管理器提供的ODBC API函数。
&nbsp;
(2) ODBC驱动程序管理器：因为ODBC应用程序不能够直接调用ODBC驱动程序，只可以调用在ODBC驱动程序管理器中的函数，而ODBC驱动程序管理器可以调用相应的ODBC驱动程序。这样就保证ODBC函数无论是连接到SQL Server数据库，还是连接到其他某个数据库平台，总是按照同一种方式进行调用。驱动程序管理器负责把相应的ODBC驱动程序加载到内存中，并将随后的请求送给正确的ODBC驱动程序。
&nbsp;
(3) ODBC驱动程序：ODBC驱动程序负责把SQL请求送到关系数据库管理系统(RDBMS)中，且把发送结果返回给ODBC驱动程序管理器，然后由驱动程序管理器把这些请求传送给客户端应用程序。每一种兼容ODBC的数据库都有其各自的ODBC驱动程序，且该驱动程序只能与该数据库本身进行通信，不能用它访问其他的数据库。譬如，SQL Server ODBC驱动程序只能访问SQL Server数据库，不能用来访问Oracle数据库，而Oracle ODBC驱动程序只能访问Oracle数据库，不能用来访问SQL Server数据库。
&nbsp;
(4)数据源：数据源就是要访问的数据库。
&nbsp;
2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 配置ODBC数据源
在使用ODBC之前，必须安装一个ODBC驱]]></description>
		<author><![CDATA[akey307]]></author>
		<pubDate>2010-03-22 04:52:00</pubDate>
		</item>
				<item>
		<title><![CDATA[SQL中的Exists与In]]></title>
		<link>http://blog.pfan.cn/akey307/50776.html</link>
		<description><![CDATA[http://hi.baidu.com/delphi_relive/blog/item/d7c0034a49c4932208f7ef21.html
&nbsp;
select * from 表A where exists(select * from 表B where 表B.id=表A.id) 这句相当于 select * from 表A where id in (select id from 表B) 
exits适合内小外大的查询，in适合内大外小的查询]]></description>
		<author><![CDATA[akey307]]></author>
		<pubDate>2010-03-15 00:15:00</pubDate>
		</item>
				<item>
		<title><![CDATA[SQL&nbsp;Server&nbsp;2005的版本]]></title>
		<link>http://blog.pfan.cn/akey307/50773.html</link>
		<description><![CDATA[《SQL Sever 2005 数据库基础及应用技术教程与实训 》&nbsp; 周奇
SQL Server 2005的版本：
1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQL Server 2005 Enterprise Edition 企业版(32位和64位)
适用于超大型企业。Enterprise Edition 是最全面的SQL Server版本，是超大型企业的理想选择，能够满足最复杂的要求。该版本还推出了一种适用于32位或64位平台的120天Evaluation Edition。
&nbsp;
2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQL Server 2005 Standard Edition标准版(32位和64位)
适合中小型企业。Standard Edition是需要全面的数据管理和分析平台的中小型企业的理想选择。
&nbsp;
3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQL Server 2005 Workgroup Edition工作组版(仅适用于32位)
适用于那些在大小和用户数量上没有限制的数据库的小型企业。Workgroup Edition可以做前端Web服务器，也可以用于部门或分支机构的运营，它包括SQL Server产品系列的核心数据库功能，并且可以轻松地升级至Standard Edition或Enterprise Edition。 Workgroup Edition是理想的入门级数据库，具有可靠、功能强大且易于管理的特点。
&nbsp;
4.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQL Server 2005 Developer Edition开发版(32位和64位)
Developer Edition使开发人员可以在SQL Server上生成任何类型的应用程序，它包括SQL Server 2005 Enterprise Edition的所有功能，但又许可限制，只能适用于开发和测试系统，而不能用作生产服务器。Developer Edition是独立软件供应商(ISV)、咨询人员、系统集成商、解决方案供应商以及创建和测试应用程序的企业开发人员的理想选择。Develop]]></description>
		<author><![CDATA[akey307]]></author>
		<pubDate>2010-03-14 05:14:00</pubDate>
		</item>
				<item>
		<title><![CDATA[使用sp_help来查看表的结构]]></title>
		<link>http://blog.pfan.cn/akey307/50772.html</link>
		<description><![CDATA[我们需要了解表的数据结构，比如某一列的数据类型的时候，可以使用表设计器来查看，但是有的时候表设计器没有办法使用，比如你想了解一个视图中的某一列的数据类型的时候。这时候，你就只能使用系统存储过程sp_help来查看表的结构了。
&nbsp;
语法格式： EXEC sp_help [table name]
&nbsp;
下图使用AdventureWorks的视图为例：
&nbsp;


需要注意一下syntax: exec sp_help&nbsp; '[Popr.ProblemDetail]']]></description>
		<author><![CDATA[akey307]]></author>
		<pubDate>2010-03-14 05:09:00</pubDate>
		</item>
				<item>
		<title><![CDATA[SQL&nbsp;2005&nbsp;创建约束]]></title>
		<link>http://blog.pfan.cn/akey307/50771.html</link>
		<description><![CDATA[参见《SQL Sever 2005 数据库基础及应用技术教程与实训》 周奇
&nbsp;
SQL Server中有五种约束类型，分别是CHECK约束、DEFAULT约束、PRIMARY KEY约束、FOREIGN KEY约束和UNIQUE约束。
&nbsp;
1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CHECK约束：
CHECK约束用于限制输入一列或多列的值的范围，通过逻辑表达式来判断数据的有效性。一个列的输入内容必须满足CHECK约束的条件，否则数据无法正常输入。
&nbsp;
下面我们要对以下的表添加CHECK约束，




Name

Sex


Adams

M


Berry

F


Hebe

f


Jack

M
&nbsp;

&nbsp;
以上的约束可以限制Sex列的取值只能为’M’或者’F’。如果你插入新行，或更改某一行不符合该约束，就会报错。
&nbsp;
2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DEFAULT约束
若在表中某列定义了DEFAULT约束，用户在插入新的数据行时，如果该列没有指定数据，那么系统将默认值赋给该列，当然该默认值也可以是空值(NULL)。
&nbsp;
创建DEFAULT约束需要在表设计器中，填写列属性的”默认值”.

&nbsp;
&nbsp;
3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PRIMARY KEY约束
在表中常有一列或多列的组合，其值能唯一标识表中的每一行。这样的一列或多列成为表的主键(Primary Key)。一个表只能有一个主键，而且主键约束中的列不能为空值。
&nbsp;


&nbsp;
4.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FOREIGN KEY约束
外键(Foreign Key)是用于建立和加强两个表(主表与从表)的一列或多列数据之间的连接的。创建约束的顺序是先定义主表的主键，再对从表定义外键约束。
&nbsp;
先对Country表设置主键，然后对Author表创建关系。&nbsp;

&nbsp;

&nbsp;

&]]></description>
		<author><![CDATA[akey307]]></author>
		<pubDate>2010-03-14 03:57:00</pubDate>
		</item>
				<item>
		<title><![CDATA[搭建虚拟机Windows&nbsp;2003&nbsp;+&nbsp;SQL&nbsp;Server&nbsp;2005]]></title>
		<link>http://blog.pfan.cn/akey307/50770.html</link>
		<description><![CDATA[如何使用VMware Workstatetion搭建虚拟机Windows Server 2003 + SQL Server 2005
&nbsp;
(1)&nbsp;&nbsp;&nbsp; 安装VMware Workstation;
(2)&nbsp;&nbsp;&nbsp; 安装好VMware Workstation之后，创建新的虚拟机(create a new virtual machine);
(3)&nbsp;&nbsp;&nbsp; 在出现”Install From”对话框时，选择你的Windows 2003的安装文件;
(4)&nbsp;&nbsp;&nbsp; 在安装好Windows 2003虚拟机之后，需要该打的补丁先打好。然后你需要安装.Net Framework 2.0和IIS; 注意安装IIS需要：控制面板à添加或删除程序à添加/删除Windows组件;
(5)&nbsp;&nbsp;&nbsp; 最后安装SQL Server 2005.]]></description>
		<author><![CDATA[akey307]]></author>
		<pubDate>2010-03-14 00:52:00</pubDate>
		</item>
		</channel>
</rss>