05 2011 档案
摘要:IEnumerable和IEnumerator有什么区别? 问题的提出:见(C#高级编程P127)public interface IEnumerable{ IEnumerator GetEnumerator();}public interface IEnumerator{ bool MoveNext(); void Reset(); Object Current { get; }}IEnumerable和IEnumerator有什么区别?这是一个很让人困惑的问题(在很多forum里都看到有人在问这个问题)。研究了半天,得到以下几点认识:1、一个Collection要支持foreach方式的.
阅读全文
摘要:C#的foreach 语句不会解析为IL 代码中的foreach 语句。C#编译器会把foreach 语句转换为IEnumerable 接口的方法和属性。下面是一个简单的foreach 语句,它迭代persons 数组中的所有元素,并逐个显示它们:foreach (Person p in persons){Console.WriteLine(p);}foreach 语句会解析为下面的代码段。首先,调用GetEnumerator()方法,获得数组的一个枚举。在while 循环中-- 只要MoveNext()返回true-- 用Current 属性访问数组中的元素:IEnumerator enum
阅读全文
摘要:有许多方法扩展类。如果有类的源代码,继承就是给对象添加功能的好方法。但如果没有源代码,该怎么办?此时可以使用扩展方法,它允许改变一个类,但不需要类的源代码。扩展方法是静态方法,是类的一部分,但实际上没有放在类的源代码中。假定上例中的Money类需要一个方法AddToAmount(decimal amountToAdd)。但是,由于某种原因,程序集最初的源代码不能直接修改。此时就可以创建一个静态类,把方法AddToAmount 添加为一个静态方法。代码如下:namespace Chapter3.Extensions{public static class MoneyExtension{publi
阅读全文
摘要:SQL join 用于根据两个或多个表中的列之间的关系,从这些表中查询数据。Join 和 Key有时为了得到完整的结果,我们需要从两个或更多的表中获取结果。我们就需要执行 join。数据库中的表可通过键将彼此联系起来。主键(Primary Key)是一个列,在这个列中的每一行的值都是唯一的。在表中,每个主键的值都是唯一的。这样做的目的是在不重复每个表中的所有数据的情况下,把表间的数据交叉捆绑在一起。请看 "Persons" 表:Id_P LastName FirstName Address City 1AdamsJohnOxford StreetLondon2BushGeo
阅读全文
摘要:LINQ Join & Group Join & Left Join 实现与区别LINQ 查询表达式join 关键字用法:我在这里先创建的实验用例:view sourceprint?01class Customer02{03public int CustomerId { get; set; }04public string Name { get; set; }05public int Age { get; set; }06}0708class Product09{10public int ProductId { get; set; }11public string Name {
阅读全文
摘要:外部映射文件 我们可以使用sqlmetal命令行工具来生成外部映射文件,使用方法如下:1、开始菜单 -》 VS2008 -》VS工具 -》VS2008命令行提示2、输入命令:D:\Program Files\Microsoft Visual Studio 9.0\VC>sqlmetal /conn:server=xxx;database=Northwind;uid=xxx;pwd=xxx /map:c:\northwind.map /code:c:\northwind.cs3、这样,我们就可以在C盘下得到一个xml映射文件和C#的实体类代码4、把.cs文件添加到项目中来(放到App_Co
阅读全文
摘要:论坛表结构 为了演示继承与关系,我们创建一个论坛数据库,在数据库中创建三个表:1、 论坛版块分类表 dbo.Categories:字段名字段类型可空备注CategoryIDintnot nullidentity/主键CategoryNamevarchar(50)not null2、 论坛版块表 dbo.Boards:字段名字段类型可空备注BoardIDintnot nullidentity/主键BoardNamevarchar(50)not nullBoardCategoryintnot null对应论坛版块分类表的CategoryID3、 论坛主题表 dbo.Topics:字段名字段类型可空
阅读全文
摘要:检测并发 首先使用下面的SQL语句查询数据库的产品表:select * from products where categoryid=1 查询结果如下图: 为了看起来清晰,我已经事先把所有分类为1产品的价格和库存修改为相同值了。然后执行下面的程序: var query = from p in ctx.Products where p.CategoryID == 1 select p; foreach (var p in query) p.UnitsInStock = Convert.ToInt16(p.UnitsInStock - 1); ctx.SubmitChanges(); // 在这里
阅读全文
摘要:延迟执行 IQueryable query = from c in ctx.Customers select c; 这样的查询句法不会导致语句立即执行,它仅仅是一个描述,对应一个SQL。仅仅在需要使用的时候才会执行语句,比如: IQueryable query = from c in ctx.Customers select c; foreach (Customer c in query) Response.Write(c.CustomerID); 如果你执行两次foreach操作,将会捕获到两次SQL语句的执行: IQueryable query = from c in ctx.Custom
阅读全文
摘要:普通存储过程 首先在查询分析器运行下面的代码来创建一个存储过程:create proc sp_singleresultsetasset nocount onselect * from customers 然后打开IDE的服务器资源管理器,之前我们从表中拖动表到dbml设计视图,这次我们从存储过程中找到刚才创建的存储过程,然后拖动到设计视图。在方法面板中可以看到已经创建了一个sp_singleresultset的方法,如下图: 然后打开Northwind.designer.cs,可以找到下面的代码: [Function(Name="dbo.sp_singleresultset"
阅读全文
摘要:select描述:查询顾客的公司名、地址信息查询句法:var 构建匿名类型1 = from c in ctx.Customers select new { 公司名 = c.CompanyName, 地址 = c.Address };对应SQL:SELECT [t0].[CompanyName], [t0].[Address]FROM [dbo].[Customers] AS [t0] 描述:查询职员的姓名和雇用年份查询句法:var 构建匿名类型2 = from emp in ctx.Employees select new { 姓名 = emp.LastName + emp.FirstName
阅读全文
摘要:示例数据库字段名字段类型允许空字段说明IDuniqueidentifier表主键字段UserNamevarchar(50)留言用户名PostTimedatetime留言时间Messagevarchar(400)√留言内容IsRepliedbit留言是否回复Replyvarchar(400)√留言管理员回复 在数据库中创建一个名为GuestBook的数据库,在里面创建一个tbGuestBook的表,结构如上表。生成实体类 右键点击网站项目,选择添加新项,然后选择“Linq to sql Classes”,命名为GuestBook。然后打开App_Code里面的GuestBook.dbml。设计视
阅读全文
摘要:正则表达式引擎 .NET Framework 中的正则表达式引擎由 Regex 类表示。 正则表达式引擎负责分析和编译正则表达式,并执行用于将正则表达式模式与输入字符串相匹配的操作。 此引擎是 .NET Framework 正则表达式对象模型中的主要组件。 可以通过以下两种方式之一使用正则表达式引擎: 通过调用 Regex 类的静态方法。 方法参数包含输入字符串和正则表达式模式。 正则表达式引擎会缓存静态方法调用中使用的正则表达式,这样一来,重复调用使用同一正则表达式的静态正则表达式方法将提供相对良好的性能。 通过实例化 Regex 对象,采用的方式是将一个正则表达式传递给类构造函数。 在此情
阅读全文
摘要:((\d{11})|^((\d{7,8})|(\d{4}|\d{3})-(\d{7,8})|(\d{4}|\d{3})-(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1})|(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1}))$)匹配格式:11位手机号码3-4位区号,7-8位直播号码,1-4位分机号如:12345678901、1234-12345678-1234"^\d+$" //非负整数(正整数 + 0) "^[0-9]*[1-9][0-9]*$" //正整数 "^((-\d+)|(0+))$"
阅读全文
摘要:DataContext与实体 DataContext类型(数据上下文)是System.Data.Linq命名空间下的重要类型,用于把查询句法翻译成SQL语句,以及把数据从数据库返回给调用方和把实体的修改写入数据库。 DataContext提供了以下一些使用的功能:l 以日志形式记录DataContext生成的SQLl 执行SQL(包括查询和更新语句)l 创建和删除数据库DataContext是实体和数据库之间的桥梁,那么首先我们需要定义映射到数据表的实体。定义实体类using System.Data.Linq.Mapping;[Table(Name = "Customers"
阅读全文
摘要:什么是Linq to sql Linq to sql(或者叫DLINQ)是LINQ(.NET语言集成查询)的一部分,全称基于关系数据的 .NET 语言集成查询,用于以对象形式管理关系数据,并提供了丰富的查询功能,它和Linq to xml、Linq to objects、Linq to dataset、Linq to entities等组成了强大的LINQ。 要学好LINQ查询语法,就不得不先理解C# 3.0的一些新特性,下面一一简单介绍。隐含类型局部变量var age = 26;var username = "zhuye";var userlist = new [] {&
阅读全文
摘要:-4-关键字和操作符位于return语句之后的代码是不会被执行的。在下面给出的第1个程序中,你将发现在C#中有一个WriteLine函数调用,但是在我们的IL代码中却看不到。这是因为编译器意识到任何return之后的语句都不会被执行,从而,也就不用将其转换到IL中了。a.csclass zzz{public static void Main(){return;System.Console.WriteLine("hi");}}a.il.assembly mukhi {}.class private auto ansi zzz extends System.Object{.me
阅读全文
摘要:-3-在IL中,标号(label)是一个末尾带有冒号(即:)的名称。它使我们能够从代码的一部分无条件地跳转到另一部分。我们经常在由反编译器生成的IL代码中看到这个标号。例如:IL_0000:ldstr "hi"IL_0005:call void [mscorlib]System.Console::WriteLine(class System.String)IL_000a:call void zzz::abc()IL_000f:ret 在冒号前面的词就是标号。在下面给出的程序中,我们在函数abc中创建一个名为a2的标号。指令br用于随时跳转到程序中的任何标号。a.il.ass
阅读全文
摘要:如果你真的想要理解C#代码,那么最好的方法就是通过理解由C#编译器生成的代码。本章和下面两章将关注于此,请相信我们。 因此,我们将用一个小的C#程序揭露并解释有编译器生成的IL代码。通过这样做,我们就可以“一箭双雕”了:首先,我们将能够揭开IL的神秘,其次我们将更直观地理解C#编程语言。 我们将首先向你展示一个.cs文件,并随后由C#编译器用IL编写一个程序。它的输出将和cs文件是相同的。输出将会显示IL代码。这会增强我们对C#和IL的理解。因此,不再啰嗦,让我们冒险尝试。a.csclasszzz{publicstaticvoidMain(){System.Console.WriteLine(
阅读全文
摘要:-1- 我们用C#、VB.NET语言编写的代码最终都会被编译成程序集或IL。因此用VB.NET编写的代码可以在C#中修改,随后在COBOL中使用。因此,理解IL是非常有必要的。 一旦熟悉了IL,理解.NET技术就不会有障碍了,因为所有的.NET语言都会编译为IL。IL是一门中性语言。IL是先发明的,随后才有了C#、VB.NET等语言。 我们将在一个短而精辟的程序中展示IL。我们还假设读者至少熟悉一门.NET语言。a.il.methodvoidvijay(){} 随后,我们用IL编写了一个非常短小的IL程序——它显然是不能工作的,并将它命名为a.il。那么我们怎么才能把它编译为一个可执行程序呢?
阅读全文
摘要:Attributes in C#介绍Attributes是一种新的描述信息,我们既可以使用attributes来定义设计期信息(例如帮助文件,文档的URL),还可以用attributes定义运行时信息(例如,使XML中的元素与类的成员字段关联起来)。我们也可以用attributes来创建一个“自描述”的组件。在这篇指南中我们将明白怎么创建属性并将其绑定至各种语言元素上,另外我们怎样在运行时环境下获取到attributes的一些信息。定义MSDN中做如下定义(ms-help://MS.MSDNQTR.2002APR.1033/csspec/html/vclrfcsharpspec_17_2.ht
阅读全文
摘要:C#中通过Type类可以访问任意数据类型信息。1.获取给定类型的Type引用有3种方式:a.使用typeof运算符,如Typet=typeof(int);b.使用GetType()方法,如inti;Typet=i.GetType();c.使用Type类的静态方法GetType(),如Typet=Type.GetType("System.Double");2.Type的属性:Name:数据类型名;FullName:数据类型的完全限定名,包括命名空间;Namespace:数据类型的命名空间;BaseType:直接基本类型;UnderlyingSystemType:映射类型;3.
阅读全文
摘要:什么是Assembly(程序集)?Assembly是一个包含来程序的名称,版本号,自我描述,文件关联关系和文件位置等信息的一个集合。在.net框架中通过Assembly类来支持,该类位于System.Reflection下,物理位置位于:mscorlib.dll。Assembly能干什么?我们可以通过Assembly的信息来获取程序的类,实例等编程需要用到的信息。一个简单的演示实例:1.建立一个Console工程名为:NamespaceRef2.写入如下代码: 1using System; 2using System.Collections.Generic; 3using System.Tex
阅读全文
摘要:XPath 使用路径表达式来选取 XML 文档中的节点或节点集。节点是通过沿着路径 (path) 或者步 (steps) 来选取的。XML 实例文档我们将在下面的例子中使用这个 XML 文档。<?xml version="1.0" encoding="ISO-8859-1"?><bookstore><book> <title lang="eng">Harry Potter</title> <price>29.99</price></book>
阅读全文
摘要:使用XPath,我们可以很方便的搜索XML文档中的任何部分,因此具有很好的数据检索分析功能,近期业界兴起的半结构化文档技术大多就是以XPath为基础的。 由于XPath技术是相当强的,而且是国际标准,跨平台的,因此大家有时间好好学习使用它。对于XPath的详细语法可访问网站 http://www.w3.org/TR/xpath ,若大家安装了MSDN2003版,也可参考 MSDN Library/XML Web Services/XML核心/SDK 文档/MSXML4.0 SDK/XPath Reference。这些电子文档全是英文,大家也可以购买一些专门讲述XML技术的中文书籍看看。XSLT
阅读全文
摘要:XML介绍 XML基础规范 XML全名是可扩展标记语言,是W3C国际标准组织规定的一种基于文本的数据存储格式,它是从IBM的SGML技术派生的,HTML也是从SGML派生的。SGML内容非常复杂,而XML使用了SGML的20%的语法实现了SGML的80%的功能。从软件开发人员的角度看, XML语法主要有XML是国际标准,绝大部分软件厂商,开发工具和编程语言都支持相同的基本XML规范。XML文档可用于任何开发平台上,这是XML技术最大的优势。相对来说,JAVA这种非国际标准的技术跨平台则是不太容易的。XML是基于纯文本的,XML文档中是不能包含二进制数据。而且存储文件时会涉及到文本编码格式的问题
阅读全文
摘要:使用C#格式化字符串 1 前言 如果你熟悉Microsoft Foundation Classes(MFC)的CString,Windows Template Library(WTL)的CString或者Standard Template Library(STL)的字符串类,那么你对String.Format方法肯定很熟悉。在C#中也经常使用这个方法来格式化字符串,比如下面这样: int x = 16; decimal y = 3.57m; string h = String.Format( "item {0} sells at {1:C}", x, y ); Consol
阅读全文
摘要:DOM的全称是Document Object Model(文档对象模型),它是来自W3C的官方标准,它允许按照W3C标准W3C DOM Level1和W3C DOM Level2的规范所定义的规则,通过编程来读取,操纵和修改XML文档。DOM的工作方式是:首先将XML文档一次性的装入内存,然后根据文档中定义的元素和属性在内存中创建一个“树型结构”也就是一个文档对象模型,这里的含义其实是把文档对象化,文档中每个节点对应着模型中一个对象,而我们都知道对象提供编程接口,所以在Application中我们正是使用这组对象来访问XML文档进而操作XML文档,下图阐述了Application和DOM交互.
阅读全文
摘要:用的是一种很笨的方法,但可以帮助初学者了解访问XML节点的过程。 已知有一个XML文件(bookstore.xml)如下:<?xml version="1.0" encoding="gb2312"?><bookstore> <book genre="fantasy" ISBN="2-3631-4"> <title>Oberon's Legacy</title> <author>Corets, Eva</author> <
阅读全文
摘要:写的一个XML操作类,包括读取/插入/修改/删除。using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;using System.Xml;namespace PuTianCheng{ /// <
阅读全文
摘要:C# Socket 一个简单的消息发送和接受小程序.TcpSend窗口用于发送消息,另外写一个用于接收消息的应用程序,消息接受到以后,必须要关闭接收消息的窗口,才能在接收新的消息,不知道怎么能解决这个问题。源代码:发送消息的窗口代码using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.Net;using Sys
阅读全文
摘要:创建 WebRequest 实例并返回响应public class WebRequestGetExample { public static void Main () { // Create a request for the URL. WebRequest request = WebRequest.Create ("http://www.cnblogs.com/kingdom_0"); // If required by the server, set the credentials. request.Credentials = CredentialCache.Defau
阅读全文
摘要:摘要:系列文章,从一个基本的代码说起,逐步探索 ThreadPool 的奥妙。首先,看看线程池的样子:从上图看出,线程池维护1个至n个线程,操作系统从请求队列中提取请求分配个线程池中的适合线程处理。先写下如下的代码:usingSystem;usingSystem.Threading;publicclassThreadBase{publicstaticvoidMain(){System.Threading.WaitCallbackwaitCallback=newWaitCallback(MyThreadWork);ThreadPool.QueueUserWorkItem(waitCallback
阅读全文