09 2012 档案

摘要:本文将介绍以下内容:using指令的多种用法using语句在Dispose模式中的应用1.引言在.NET大家庭中,有不少的关键字承担了多种角色,例如new关键字就身兼数职,除了能够创建对象,在继承体系中隐藏基类成员,还在泛型声明中约束可能用作类型参数的参数,在[第五回:深入浅出关键字---把new说透]我们对此都有详细的论述。本文,将把目光转移到另外一个身兼数职的明星关键字,这就是using关键字,在详细讨论using的多重身份的基础上来了解.NET在语言机制上的简便与深邃。那么,using的多重身份都体现在哪些方面呢,我们先一睹为快吧:·引入命名空间·创建别名· 阅读全文
posted @ 2012-09-29 17:30 沙耶 编辑
摘要:本文将介绍以下内容:什么是继承?继承的实现本质1. 引言关于继承,你是否驾熟就轻,关于继承,你是否了如指掌。本文不讨论继承的基本概念,我们回归本质,从编译器运行的角度来揭示.NET继承中的运行本源,来发现子类对象是如何实现了对父类成员与方法的继承,以最为简陋的示例来揭示继承的实质,阐述继承机制是如何被执行的,这对于更好的理解继承,是必要且必然的。2. 分析下面首先以一个简单的动物继承体系为例,来进行说明: public abstract class Animal { public abstract void ShowType(); public void... 阅读全文
posted @ 2012-09-29 16:36 沙耶 编辑
摘要:本文将介绍以下内容:·IL代码分析方法·IL命令解析·.NET学习方法论1.引言自从『你必须知道.NET』系列开篇以来,受到大家很多的关注和支持,给予了anytao巨大的鼓励和动力。俱往昔,我发现很多的园友都把目光和焦点注意在如何理解IL代码这个问题上。对我来说,这真是个莫大的好消息,因为很明显我们的思路慢慢的从应用向底层发生着转变,技巧性的东西是一个方面的积累,底层的探索在我认为也是必不可少的修炼。如果我们选择了来关注这项修炼,那么我们就应该选择如何来着手这项修炼,首先关注anytao的『你必须知道的.NET』系列可以给你提供一个捷径,少花一些功夫;其次对大师级 阅读全文
posted @ 2012-09-29 09:50 沙耶 编辑
摘要:本文将介绍以下内容:IL代码分析方法Hello, world历史.NET学习方法论1.引言1988年Brian W. Kernighan和Dennis M. Ritchie合著了软件史上的经典巨著《The C programming Language》,我推荐所有的程序人都有机会重温这本历史上的经典之作。从那时起,Hello, world示例就作为了几乎所有实践型程序设计书籍的开篇代码,一直延续至今,除了表达对巨人与历史的尊重,本文也以Hello, world示例作为我们扣开IL语言的起点,开始我们循序渐进的IL认识之旅。2. 从Hello, world开始首先,当然是展示我们的Hello, 阅读全文
posted @ 2012-09-29 09:30 沙耶 编辑
摘要:本文将介绍以下内容:按值传递与按引用传递深论ref和out比较参数应用浅析接上篇继续,『第十一回:参数之惑---传递的艺术(上)』4.2 引用类型参数的按值传递当传递的参数为引用类型时,传递和操作的是指向对象的引用,这意味着方法操作可以改变原来的对象,但是值得思考的是该引用或者说指针本身还是按值传递的。因此,我们在此必须清楚的了解以下两个最根本的问题:引用类型参数的按值传递和按引用传递的区别?string类型作为特殊的引用类型,在按值传递时表现的特殊性又如何解释?首先,我们从基本的理解入手来了解引用类型参数按值传递的本质所在,简单的说对象作为参数传递时,执行的是对对象地址的拷贝,操作的是该拷贝 阅读全文
posted @ 2012-09-29 09:05 沙耶 编辑
摘要:本文将介绍以下内容:按值传递与按引用传递深论ref和out比较参数应用浅析1.引言接上回《第九回:品味类型---值类型与引用类型(中)-规则无边》中,对值类型和引用类型的讨论,其中关于string类型的参数传递示例和解释,引起园友的关注和讨论,可谓一石激起千层浪。受教于装配脑袋的深切指正,对这一概念有了相当进一步的了解,事实证明是我错了,在此向朋友们致歉,同时非常感谢大家的参与,尤其是装配脑袋的不倦相告。因此,本文就以更为清晰的角度,把我理解有误的雷区作做以深入的讨论与分析,希望通过我的一点点努力和探讨至少对如下几个问题能有清晰的概念:什么是按值传递?什么是按引用传递?按引用传递和按引用类型参 阅读全文
posted @ 2012-09-28 16:42 沙耶 编辑
摘要:本文将介绍以下内容:类型的基本概念值类型深入引用类型深入值类型与引用类型的比较及应用[下载]:[类型示例代码]1.引言值类型与引用类型的话题经过了两个回合([第八回:品味类型---值类型与引用类型(上)-内存有理]和[第九回:品味类型---值类型与引用类型(中)-规则无边])的讨论和切磋,我们就基本的理解层面来说已经差不多了,但是对这一部分的进一步把握和更深刻的理解还要继续和深化,因为我自己就在两篇发布之际,我就得到装配脑袋兄的不倦指导,之后又查阅了很多的资料发现类型在.NET或者说语言基础中何其重要的内涵和深度,因此关于这个话题的讨论还没有停止,以后我将继续分享自己的所得与所感。不过作为一个 阅读全文
posted @ 2012-09-28 15:51 沙耶 编辑
摘要:接上回[第八回:品味类型---值类型与引用类型(上)-内存有理]的探讨,继续我们关注值类型和引用类型的话题。本文将介绍以下内容:类型的基本概念值类型深入引用类型深入值类型与引用类型的比较及应用1.引言上回[第八回:品味类型---值类型与引用类型(上)-内存有理]的发布,受到大家的不少关注,我们从内存的角度了解了值类型和引用类型的所以然,留下的任务当然是如何应用类型的不同特点在系统设计、性能优化等方面发挥其作用。因此,本回是对上回有力的补充,同时应朋友的希望,我们尽力从内存调试的角度来着眼一些设计的分析,这样就有助于对这一主题进行透彻和全面的理解,当然这也是下一回的重点。从内存角度来讨论值类型和 阅读全文
posted @ 2012-09-28 11:22 沙耶 编辑
摘要:本文将介绍以下内容:类型的基本概念值类型深入引用类型深入值类型与引用类型的比较及应用1.引言买了新本本,忙了好几天系统,终于开始了对值类型和引用类型做个全面的讲述了,本系列开篇之时就是因为想写这个主题,才有了写个系列的想法。所以对值类型和引用类型的分析,是我最想成文的一篇,其原因是过去的学习过程中我就是从这个主题开始,喜欢以IL语言来分析执行,也喜好从底层的过程来深入了解。这对我来说,似乎是一件找到了有效提高的方法,所以想写的冲动就没有停过,旨在以有效的方式来分享所得。同时,我也认为,对值类型和引用类型的把握,是理解语言基础环节的关键主题,有必要花力气来了解和深入。2. 一切从内存开始2.1 阅读全文
posted @ 2012-09-28 10:11 沙耶 编辑
摘要:本文将介绍以下内容:.NET基础架构概念类型基础通用类型系统CLI、CTS、CLS的关系简述1.引言本文不是连环画,之所以在开篇以图形的形式来展示本文主题,其实就是想更加特别的强调这几个概念的重要性和关注度,同时希望从剖析其关系和联系的角度来讲述.NET Framework背后的故事。因为,在作者看来想要深入的了解.NET,必须首先从了解类型开始,因为CLR技术就是基于类型而展开的。而了解类型则有必要把焦点放在.NET类型体系的公共基础架构上,这就是:通用类型系统(Common Type System, CTS)。我之所以将最基本的内容以独立的章节来大加笔墨,除了为后面几篇关于对类型这一话题深 阅读全文
posted @ 2012-09-28 09:51 沙耶 编辑
摘要:本文将介绍以下内容:面向对象基本概念base关键字深入浅出this关键字深入浅出1.引言new关键字引起了大家的不少关注,尤其感谢Anders Liu的补充,让我感觉博客园赋予的交流平台真的无所不在。所以,我们就有必要继续这个话题,把我认为最值得关注的关键字开展下去,本文的重点是访问关键字(Access Keywords):base和this。虽然访问关键字不是很难理解的话题,我们还是有可以深入讨论的地方来理清思路。还是老办法,我的问题先列出来,您是否做好了准备。是否可以在静态方法中使用base和this,为什么?base常用于哪些方面?this常用于哪些方面?可以base访问基类的一切成员吗 阅读全文
posted @ 2012-09-28 09:39 沙耶 编辑
摘要:本文将介绍以下内容:面向对象基本概念new关键字深入浅出对象创建的内存管理1.引言园子里好像没有或者很少把new关键字拿出来说的,那我就占个先机吧,呵呵。那么,我们到底有必要将一个关键字拿出来长篇大论吗?看来是个问题。回答的关键是:你真的理解了new吗?如果是,那请不要浪费时间,如果不是,那请继续本文的循序之旅。下面几个 问题可以大概的考察你对new的掌握,开篇之前,希望大家做个检验,如果通过了,直接关掉本页即可。如果没有通过,希望本文的阐述能帮你找出答案。new一个class对象和new一个struct或者enum有什么不同?new在.NET中有几个用途,除了创建对象实例,还能做什么?new 阅读全文
posted @ 2012-09-28 09:20 沙耶 编辑
摘要:本文将介绍以下内容:• 面向对象基本概念• 类和结构体简介•引用类型和值类型区别1.引言提起class和struct,我们首先的感觉是语法几乎相同,待遇却翻天复地。历史将接力棒由面向过程编程传到面向对象编程,class和struct也背负着各自的命运前行。在我认为,struct英雄迟暮,class天下独行,最本质的区别是class是引用类型,而struct是值类型,它们在内存中的分配情况有所区别。由此产生的一系列差异性,本文将做以全面讨论。2. 基本概念2.1. 什么是class?class(类)是面向对象编程的基本概念,是一种自定义数据结构类型,通常包含字段、属性、方法、属性、构造函数、索引 阅读全文
posted @ 2012-09-28 09:00 沙耶 编辑
摘要:本文将介绍以下内容:• 定制特性的基本概念和用法• 属性与特性的区别比较• 反射的简单介绍1.引言attribute是.NET框架引入的有一技术亮点,因此我们有必要花点时间来了解本文的内容,走进一个发现attribute登堂入室的入口。因为.NET Framework中使用了大量的定制特性来完成代码约定,[Serializable]、[Flags]、[DllImport]、[AttributeUsage]这些的构造,相信我们都见过吧,那么你是否了解其背后的技术。提起特性,由于高级语言发展的历史原因,不免让人想起另一个耳熟能详的名字:属性。特性和属性,往往给初学者或者从C++转移到C#的人混淆的 阅读全文
posted @ 2012-09-27 16:56 沙耶 编辑
摘要:本文将介绍以下内容:• 面向对象思想:多态• 接口• 抽象类1.引言在我之前的一篇post《抽象类和接口的谁是谁非》中,和同事管伟的讨论,得到很多朋友的关注,因为是不成体系的论道,所以给大家了解造成不便,同时关于这个主题的系统性理论,我认为也有必要做以总结,因此才有了本篇的新鲜出炉。同时,我将把上贴中的问题顺便也在此做以交代。2. 概念引入什么是接口?接口是包含一组虚方法的抽象类型,其中每一种方法都有其名称、参数和返回值。接口方法不能包含任何实现,CLR允许接口可以包含事件、属性、索引器、静态方法、静态字段、静态构造函数以及常数。但是注意:C#中不能包含任何静态成员。一个类可以实现多个接口,当 阅读全文
posted @ 2012-09-27 14:07 沙耶 编辑
摘要:本文将介绍以下内容:• 类型转换• is/as操作符小议1.引言类型安全是.NET设计之初重点考虑的内容之一,对于程序设计者来说,完全把握系统数据的类型安全,经常是力不从心的问题。现在,这一切已经在微软大牛们的设计框架中为你解决了。在.NET中,一切类型都必须集成自System.Object类型,因此我们可以很容易的获得对象的准确类型,方法是:GetType()方法。那么.NET中的类型转换,应该考虑的地方有那些呢?2. 概念引入类型转换包括显示转换和隐式转换,在.NET中类型转换的基本规则如下:任何类型都可以安全的转换为其基类类型,可以由隐式转换来完成;任何类型转换为其派生类型时,必须进行显 阅读全文
posted @ 2012-09-27 12:32 沙耶 编辑
摘要:1.引言最近常常为学习中的问题而伤神,幸有管伟一起常常就技术问题拿来讨论,我已想将讨论的内容以基本原貌的方式,形成一个系列[和管子对话],通过记录的方式将曾经的友情和激情记录在园子里,除了勉励自己,也可受用他人。因此[和管子对话]系列,纯属口头之说,一家之言,而且东拉西撤。但是却给我一个很好的启示,就是将学习的东西,尤其是基础性的本质作为系统来常常回味在脑子里,案头间。所以才有了这个系统[你必须知道的.NET]浮出水面,系列的主要内容就是.NET技术中的精华要点,以基础内容为主,以设计思想为辅,有自己的体会,有拿来的精品,初步的思路就是以实例来讲述概念,以简单来表达本质。因为是总结,因为是探索 阅读全文
posted @ 2012-09-27 12:01 沙耶 编辑
摘要:因为有些人可能会疑惑,将了这么多多线程,到底在实际的应用上有什么作用的呢? 这里我在这里用多线程简单实现了一个文件的下载的功能。服务器端页面:<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="FileServer.Default" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 阅读全文
posted @ 2012-09-27 11:13 沙耶 编辑
摘要:一、信号量(Semaphore)信号量(Semaphore)是由内核对象维护的int变量,当信号量为0时,在信号量上等待的线程会堵塞,信号量大于0时,就解除堵塞。当在一个信号量上等待的线程解除堵塞时,内核自动会将信号量的计数减1。在.net 下通过Semaphore类来实现信号量同步。Semaphore类限制可同时访问某一资源或资源池的线程数。线程通过调用 WaitOne方法将信号量减1,并通过调用 Release方法把信号量加1。先说下构造函数:public Semaphore(int initialCount,int maximumCount);通过两个参数来设置信号的初始计数和最大计数。 阅读全文
posted @ 2012-09-27 10:00 沙耶 编辑
摘要:引言:其实这部分内容应该是属于专题四,因为这篇也是讲关于线程同步的,但是由于考虑到用户的阅读习惯问题,因为文章太长了,很多人不是很愿意看包括我也是这样的,同时也有和我说可以把代码弄成折叠的,这样就不会太长的,但是我觉得这样也不怎么便于阅读,因为我看别人的博客的时候,看到有代码是折叠起来的时候很多时候不愿意去点,并且点一下之后同样拉长文章的,然后就看到右边的滚动条变小了,本以为快看完了(意思快学到知识了),一看滚动条后发现还有好长的内容很看, 所以就会给人一种不舒服的感觉吧(如果有和我一样的人的话,你肯定懂的是什么感觉的)。所以我把线程同步放到两篇文章里面来说,其实放到两篇文章里面也有一定原因的 阅读全文
posted @ 2012-09-27 09:46 沙耶 编辑
摘要:上一篇文章主要介绍了如何利用线程池中的工作者线程来实现多线程,使多个线程可以并发地工作,从而高效率地使用系统资源。在这篇文章中将介绍如何用线程池中的I/O线程来执行I/O操作,希望对大家有所帮助。目录:一、I/O线程实现对文件的异步二、I/O线程实现对请求的异步三、总结一、I/O线程实现对文件的异步1.1 I/O线程介绍:对于线程所执行的任务来说,可以把线程分为两种类型:工作者线程和I/O线程。工作者线程用来完成一些计算的任务,在任务执行的过程中,需要CPU不间断地处理,所以,在工作者线程的执行过程中,CPU和线程的资源是充分利用的。I/O线程主要用来完成输入和输出的工作的,在这种情况下, 计 阅读全文
posted @ 2012-09-27 09:29 沙耶 编辑
摘要:上一篇文章主要介绍了如何利用线程池中的工作者线程来实现多线程,使多个线程可以并发地工作,从而高效率地使用系统资源。在这篇文章中将介绍如何用线程池中的I/O线程来执行I/O操作,希望对大家有所帮助。目录:一、I/O线程实现对文件的异步二、I/O线程实现对请求的异步三、总结一、I/O线程实现对文件的异步1.1 I/O线程介绍:对于线程所执行的任务来说,可以把线程分为两种类型:工作者线程和I/O线程。工作者线程用来完成一些计算的任务,在任务执行的过程中,需要CPU不间断地处理,所以,在工作者线程的执行过程中,CPU和线程的资源是充分利用的。I/O线程主要用来完成输入和输出的工作的,在这种情况下, 计 阅读全文
posted @ 2012-09-27 09:11 沙耶 编辑
摘要:目录:一、上节补充二、CLR线程池基础三、通过线程池的工作者线程实现异步四、使用委托实现异步五、任务一、上节补充对于Thread类还有几个常用方法需要说明的。1.1 Suspend和Resume方法这两个方法在.net Framework 1.0的时候就支持的方法,他们分别可以挂起线程和恢复挂起的线程。但在.net Framework 2.0以后的版本中这两个方法都过时了,MSDN的解释是这样:警告:不要使用Suspend 和Resume方法来同步线程的活动。您无法知道挂起线程时它正在执行什么代码。如果您在安全权限评估期间挂起持有锁的线程,则 AppDomain中的其他线程可能被阻止。如果您在 阅读全文
posted @ 2012-09-26 16:52 沙耶 编辑
摘要:引言:最近一段时间都在研究关于.Net线程的内容,觉得线程是每个程序员都应该掌握的,所以写下这个线程的系列希望能给大家学习过程中一些帮助,同时也是自己对线程的巩固,当中如果有什么错漏还请大家指出,这样我们可以互相得到进步。目录:一、线程的介绍二、线程调度和优先级三、前台线程和后台线程四、简单线程的使用一、线程的介绍在介绍线程之前, 很有必要知道什么是进程,以及与线程的关系。进程(Process)是应用程序的实例要使用的资源的一个集合(从可以简化理解:进程就是一种资源,是应用程序所用的资源)。每个应用程序都在各自的进程中运行来确保应用程序不受其他应用程序的影响,如果一个应用程序失败了, 只会影响 阅读全文
posted @ 2012-09-26 16:07 沙耶 编辑
摘要:引言:在我们的平常工作中,邮件的发送和接收应该是我们经常要使用到的功能的。因此知道电子邮件的应用程序的原理也是非常有必要的,在这一个专题中将介绍电子邮件应用程序的原理、电子邮件应用程序中涉及的协议和实现一个简答的电子邮件收发器程序。一、邮件应用程序基本知识1.1 电子邮件原理及相关协议 说到电子邮件的原理,其实和我们现实生活中寄邮件和寄包裹是一样的原理的。就让我们先回顾下现实生活中寄邮件的流程吧——首先,我们先写好信,信封上面写好收信人的地址,写信人的地址,然后把信放到寄信箱中,然后邮局的人会某个时候去这个信箱中的信取出来,然后邮局的人根据信封上写的收信人地址进行转发到当地的邮局,当地邮局然. 阅读全文
posted @ 2012-09-26 15:29 沙耶 编辑
摘要:引言:前面专题中介绍了UDP、TCP和P2P编程,并且通过一些小的示例来让大家更好的理解它们的工作原理以及怎样.Net类库去实现它们的。为了让大家更好的理解我们平常中常见的软件QQ的工作原理,所以在本专题中将利用前面专题介绍的知识来实现一个类似QQ的聊天程序。一、即时通信系统在我们的生活中经常使用即时通信的软件,我们经常接触到的有:QQ、阿里旺旺、MSN等等。这些都是属于即时通信(Instant Messenger,IM)软件,IM是指所有能够即时发送和接收互联网消息的软件。在前面专题P2P编程中介绍过P2P系统分两种类型——单纯型P2P和混合型P2P(QQ就是属于混合型的应用),混合型P2P 阅读全文
posted @ 2012-09-26 15:06 沙耶 编辑
摘要:引言:前面的介绍专题中有朋友向我留言说介绍下关于P2P相关的内容的,首先本人对于C#网络编程也不是什么大牛,因为能力的关系,也只能把自己的一些学习过程和自己的一些学习过程中的理解和大家分享下的,下面就进入正题——P2P(Peer to Peer)编程一、P2P的介绍首先,现在大家熟知的BT、电驴、迅雷、QQ、MSN和PPlive等都是基于P2P方式实现的软件,并且对等联网(Peer to Peer,P2P)将是互联网的发展方向,因此对于P2P技术的了解显得非常的重要,下面就来介绍下P2P架构:在P2P技术之前,我们所有的网络应用都采用C/S或者B/S架构来实现的,然而在之前C/S架构的应用程序 阅读全文
posted @ 2012-09-26 14:53 沙耶 编辑
摘要:本专题主要介绍下如何实现UDP广播的程序,下面就直接介绍实现过程和代码以及运行的结果。一、程序实现UDP广播程序的实现代码:using System;using System.Net;using System.Net.Sockets;using System.Text;using System.Threading;using System.Windows.Forms;namespace UDPBroadcast{ /// <summary> /// 在界面上,用户可以设置本地进程的IP地址和端口号,并将地址加入某个组播组; /// 可以输入发送消息的目的组的地址,并且勾选“广... 阅读全文
posted @ 2012-09-26 14:49 沙耶 编辑
摘要:引用:前一个专题简单介绍了TCP编程的一些知识,UDP与TCP地位相当的另一个传输层协议,它也是当下流行的很多主流网络应用(例如QQ、MSN和Skype等一些即时通信软件传输层都是应用UDP协议的)底层的传输基础,所以在本专题中就简单介绍下UDP的工作原理和UDP编程的只是,希望可以对刚接触网络编程的朋友起到入门的作用。一、UDP介绍UDP和TCP都是构建在IP层之上传输层的协议,但UDP是一种简单、面向数据报(Sock_Dgram)的无连接协议,提供的是不一定可靠的传输服务。然而TCP是一种面向连接、可靠的,面向字节流(Sock_Stream)的传输协议,对于“无连接”是指在正式通信前不必与 阅读全文
posted @ 2012-09-26 12:29 沙耶 编辑
摘要:前言前面专题的例子都是基于应用层上的HTTP协议的介绍, 现在本专题来介绍下传输层协议——TCP协议,主要介绍下TCP协议的工作过程和基于TCP协议的一个简单的通信程序,下面就开始本专题的正文了。一、TCP的工作过程首先TCP是一种面向连接的,可靠的,基于字节流的传输层通信协议。TCP的工作过程可以分为三个阶段:一、连接的建立; 二、传输数据; 三、断开连接,下面就对这三个过程分别介绍下:1.1 连接的建立TCP的连接建立就像打电话一样, 我们打电话时,拨一个号码的号码并不是立即就可以接通的,期间会有一个“嘟 嘟”的呼叫过程, 这就好比是TCP协议的连接的建立阶段。当我们用TCP编写的程序,必 阅读全文
posted @ 2012-09-25 17:27 沙耶 编辑
摘要:前言:前一个专题介绍了自定义的Web服务器,然而向Web服务器发出请求的正是本专题要介绍的Web浏览器,本专题通过简单自定义一个Web浏览器来简单介绍浏览器的工作原理,以及帮助一些初学者揭开浏览器这层神秘的面纱(以前总感觉这些应用感觉很深奥的,没想到自己也可以自定义一个浏览器出来),下面不啰嗦了,进入正题。一、Web浏览器的介绍Web浏览器是指可以显示Web服务器或者本地文件系统中的Html文件内容,并让用户与这些文件交互的一种软件,它是网络服务的客户端浏览程序,可向Web服务器发送请求,并对服务器返回的超文本信息和各种媒体、图片进行解释和显示。浏览器主要通过Http协议与服务器交互并获得网页 阅读全文
posted @ 2012-09-25 17:09 沙耶 编辑
摘要:前言:经过前面的专题中对网络层协议和HTTP协议的简单介绍相信大家对网络中的协议有了大致的了解的, 本专题将针对HTTP协议定义一个Web服务器,我们平常浏览网页通过在浏览器中输入一个网址就可以看到我们想要的网页,这个过程中浏览器只是一个客户端,浏览器(应用层应用程序)通过HTTP协议把用户请求发送到服务端, 服务器接受到发送来的HTTP请求,然后对请求进行处理和响应,最后把响应的内容发送给客户端(浏览器这里充当了用户代理的客户端),浏览器再对接受到的响应内容(一般是HTML文件)进行解释并且显示出来。这就是一次完整的用户请求/响应模型,本专题所讲述的是一个简单的Web服务器,其他一些大型的W 阅读全文
posted @ 2012-09-25 16:59 沙耶 编辑
摘要:我们在用Asp.net技术开发Web应用程序后,当用户在浏览器输入一个网址时就是再向服务器发送一个HTTP请求,此时就使用了应用层的HTTP协议,在上一个专题我们简单介绍了网络协议的知识,主要是为了后面讲HTTP协议做一个铺垫的,只有对HTTP协议有一个清楚的认识,这样当我们用Asp.net技术开发Web应用程序时,我们可以多从网络协议的方面去思考我们的应用程序,而不是只是单单停留在对服务器控件的拖拉的使用,这样也可以帮助我们开发一个自己的自定义web服务器。在这里我想同时把我对Asp.net的本质的理解和大家分享下,如果有什么不对的地方,还请大家指出,首先,当我们设计一个算法的时候要明确输入 阅读全文
posted @ 2012-09-25 16:45 沙耶 编辑
摘要:因为这段时间都在研究C#网络编程的一些知识, 所以在这里把我学习到的在这里和大家分享下的,这样既可以达到分享的目的也可以让大家监督我,如果有什么地方理解错了,还请大家不吝赐教的。很多人写网络编程这快都没有怎么讲网络中的协议,然而我觉得既然是网络编程肯定要介绍下网络编程中一些协议的,这样可以让更好的梳理网络编程的知识的,所以我在这系列中会用两个专题去讲协议,第一个专题简单介绍网络分层以及各层之间如何通信的只是,第二专题将会介绍下应用层协议——Http协议,了解这个不仅对网络编程有个理论基础,也可以帮助更好地理解Web(Asp.net)的开发。一、网络分层网络上的计算机之所以可以互相通信,是因为它 阅读全文
posted @ 2012-09-25 15:27 沙耶 编辑
摘要:SQL Server提供了用于获取数据库对象的元数据信息的工具,比如数据库中有什么表、表中有什么列,等等。这些工具包括目录视图(catalog view)、信息架构视图(information schema view)、系统存储过程和函数。这一方面的内容在SQL Server联机丛书的“查询 SQL Server系统目录(Querying the SQL Server System Catalog)“一节有详细的文档。目录视图 目录视图提供了关于数据库中各对象的非常详细的信息,包括SQL Server特定的信息。例如,如果想列出数据库中的各个表,以及它们的架构名称,只要按以下所示的方法去... 阅读全文
posted @ 2012-09-25 15:19 沙耶 编辑
摘要:本节介绍一些对日期和时间数据类型进行操作的函数,包括GETDATE、CURRENT_TIMESTAP、GETUTCDATE、SYSDATETIME、SYSUTCDATETIME、SYSDATETIMEOFFSET、CAST、CONVERT、SWITCHOFFSET、TODATETIMEOFFSET、DATEADD、DATEDIFF、DATEPART、YEAR、MONTH、DAY,以及DATENAME。注意,SYSDATETIME、SYSUTCDATETIME、SYSDATETIMEOFFSET、SWITCHOFFSET,以及TODATETIMEOFFSET是SQL Server 2008中.. 阅读全文
posted @ 2012-09-25 14:53 沙耶 编辑
摘要:如果要过滤日期范围(比如,整年或整月),比较自然的方法就是使用YEAR和MONTH之类的函数。例如,以下查询返回2007年中生成的所有订单:1 SELECT orderid,custid,empid,orderdate2 FROM Sales.Orders3 WHEREYEAR(orderdate) =2007; 不过,应该小心的一点是:在大多数情况下,当对过滤条件中的列应用了一定的处理后,就不能以有效的方式来使用索引了。为了潜在地有效利用索引,就需要对谓词进行调整,以便对过滤条件中的列不进行处理,如下所示:1 SELECT orderid,custid,empid,orderdate2... 阅读全文
posted @ 2012-09-25 14:50 沙耶 编辑
摘要:SQL Server 2008引入了可以单独使用日期和时间部分的数据类型,但在前面的讨论中还没有区分这两部分。如果要在SQL Server 2008之前版本的SQL Server中只使用日期或时间,只能选用同时包含这两种组成部分的DATETIME或SMALLDATETIME数据类型之一。在要实现日期和时间逻辑的地方,也可以使用整数或字符串之类的数据类型,但此处暂不讨论这种用法。如果想选用DATETIME或SMALLDATETIME类型,那么当只使用日期数据时,保存数据的时间值将是午夜(时间部分全是0)。当只使用时间数据时,保存数据的日期值将是基础日期1900年1月1日。 例如,Sales... 阅读全文
posted @ 2012-09-25 14:23 沙耶 编辑
摘要:当需要指定日期和时间数据类型的字符串文字值(常量)时,应该考虑以下几件事。首先,SQL Server并没有提供表达日期和时间字符串的具体方法,这听起来可能会有点古怪;相反,它允许你指定不同类型的字符串文字,再将其转换(显示或隐式地)为相应的日期和时间数据类型。使用字符串来表示日期和时间值是一种最佳实践,如下面这个例子所示:1 SELECT orderid,custid,empid,orderdate2 FROM Sales.Orders3 WHERE orderdate ='20070212'; SQL Server会把文字'20070212'看作是一个字符串常 阅读全文
posted @ 2012-09-25 12:00 沙耶 编辑
摘要:在SQL Server 2008之前,SQL Server支持两种表示时间的数据类型:DATETIME和SMALLDATETIME。这两种类型都包括了日期和时间组成部分,而且这两部分是不能分开的。它们在存储需求、支持的日期范围,以及日期的精度上都有所不同。SQL Server 2008新引入了DATE、TIME、DATETIME2和DATETIMEOFFSET数据类型。DATE是单独表示日期的数据类型,TIME是单独表示时间的数据类型,DATETIME2是一种比DATETIME具有更大的日期范围和更好的精度的日期类型,DATETIMEOFFSET具有一个时区组成部分。下表列出了每种日期和时.. 阅读全文
posted @ 2012-09-25 11:48 沙耶 编辑
摘要:T-SQL提供了一个LIKE谓词,用于检查字符串是否能够匹配指定的模式。在前面介绍的PATINDEX函数中已经使用了类似的模式。接下来的这节将介绍模式中使用的通配符(wildcard),并演示它们的用法。%(百分号)通配符 百分号代表任意长度的字符串,包括空字符串。例如,以下查询返回姓氏(last name)以字符'D'开头的所有雇员:1 SELECT empid,lastname2 FROM HR.Employees3 WHERE lastname LIKE N'D%';_(下划线)通配符 下划线代表任意单个字符。例如,以下查询返回姓氏(last name)第 阅读全文
posted @ 2012-09-25 11:36 沙耶 编辑
摘要:字符串串联运算符(加号[+]) T-SQL提供了加号(+)运算符,可以将两个或多个字符串合并或串联成一个字符串。例如,以下对Employees表的查询将雇员的firstname列、一个空格,以及lastname列串联起来,生成完整的姓名fullname列:1 SELECT empid,firstname + N''+ lastname AS fullname2 FROM HR.Employees; ANSI SQL规定对NULL值执行字符串串联运算也会产生NULL值的结果。这是SQL Server的默认行为。例如,考虑以下对Customers表的查询,如代码如下:1 SELEC 阅读全文
posted @ 2012-09-25 11:30 沙耶 编辑
摘要:排序规则是字符数据的一个属性,封装了几个方面的特性,包括多语言支持(和Unicode类型有关,因为它支持所有语言)、排序规则、区分大小写、区分重音,等等。要得到系统中目前支持的所有排序规则极其描述,可以查询表函数fn_helpcollations,如下所示:1 SELECT name,description2 FROM sys.fn_helpcollations(); 例如,排序规则Latin1_General_CI_AS表示:Latin1_General 支持的语言是英语。字典排序 基于字典顺序对字符数据进行排序和比较('A'和'a'<'B 阅读全文
posted @ 2012-09-25 11:24 沙耶 编辑
摘要:SQL Server支持两种字符数据类型——普通字符和Unicode字符。普通字符数据类型包括CHAR和VARCHAR,Unicode字符数据类型包括NCHAR和NVARCHAR。它们二者的区别是:普通字符使用一个字节(byte)来保存每个字符,而Unicode字符则需要两个字节。当使用普通字符类型时,由于一个列只用一个字节来保存每个字符,所以就限制在这个列中只能使用英语这一语言,因为一个字节只能代表256(2^8)个不同的字符。一个列所支持的语言是由列的有效排序规则(collation)属性决定的。当使用Unicode数据类型时,一个列可以代表65535(2^16)个不同的字符,因为这时.. 阅读全文
posted @ 2012-09-25 10:43 沙耶 编辑
摘要:标准作业:增加【转到】功能,支持转到对应作业项目界面和成组作业界面作业项目:增加【转到】功能,支持转到对应成组作业和标准作业界面成组作业:增加【转到】功能,支持转到对应作业项目和标准作业界面转到按钮的样式依照零件模块的按钮样式一样,为下拉子菜单。界面布局分隔条,请统一作出调整,一般情况下要求,改变窗体大小时,分隔条所处位置的比例不变。 阅读全文
posted @ 2012-09-25 09:07 沙耶 编辑
摘要:SQL支持一种所谓的同时操作的概念,其含义是认为在同一逻辑查询处理阶段中出现的所有表达式都是同时进行计算的。 例如,这个概念就可以解释为什么不能在SELECT子句中引用为同一SELECT子句中的列分配的别名,即使直觉上看起来应该能够这么做。考虑以下查询:1 SELECT orderid,YEAR(orderdate) AS orderyear,orderyear +1AS nextyear2 FROM Sales.Orders; 以上SELECT列表中第三个表达式对orderyear这一列名的引用是无效的,即使引用表达式位于这个别名的定义“之后”。因为从逻辑上来说,SELECT列表中各... 阅读全文
posted @ 2012-09-24 17:30 沙耶 编辑
摘要:SQL支持用NULL符号来表示缺少的值,它使用的是三值谓词逻辑,这意味着谓词的计算结果可以是TRUE、FALSE或UNKNOWN(未知)。 T-SQL在这方面遵循了标准。在SQL中处理NULL和UNKNOWN可能非常容易让人困惑,因为人们在直觉上更习惯于用二值逻辑(TRUE、FALSE)来进行思考。更为添乱的是,SQL中不同语言元素处理NULL和UNKNOWN的方式也有所不同。我们先从三值谓词逻辑说起。如果逻辑表达式只涉及已经存在的值,那么最终的计算结果要么为TRUE,要么为FALSE;但是当逻辑表达式涉及缺少的值时,其计算结果就是UNKNOWN。例如,考虑谓词salary > 0;当s 阅读全文
posted @ 2012-09-24 17:26 沙耶 编辑
摘要:CASE表达式是一个标量表达式,它基于条件逻辑来返回一个值。注意,CASE是一个表达式,而不是一条语句;也就是会所,不能用它来控制活动的流程,也不能根据条件逻辑来做某些处理。相反,它只是根据条件逻辑来返回某个值。因为CASE是一个标量表达式,所以它可以支持任何标量表达式(如SELECT、WHERE、HAVING,以及ORDER BY子句)、CHECK约束,等等。 CASE表达式有两种格式:简单表达式和搜索表达式。CASE简单格式将一个值(或一个标量表达式)与一组可能的取值进行比较,并返回第一个匹配的结果。如果列表中没有值等于测试值,CASE表达式就返回其ELSE子句(如果存在)中列出的值... 阅读全文
posted @ 2012-09-24 16:04 沙耶 编辑
摘要:T-SQL有几种不同的语言元素可以指定逻辑表达式,例如,查询过滤器(WHERE和HAVING)、CHECK约束,等等。在逻辑表达式中可以使用各种谓词(取值为TRUE、FALSE或UNKNOWN的表达式)和运算符。 T-SQL支持的谓词包括IN、BETWEEN,以及LIKE等。IN这个谓词用于检查一个值(或标量表达式)是否与一组元素中的至少一个相等。例如,以下查询返回订单ID等于10248、或10249、或10250的订单:1 SELECT orderid,empid,orderdate2 FROM Sales.Orders3 WHERE orderid IN(10248,10249,10... 阅读全文
posted @ 2012-09-24 15:41 沙耶 编辑
摘要:OVER子句用于为行为定义一个窗口(windows),以便进行特定的运算。可以把行的窗口简单地认为是运算将要操作的一个行的集合。例如,聚合函数和排名函数都是可以支持OVER子句的运算类型。由于OVER子句为这些函数提供了一个行的窗口,所以这些函数也称之为开窗函数。 聚合函数的要点就是要对一组值进行聚合,聚合函数传统上一直以GROUP BY查询作为操作的上下文。在前面的“GROUP BY”子句的讨论中,我们知道在对数据进行分组以后,查询为每个组只返回一行;因此,也就是要限制所有的表达式为每个组只能返回一个值。 聚合开窗函数使用OVER子句提供窗口作为上下文,对窗口中的一组值进行操作,而不... 阅读全文
posted @ 2012-09-24 10:37 沙耶 编辑
摘要:TOP选项是T-SQL特有的,用于限制查询返回的行数或百分比。当在查询中指定了ORDER BY子句时,TOP将依赖该子句来定义行和逻辑优先顺序。例如,如果要从Orders表返回最近的5个订单,则可以在SELECT子句中指定TOP(5),并在ORDER BY子句中指定orderdate DESC,如以下代码:1 SELECTTOP(5) orderid,orderdate,custid,empid2 FROM Sales.Orders3 ORDERBY orderdate DESC; 从逻辑查询处理的角度来看,TOP选项是作为SELECT阶段的一部分而处理的,紧接着DISTINCT子句处理... 阅读全文
posted @ 2012-09-24 10:19 沙耶 编辑
摘要:需要达到的几个基本特性:1)程序启动能够自动检测版本,并自动下载新版本程序;2)下载过程,应考虑中断情况,不能导致下次启动的任何无法运行的故障;3)下载要考虑自动修复模式,即用户可以点击“重新下载”,相当于覆盖安装一次。4)升级的数据最好是压缩过的,下载后解压,减少数据流量。5)文件需要MD5签名,方便比较,未改变的文件无需重复下载。6)考虑制作发布版本的方便性,应该具备一个生成发布包的工具。7)发布到服务器站点时,要考虑防止发布过程影响到正在使用中的客户。(考虑最后更改服务器上的当前版本配置文件,指向最新的发布目录)8)要考虑升级检测程序自身的更新(建议使用之前跟你讨论过的复制运行副本模式) 阅读全文
posted @ 2012-09-24 10:15 沙耶 编辑
摘要:ORDER BY子句用于展示数据时对输出结果中的行进行排序。从逻辑查询处理来看,ORDER BY是最后处理的一个子句。下面的代码按照雇员ID和订单年份对输出结果进行排序:1 SELECT empid,YEAR(orderdate) AS orderyear,COUNT(*) AS numorders2 FROM Sales.Orders3 WHERE custid =714 GROUPBY empid,YEAR(orderdate)5 HAVINGCOUNT(*) >16 ORDERBY empid,orderyear; 理解SQL最重要的一点就是要明白表不保证是有序的,因为表是为了代表 阅读全文
posted @ 2012-09-24 09:47 沙耶 编辑
摘要:SELECT子句用于指定需要在查询返回的结果集中包含的属性(列)。SELECT列表中的表达式可以直接基于正在查询的表的各个列,也可以在此基础上做进一步的处理。例如,在前面的代码中的SELECT列表就包含以下表达式:empid、YEAR(orderdate)、COUNT(*)。如果表达式直接引用了某个列(如empid),那么目标列的名称默认与原始列的名称一样。也可以选择为目标列分配自定义的名称,为此要使用AS子句(例如,empid AS employee_id)。当在表达式中进行了一定的处理(例如,YEAR(orderdate)),或者没有基于原始表的列(如调用CURRENT_TIMESTA.. 阅读全文
posted @ 2012-09-24 09:30 沙耶 编辑
摘要:HAVING子句用于指定对组进行过滤的谓词或逻辑表达式,这与WHERE阶段对单独的行进行过滤相对应。只有能让HAVING子句中的逻辑表达式为TRUE的组,HAVING阶段才会把这些组返回到下一个逻辑查询处理阶段。逻辑表达式计算结果为FALSE或UNKNOWN的组将被过滤掉。 因为HAVING子句是在对行进行分组后处理的,所以可以在逻辑表达式中引用聚合函数。例如,在下面所示的代码中,HAVING子句使用了逻辑表达式COUNT(*)>1,意味着HAVING阶段过滤器只保留包含多行的组(雇员和订单年份)。 SELECT empid,YEAR(orderdate) AS orderyear,CO 阅读全文
posted @ 2012-09-21 16:50 沙耶 编辑
摘要:GROUP BY阶段可以将WHERE逻辑查询处理阶段返回的行按“组”进行组合。每个组由在GROUP BY子句中指定的各元素决定。例如,以下代码所示查询的GROUP BY子句就使用了empid和YEAR(orderdate)元素: SELECT empid,YEAR(orderdate) AS orderyear,COUNT(*) AS numorders FROM Sales.Orders WHERE custid=71 GROUP BY empid,YEAR(orderdate); 这意味着对于WHERE阶段返回的数据中出现的每个雇员ID和订单年份值的唯一组合,在GROUP B... 阅读全文
posted @ 2012-09-21 16:24 沙耶 编辑
摘要:在WHERE子句中,可以指定一个谓词或逻辑表达式,从而过滤由FROM阶段返回的行。只有能让逻辑表达式结果为TRUE的行,才能由WHERE阶段返回给后续的逻辑查询处理阶段。 SELECT orderid,custid,empid,orderdate,freight FROM Sales.Orders WHERE custid=71; 上面这段代码应用了过滤条件custid=71,WHERE阶段将只保留客户ID等于71的行。 WHERE子句对查询性能有重要影响。在过滤表达式的基础上,SQL Server会计算使用什么索引来访问请求的数据。与扫描整个表相比,通过使用索引,有时可以大幅减少... 阅读全文
posted @ 2012-09-21 16:15 沙耶 编辑
摘要:FROM子句是在逻辑处理阶段第一个要处理的查询子句。这个子句用于要查询的表名,以及对这些表进行操作的表运算符。应该总是用数据库架构来限定代码中的对象名称。即便你没有显示指定架构名称,SQL Server也一定会隐式地解析它。这样就产生了一些额外的代价,而且如果完全让SQL Server决定使用哪个对象,也容易产生歧义。通过显示指定架构名称,可以保证得到的对象的却是你原来想要的而且还不必付出任何额外的代价。 如果不用任何特殊处理而返回一个表的所有行,所有需要做的就是使用一个带有FROM子句的查询,在FROM子句中指定想要查询的表名,在SELECT子句中指定想要返回的各个属性。例如以下语句查... 阅读全文
posted @ 2012-09-21 15:29 沙耶 编辑
摘要:SELECT语句的目的是对表进行查询、应用一定的逻辑处理,并返回结果。注意,这里的“逻辑查询处理”是指ANSI SQL定义的概念模型,规定了如何处理一个查询,以及如何取得最终的结果。Microsoft SQL Server引擎并不教条地严格遵守逻辑查询处理;相反,在物理地处理一个查询时,它可以自由地调整处理阶段的顺序,只要最终的结果能够和逻辑查询处理的规定保持一致。SQL Server可以(事实上经常)在查询的物理处理中采用很多快捷方式。 我们使用以下代码来描述逻辑查询处理和各种SELECT查询字句:USE TestDB SELECT empid,YEAR(orderdate) AS ... 阅读全文
posted @ 2012-09-21 14:44 沙耶 编辑
摘要:关系模型带来的最大优点之一就是模型本身集成了数据完整性。作为模型的一部分而实施的数据完整性(也就是说,作为表定义的一部分)称为声明式(declarative)数据完整性。用代码来实施的数据完整性(例如,用存储过程或触发器)称为过程式(procedural)数据完整性。 为属性选择的数据类型和是否允许为NULL值,甚至数据模型本身都是声明式数据完整性约束的例子。其他声明式约束包括主键、唯一约束(UNIQUE)、外键、检查约束(CHECK),以及DEFAULT约束。当用CREATE TABLE语句创建表时,可以同时定义这些约束;或者在已经创建好表之后,用ALTER TABLE语句增加这些约束... 阅读全文
posted @ 2012-09-21 09:02 沙耶 编辑
摘要:一、创建数据库 我们知道表是属于架构的,而架构又是属于数据库的。要在SQL Server环境中创建一个名为TestDB的数据库,可以运行以下代码: IF DB_ID('TestDB') IS NULL CREATE DATABASE TestDB; 如果不存在名为TestDB的数据库,这段代码就会创建一个新的。DB_ID函数接受一个数据库名称作为输入,返回它的内部数据库ID。如果输入名称指定的数据库不存在,这个函数将返回NULL。这是一种检查数据库是否存在的简单方法。注意:在这个简单的CREATE DATABASE语句中,采用了默认的文件设置(例如,区域和初始大小)。在产品环境 阅读全文
posted @ 2012-09-20 16:58 沙耶 编辑
摘要:五、IIS寄宿1、在解决方案资源管理器中,鼠标右击解决方案“MySolution“,选择:添加→新建网站→WCF服务,出现如下窗体:点击“确定”按钮,创建完毕。界面如下所示:2、删除自动生成的“IService.cs”和“Service.cs”。3、鼠标右击网站项目,选择“添加引用”,出现如下窗体:选择“服务层”类库,确定即可。目前网站项目的结构如下:4、双击“Service.svc”打开该文件进行修改,修改后的文件如下所示:<%@ ServiceHost Language="C#" Debug="true" Service="服务层.M 阅读全文
posted @ 2012-09-20 15:23 沙耶 编辑
摘要:这个例子表示层采用WinForm;业务逻辑层直接写在了WCF服务中,当然最好是把服务层和业务逻辑层进行分离,因为本实例比较简单,就直接把业务逻辑层写在了服务层中;数据访问层采用ADO.NET技术;后台数据库使用SQL Server 2005。一、数据库设计1、我们设计一个简单的用户表(Users),如下:序号列名数据类型为空性主键外键默认值界面字段说明1idint否是否否id号(种子)2userNamenvarchar(20)否否否是用户名3loginPasswordnvarchar(30)否否否是用户密码4memonvarchar(50)是否否是备注2、配置SQL Server 2005.. 阅读全文
posted @ 2012-09-20 14:54 沙耶 编辑
摘要:一个数据库包含多个架构,而每个架构则又包含多个对象。可以将架构看作是各种对象的容器,这些对象可以是表(table)、视图(view)、存储过程(stored procedure)等。 可以在架构级别上控制对象的访问权限。例如,可以为一个用户授予某个架构上的SELECT权限,让这个用户能够查询该架构中所有对象的数据。所以,对于决定在架构中如何组织对象,安全性是应该考虑的因素之一。 此外,架构也是一个命名空间,用作对象名称的前缀。例如,假设在架构Sales中有一个Order表,架构限定(schema-qualified)的对象名称是Sales.Orders,也称为两部分对象名称(two-p... 阅读全文
posted @ 2012-09-20 14:42 沙耶 编辑
摘要:我们有时需要返回特定数量的记录,而不管符合条件的行有多少。要返回排在前面的值,可以有两个选择:指定固定数量的行,或者指定总行数的百分比。例如以下查询将返回前10个价格最高的产品。 SELECT TOP 10 Name,ListPrice FROM Production.Product ORDER BY ListPrice DESC SQL Server不对这些数据做任何分析,甚至在截断列表时,也不会考虑这些值是不是已经排过序,上述查询将在返回第10行后截断结果,而不管后面还有多少条记录的ListPrice与第10行的ListPrice相同,如果想把与第10行相同价格的行也包含进来,可... 阅读全文
posted @ 2012-09-20 09:42 沙耶 编辑
摘要:1.为每一个单元格制定一个tooptip提示,当鼠标移到单元格时,自动弹出提示框。界面如下:1,代码如下, 先设置鼠标移到单元格的行号和列号:public partial class DataGridViewMerge : Form{ private int CellColumnIndex { get; set; } private int CellRowIndex { get; set; }} 设置鼠标进入单元格显示tooltip工具窗口。如下:private void dgv1_CellMouseEnter(object sender, DataGridVi... 阅读全文
posted @ 2012-09-19 17:31 沙耶 编辑
摘要:/// <summary> /// 给datagridview添加鼠标滚轮事件 /// </summary> /// <param name="dataGridView1"></param> public static void bindMouseWheel(System.Windows.Forms.DataGridView dataGridView1) { dataGridView1.MouseWheel += new System.Windows.Forms.MouseEventHa... 阅读全文
posted @ 2012-09-19 17:24 沙耶 编辑
摘要:1,主要利用CellBeginEdit来来判断。 如果首列为 空,则其他列不能编辑。如果首列不为空,其他列才可以编辑。 因为这有涉及到数据车存储代码如下: private void dataGridView1_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e) { var dgv = (DataGridView)sender; int columnIndex = e.ColumnIndex; string first... 阅读全文
posted @ 2012-09-19 17:09 沙耶 编辑
摘要:1.利用datagridview的HeadText来修改标题如图:代码如下: private void InitDataGridViewHead() { dataGridView1.Columns[0].HeaderText = "姓名"; dataGridView1.Columns[1].HeaderText = "年龄"; dataGridView1.Columns[2].HeaderText = "性别"; dataGridView1.Columns[3].He... 阅读全文
posted @ 2012-09-19 17:00 沙耶 编辑
摘要:1.通过设置单元格为只读属性,可以控制不同的用户具有不用的访问权限如:设置某一列只读,dataGridView1.Columns[1].ReadOnly = true; 设置某一行只读dataGridView1.Rows[2].ReadOnly = true; 设置某一单元格只读dataGridView1[2, 2].ReadOnly = true; 阅读全文
posted @ 2012-09-19 16:54 沙耶 编辑
摘要:使用指定的字符分割字符串。思路:1,先计算出指定的分割字符在字符串中的索引, 2.然后再分割字符串。关键函数: charindex,substring,len,额外函数: right,leftsql代码如下: declare @strorder nvarchar(200) declare @ismulorder int declare @firstOrder nvarchar(200) declare @secondOrder nvarchar(200) set @strorder='LastModifyDate Desc,OurPrice Asc' select CHARIN 阅读全文
posted @ 2012-09-19 16:10 沙耶 编辑
摘要:需求:需要统计网站的访问量,具体是哪个用户的ip访问该网站,并统计从哪个连接访问该网站。提示。先按userIP分组,再按时间排序,最后编号。代码如下:select row_number() over (partition by UserIp order by insertTime),* from useraccess 阅读全文
posted @ 2012-09-19 16:05 沙耶 编辑
摘要:1、使用identity(int,1,1)来产生行号,必须把数据插入到一张表中。2、如图:3、代码如下: select rowid=identity(int,1,1),userip into tempT from useraccess select * from tempT 阅读全文
posted @ 2012-09-19 15:59 沙耶 编辑
摘要:1、显示带美元货币符号的数字。 如图:代码如下: int digital = 123456; CultureInfo di = new CultureInfo("en"); Console.WriteLine(digital.ToString("c",di)); 2、显示带人民币货币符号的数字。代码如下: int digital = 123456; CultureInfo di = new CultureInfo("zh-chs"); Console.WriteLine(digit... 阅读全文
posted @ 2012-09-19 15:42 沙耶 编辑
摘要:1.Directory和DirectoryInfo这两个类都是对文件进行操作,但Directory是静态类,所以它的执行效率会更高一点。2.对文件操作。我们可以这样认为,Directory和directoryInfo都是一样的,只是表现形式不一样。3.获取目录的文件名称或者是文件夹名称。代码如下: ... 阅读全文
posted @ 2012-09-19 15:17 沙耶 编辑
摘要:string path = @"c:\wtqCreate"; string pathTxt = path + @"\my.txt"; if (Directory.Exists(path)) { Directory.Delete(path,true); Directory.CreateDirectory(path); using (StreamWriter sw = Fi... 阅读全文
posted @ 2012-09-19 15:11 沙耶 编辑
摘要:1.思路,可使用directory和File文件相互结合。代码如下: string path = Environment.CurrentDirectory; string pattern = "*.txt"; string[] strFileName = Directory.GetFiles(path, pattern); foreach (var item in strFileName) { File.Delete(item); ... 阅读全文
posted @ 2012-09-19 15:08 沙耶 编辑
摘要:1、xml: 数据越复杂,处理就越复杂,当应用程序越复杂,xml越能发挥作用。2、xml文档是利用xml解析器来解析xml的,因此在程序开发中,可以先利用xml解析器来解析xml,以来承担应用程序的压力。3、修改xml文档的结构时,并不需要去修改程序,这样少了很多额外的麻烦。4、xml是可扩展标记语言,意味着任何人可以使用它们想用的标签来定义xml文档。5、xml词汇,包含SVG,MathML,CML,比如CML全程为chemical Markup language,用来收集一些跟化学相关的信息。比如,MathML用来收集一些 跟数学相关的信息,同时我们也可以自己创建以及的词汇。6、html与 阅读全文
posted @ 2012-09-19 15:03 沙耶 编辑
摘要:编写程序的时候,经常需要用的项目根目录。自己总结如下1、取得控制台应用程序的根目录方法 方法1、Environment.CurrentDirectory 取得或设置当前工作目录的完整限定路径 方法2、AppDomain.CurrentDomain.BaseDirectory 获取基目录,它由程序集冲突解决程序用来探测程序集2、取得Web应用程序的根目录方法 方法1、HttpRuntime.AppDomainAppPath.ToString();//获取承载在当前应用程序域中的应用程序的应用程序目录的物理驱动器路径。用于App_Data中获取 方法2、Server.MapPath("& 阅读全文
posted @ 2012-09-19 14:51 沙耶 编辑
摘要:1,在使用excel时,经常会碰到使用某一列的值同时乘以某一个数。 具体做法是:使用选择性 粘贴如下; 先在一个单元格输入2,复制它,选定你乘2的区域,选择性粘贴/乘如图:这样,搞定。 阅读全文
posted @ 2012-09-19 14:40 沙耶 编辑
摘要:1.语法DATEPART (datepart , date )参数datepart是将为其返回integer的 date(日期或时间值)的一部分。下表列出了所有有效的 datepart 参数。用户定义的变量等效项是无效的。datepart缩写yearyy,yyyyquarterqq,qmonthmm,mdayofyeardy,ydaydd,dweekwk,wwweekdaydwhourhhminutemi, nsecondss,smillisecondmsmicrosecondmcsnanosecondnsTZoffsettzISO_WEEKisowk,isowwdate是一个表达式,可以解析 阅读全文
posted @ 2012-09-19 14:37 沙耶 编辑
摘要:1,可以通过使用 sql中的language来设置要查询出来的语言。1.1使用繁体中文如下代码: set language N'繁體中文' SELECT DATENAME(ww, '2011-08-17 12:13:00'), DATENAME(DW,'2011-08-17 13:12:00'), CONVERT(varchar,getdate(),109) 执行结果如下:2.2使用英文代码如下: set language N'English' SELECT DATENAME(ww, '2011-08-17 12:13:0 阅读全文
posted @ 2012-09-19 14:27 沙耶 编辑
摘要:1.语法:DATEADD (datepart , number , date ) 2.参数datepart是与integernumber 相加的 date 部分。下表列出了所有有效的 datepart 参数。用户定义的变量等效项是无效的。datepart缩写yearyy,yyyyquarterqq,qmonthmm,mdayofyeardy,ydaydd,dweekwk,wwweekdaydw,whourhhminutemi,nsecondss,smillisecondmsmicrosecondmcsnanosecondnsnumber是一个表达式,可以解析为与 date 的 datepar. 阅读全文
posted @ 2012-09-19 14:22 沙耶 编辑
摘要:这很实用。在企业管理器中:先在本地建一个目的数据库-》右击该DB-》所有任务-》导入数据-》在源数据库选择对话框中,将“服务器”选择为你所要的Server,填入登录名及密 码,选择要导入的数据库-》在目的数据库选择对话框中,用默认值或再自行选择-》选择“复制数据库间的对象和数据”-》接下来next即可 阅读全文
posted @ 2012-09-19 12:47 沙耶 编辑
摘要:为便于管理数据库中的权限,SQL Server提供了若干“角色”,这些角色是用于分组其他主体的安全主体。它们类似于 MicrosoftWindows操作系统中的组。数据库级角色的权限作用域为数据库范围。SQL Server 中有两种类型的数据库级角色:数据库中预定义的“固定数据库角色”和您可以创建的“灵活数据库角色”。固定数据库角色是在数据库级别定义的,并且存在于每个数据库中。db_owner 和 db_securityadmin 数据库角色的成员可以管理固定数据库角色成员身份。但是,只有 db_owner 数据库角色的成员能够向db_owner 固定数据库角色中添加成员。msdb 数据库中还 阅读全文
posted @ 2012-09-19 12:39 沙耶 编辑
摘要:datetime,smalldatetime、datetime2,date,time,datetimeoffset的具体 区别如下:大部分都只是秒钟的差别。 阅读全文
posted @ 2012-09-19 09:45 沙耶 编辑
摘要:1使用row_number()函数进行编号:如select email,customerID, ROW_NUMBER() over(order by psd) as rows from QT_Customer 原理:先按psd进行排序,排序完后,给每条数据进行编号。2.在订单中按价格的升序进行排序,并给每条记录进行排序代码如下:select DID,customerID,totalPrice,ROW_NUMBER() over(order by totalPrice) as rows from OP_Order 3.统计出每一个各户的所有订单并按每一个客户下的订单的金额 升序排序,同时给每.. 阅读全文
posted @ 2012-09-19 09:36 沙耶 编辑
摘要:有关datediff的相应信息,见如下:DATEDIFF (datepart ,startdate ,enddate )datepart是指定所跨边界类型的 startdate 和 enddate 的一部分。下表列出了所有有效的 datepart 参数。用户定义的变量等效项是无效的。datepart缩写yearyy, yyyyquarterqq, qmonthmm, mdayofyeardy, ydaydd, dweekwk, wwhourhhminutemi, nsecondss, smillisecondmsmicrosecondmcsnanosecondnsstartdate是一个表达式 阅读全文
posted @ 2012-09-19 09:27 沙耶 编辑
摘要:获取时间得系统函数SYSDATETIMEOFFSET() ,SYSUTCDATETIME(),CURRENT_TIMESTAMP ,GETDATE() ,GETUTCDATE();具体说明请见:current_timespamp 阅读全文
posted @ 2012-09-19 09:21 沙耶 编辑
摘要:Insert是T-sql中常用语句,Insert INTO table(field1,field2,...) values(value1,value2,...)这种形式的在应用程序开发中必不可少。但我们在开发、测试过程中,经常会遇到需要表复制的情况,如将一个table1的数据的部分字段复制到table2中,或者将整个table1复制到table2中,这时候我们就要使用SELECT INTO 和 INSERT INTO SELECT 表复制语句了。 1.INSERT INTO SELECT语句语句形式为:Insert into Table2(field1,field2,...) selec... 阅读全文
posted @ 2012-09-18 12:37 沙耶 编辑
摘要:SELECT T3.FRAMENO AS FRAMENO , CASE WHEN T3.WalkDistanceCount = 1 THEN 'L1' WHEN (T3.MaxWalkDistance - T3.MinWalkDistance)/(T3.WalkDistanceCount - 1) < 4999 THEN 'L4'WHEN (T3.MaxWalkDistance - T3.MinWalkDistance)/(T3.WalkDistanceCount - 1) BETWEEN 5000 AND 5999 THEN 'L5'WH 阅读全文
posted @ 2012-09-17 13:03 沙耶 编辑
摘要:SQL OVER开窗函数1.使用over子句与rows_number()以及聚合函数进行使用,可以进行编号以及各种操作。而且利用over子句的分组效率比group by子句的效率更高。 2.在订单表(order)中统计中,生成这么每一条记录都包含如下信息:“所有订单的总和”、“每一位客户的所有订单的总和”、”每一单的金额“关键点:使用了sum() over() 这个开窗函数如图:代码如下: select customerID, SUM(totalPrice) over() as AllTotalPrice, SUM(totalPrice) over(partition by cust... 阅读全文
posted @ 2012-09-17 11:21 沙耶 编辑
摘要:系统管理模块中,做出了一定调整。原账户表里面有个ShopID+InvOrgID的外键引用,用于指定账户默认的库存组织。这种方式目前考虑改造为如下对应关系表。每个账户可以对应多个库存组织、服务组织,其中有一个组织是默认的,在加载的下拉框中,只显示出当前登录账户配置了对应关系的组织(库存、服务、销售组织)供其选择。另外对应组织如果限制为只读,也只能用于查看目的,服务器需要做出检验,如果对应组织是只读的,就只能查看这个组织的业务,而不能操作业务影响其数据。 阅读全文
posted @ 2012-09-14 15:28 沙耶 编辑
摘要:Lambda表达式其实并不陌生,他的前生就是匿名函数,所以要谈Lambda表达式,就不得不谈匿名函数,要谈匿名函数,那又要不得不谈委托。何为委托匿名方法Lambda表达式扩展方法泛型委托A Simple Lambda DemoLambda表达式树何为委托委托非常好理解,类似于C++里面的函数指针(指向了一个方法),并且委托约束了待指向方法的签名(由返回类型和参数组成)。using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace 委托Test{ delegate bo... 阅读全文
posted @ 2012-09-14 09:14 沙耶 编辑
摘要:作为系列的最后一篇,得要说说C#驱动对mongodb的操作,目前驱动有两种:官方驱动和samus驱动,不过我个人还是喜欢后者,因为提供了丰富的linq操作,相当方便。官方驱动:https://github.com/mongodb/mongo-csharp-driver/downloads。下载后,还提供了一个酷似msdn的帮助文档。samus驱动:https://github.com/samus/mongodb-csharp/downloads。下面就具体看看samus驱动,https://github.com/samus/mongodb-csharp/blob/master/exampl.. 阅读全文
posted @ 2012-09-13 14:44 沙耶 编辑
摘要:这一篇我们以管理员的视角来看mongodb,作为一名管理员,我们经常接触到的主要有4个方面:1. 安装部署2. 状态监控3. 安全认证4. 备份和恢复,下面我们就一点一点的讲解。一:安装部署 我之前的文章都是采用console程序来承载,不过在生产环境中这并不是最佳实践,谁也不愿意在机器重启后满地找牙似找mongodb,在mongodb里面提供了一个叫做“服务寄宿”的模式,我想如果大家对wcf比较熟悉的话很容易听懂。好了,我们实践一下,这里我开一下D盘里面的mongodb。这里要注意的有两点: <1> logpath: 当我们使用服务寄宿的时候,用眼睛都能想明白肯定不会用conso 阅读全文
posted @ 2012-09-13 14:36 沙耶 编辑
摘要:在mongodb里面存在另一种集群,就是分片技术,跟sql server的表分区类似,我们知道当数据量达到T级别的时候,我们的磁盘,内存就吃不消了,针对这样的场景我们该如何应对。一:分片 mongodb采用将集合进行拆分,然后将拆分的数据均摊到几个片上的一种解决方案。下面我对这张图解释一下: 人脸: 代表客户端,客户端肯定说,你数据库分片不分片跟我没关系,我叫你干啥就干啥,没什么好商量的。 mongos: 首先我们要了解”片键“的概念,也就是说拆分集合的依据是什么?按照什么键值进行拆分集合.... 好了,mongos就是一个路由服务器,它会根据管理员设置的“片... 阅读全文
posted @ 2012-09-13 14:34 沙耶 编辑
摘要:从这一篇开始我们主要讨论mongodb的部署技术。 我们知道sql server能够做到读写分离,双机热备份和集群部署,当然mongodb也能做到,实际应用中我们不希望数据库采用单点部署,如果碰到数据库宕机或者被毁灭性破坏那是多么的糟糕。一:主从复制1: 首先看看模型图2: 从上面的图形中我们可以分析出这种架构有如下的好处: <1> 数据备份。 <2> 数据恢复。 <3> 读写分离。3:下面我们就一一实践 实际应用中我们肯定是多服务器部署,限于自己懒的装虚拟机,就在一台机器上实践了。第一步:我们把mongodb文件夹放在D盘和E盘,模拟放在多服务器上。第二步 阅读全文
posted @ 2012-09-13 14:33 沙耶 编辑
摘要:这些天项目改版,时间比较紧,博客也就没跟得上,还望大家见谅。 好,今天分享下mongodb中关于索引的基本操作,我们日常做开发都避免不了要对程序进行性能优化,而程序的操作无非就是CURD,通常我们又会花费50%的时间在R上面,因为Read操作对用户来说是非常敏感的,处理不好就会被人唾弃,呵呵。 从算法上来说有5种经典的查找,具体的可以参见我的算法速成系列,这其中就包括我们今天所说的“索引查找”,如果大家对sqlserver比较了解的话,相信索引查找能给我们带来什么样的性能提升吧。 我们首先插入10w数据,上图说话:一:性能分析函数(explain)好了,数据已经插入成功,既然我们要做分... 阅读全文
posted @ 2012-09-13 14:32 沙耶 编辑
摘要:今天跟大家分享一下mongodb中比较好玩的知识,主要包括:聚合,游标。一: 聚合 常见的聚合操作跟sql server一样,有:count,distinct,group,mapReduce。<1> count count是最简单,最容易,也是最常用的聚合工具,它的使用跟我们C#里面的count使用简直一模一样。<2> distinct 这个操作相信大家也是非常熟悉的,指定了谁,谁就不能重复,直接上图。<3> group 在mongodb里面做group操作有点小复杂,不过大家对sql server里面的group比较熟悉的话还是一眼能看的明白的,其实gro 阅读全文
posted @ 2012-09-13 14:19 沙耶 编辑
摘要:看过上一篇,相信大家都会知道如何开启mongodb了,这篇就细说下其中的增删查改,首先当我们用上一篇同样的方式打开mongodb,突然傻眼了,擦,竟然开启不了,仔细观察“划线区域“的信息,发现db文件夹下有一个类似的”lock file”阻止了mongodb的开启,接下来我们要做的就是干掉它,之后,开启成功,关于mongodb的管理方式将在后续文章分享。一: Insert操作 上一篇也说过,文档是采用“K-V”格式存储的,如果大家对JSON比较熟悉的话,我相信学mongodb是手到擒来,我们知道JSON里面Value可能是“字符串”,可能是“数组”,又有可能是内嵌的一个JSON对象,相... 阅读全文
posted @ 2012-09-13 12:33 沙耶 编辑
摘要:关于mongodb的好处,优点之类的这里就不说了,唯一要讲的一点就是mongodb中有三元素:数据库,集合,文档,其中“集合”就是对应关系数据库中的“表”,“文档”对应“行”。一: 下载 上MongoDB官网,我们发现有32bit和64bit,这个就要看你系统了,不过这里有两点注意: ①:根据业界规则,偶数为“稳定版”(如:1.6.X,1.8.X),奇数为“开发版”(如:1.7.X,1.9.X),这两个版本的区别相信大家都知道吧。 ②:32bit的mongodb最大只能存放2G的数据,64bit就没有限制。 我这里就下载"2.0.2版本,32bit“,ok,下载之后我就... 阅读全文
posted @ 2012-09-13 10:39 沙耶 编辑
摘要:Dev的表格中编辑捕获EditValueChanged事件技巧:如果需要立即获取到控件编辑的当前值,调用一下GridView的PostEditor( )方法即可。 阅读全文
posted @ 2012-09-13 10:37 沙耶 编辑
摘要:最后一篇,我们来说说vs的“性能向导",通常我们调试程序的性能一般会使用Stopwatch,如果希望更加系统的了解程序,我们就需要用到”性能向导“,通过性能报告便于我们快速的发现并找到潜在的性能问题。首先我们上一段需要改进的代码: 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Diagnostics; 6 7 namespace Test 8 { 9 class Program10 {11 ... 阅读全文
posted @ 2012-09-12 17:29 沙耶 编辑
摘要:其实说到上一篇,我们要说的task的知识也说的差不多了,这一篇我们开始站在理论上了解下“线程池”和“任务”之间的关系,不管是说线程还是任务,我们都不可避免的要讨论下线程池,然而在.net 4.0以后,线程池引擎考虑了未来的扩展性,已经充分利用多核微处理器架构,只要在可能的情况下,我们应该尽量使用task,而不是线程池。首先看一下task的结构从图中我们可以看出Task.Factory.StartNew()貌似等同于用ThreadPool.QueueUserWorkItem()创建,但是请注意,我是用TPL的形式使用线程池,要知道task出现以后,一直标榜着以更少的工作量,更低的性能消耗... 阅读全文
posted @ 2012-09-12 17:27 沙耶 编辑
摘要:在.net里面异步编程模型由来已久,相信大家也知道Begin/End异步模式和事件异步模式,在task出现以后,这些东西都可以被task包装起来,可能有人会问,这样做有什么好处,下面一一道来。一: Begin/End模式1: 委托 在执行委托方法的时候,我们常常会看到一个Invoke,同时也有一对你或许不常使用的BeginInvoke,EndInvoke方法对,当然Invoke方法是阻塞主线程,而BeginInvoke则是另开一个线程。 1 class Program 2 { 3 static void Main(string[] args) 4 ... 阅读全文
posted @ 2012-09-12 17:25 沙耶 编辑
摘要:承接上一篇,我们继续说下.net4.0中的同步机制,是的,当出现了并行计算的时候,轻量级别的同步机制应运而生,在信号量这一块出现了一系列的轻量级,今天继续介绍下面的3个信号量CountdownEvent,SemaphoreSlim,ManualResetEventSlim。一:CountdownEvent 这种采用信号状态的同步基元非常适合在动态的fork,join的场景,它采用“信号计数”的方式,就比如这样,一个麻将桌只能容纳4个人打麻将,如果后来的人也想搓一把碰碰运气,那么他必须等待直到麻将桌上的人走掉一位。好,这就是简单的信号计数机制,从技术角度上来说它是定义了最多能够进入关键代... 阅读全文
posted @ 2012-09-12 17:14 沙耶 编辑
摘要:在并行计算中,不可避免的会碰到多个任务共享变量,实例,集合。虽然task自带了两个方法:task.ContinueWith()和Task.Factory.ContinueWhenAll()来实现任务串行化,但是这些简单的方法远远不能满足我们实际的开发需要,从.net 4.0开始,类库给我们提供了很多的类来帮助我们简化并行计算中复杂的数据同步问题。大体上分为二种:① 并发集合类: 这个在先前的文章中也用到了,他们的出现不再让我们过多的关注同步细节。② 轻量级同步机制: 相对于老版本中那些所谓的重量级同步机制而言,新的机制更加节省cpu的额外开销。关于并发集合类没什么好讲的,如... 阅读全文
posted @ 2012-09-12 17:06 沙耶 编辑
摘要:相信在.net平台下,我们都玩过linq,是的,linq让我们的程序简洁优美,简直玩的是爱不释手,但是传统的linq只是串行代码,在并行的年代如果linq不支持并行计算那该是多么遗憾的事情啊。 当然linq有很多种方式,比如linq to sql ,xml,object 等等,如果要将linq做成并行还是很简单的,这里我就举一个比较实际一点的例子,我们知道为了更快的响应用户操作,码农们想尽了各种办法,绞尽了脑汁,其中有一个办法就是将数据库数据预加载到内存中,然后通过各种数据结构的手段来加速CURD,是的,比如一个排序地球人只能做到N(lgN),那么如果我还想再快一点的话该怎么办呢?那么现在的. 阅读全文
posted @ 2012-09-12 16:54 沙耶 编辑
摘要:在我们了解Task之前,如果我们要使用多核的功能可能就会自己来开线程,然而这种线程模型在.net 4.0之后被一种称为基于“任务的编程模型”所冲击,因为task会比thread具有更小的性能开销,不过大家肯定会有疑惑,任务和线程到底有什么区别?1:任务是架构在线程之上的,也就是说任务最终还是要抛给线程去执行。2:任务跟线程不是一对一的关系,比如开10个任务并不是说会开10个线程,这一点任务有点类似线程池,但是任务相比线程池有很小 的开销和精确的控制。一:Task1. 最简单的使用 开启task有两种方式:<1> 实例化Task1 //第一种方式开启2 var ta... 阅读全文
posted @ 2012-09-12 16:19 沙耶 编辑
摘要:随着多核时代的到来,并行开发越来越展示出它的强大威力,像我们这样的码农再也不用过多的关注底层线程的实现和手工控制,要了解并行开发,需要先了解下两个概念:“硬件线程”和“软件线程”。1. 硬件线程 相信大家手头的电脑都是双核以上的,像我这样古董的电脑都是双核的,这样的双核叫做物理内核。硬件线程又叫做逻辑内核,我们可以在”任务管理器“中查看”性能“标签页,如下图,我们知道有2个硬件线程。一般情况下,一个物理内核对应一个逻辑内核,比如我这里的2对2。当然如果你的cpu采用的是超线程技术,那么可能就会有4个物理内核对应8个硬件线程,现在有很多服务器都有8个硬件线程,上午在公司的服务器上截了个图... 阅读全文
posted @ 2012-09-12 16:00 沙耶 编辑
摘要:第三篇来的好晚啊,上一篇说了如何向服务器推送信息,这一篇我们看看如何"快好准"的从服务器下拉信息。 网络上有很多大资源文件,比如供人下载的zip包,电影(你懂的),那么我们如何快速的进行下载,大家第一反应肯定就是多线程下载,那么这些东西是如何做的呢?首先我们可以从“QQ的中转站里面拉一个rar下来“。然后用fiddler监视一下,我们会发现一个有趣的现象:第一:7.62*1024*1024≈7990914 千真万确是此文件第二:我明明是一个http链接,tmd的怎么变成n多个了?有意思。好,我们继续往下看,看看这些链接都做了些什么?最终,我们发现http协议中有一个Cone 阅读全文
posted @ 2012-09-11 17:29 沙耶 编辑
摘要:我们学习网络编程最熟悉的莫过于Http,好,我们就从Http入手,首先我们肯定要了解一下http的基本原理和作为,对http的工作原理有一定程度的掌握,对我们下面的学习都是有很大帮助的。一: 工作方式 ①:client和server建立可靠的TCP连接。 ②:然后client通过Socket向server发送http请求。 ③:server端处理请求,返回处理数据。 ④:在http1.0中,client与server之间的tcp连接立即断开。 但在http1.1中,因为默认支持“tcp的长连接”,所以server端采用超时才断开tcp连接的策略。二: 特点 ①:Http是无... 阅读全文
posted @ 2012-09-11 17:02 沙耶 编辑
摘要:在C#的网络编程中,进程和线程是必备的基础知识,同时也是一个重点,所以我们要好好的掌握一下。一:概念 首先我们要知道什么是”进程”,什么是“线程”,好,查一下baike。 进程:是一个具有一定独立功能的程序关于某个数据集合的一次活动。它是操作系统动态执行的基本单元, 在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。 线程:是"进程"中某个单一顺序的控制流。关于这两个概念,大家稍微有个印象就行了,防止以后被面试官问到。二:进程 framework里面对“进程”的基本操作的封装还是蛮好的,能够满足我们实际开发中的基本应用。<1> 获取进程信息 fra 阅读全文
posted @ 2012-09-11 16:59 沙耶 编辑
摘要:1、在SDK Manager下Tools->Options打开了SDK Manager的Settings,选中“Force s://… sources to be fetched using …”,强制使用协议。2、Windows在C:\WINDOWS\system32\drivers\etc打开/etc/hosts文件,添加#google_android更新203.208.46.146 dl.google203.208.46.146 dl-ssl.google74.125.237.1 dl-ssl.google.com然后即可正常更新了 阅读全文
posted @ 2012-09-05 20:46 沙耶 编辑
摘要:移动应用不会取代现有模式,主要因为录入的不方便和数据展现受限。它将会成为企业应用的有益补充。某些情形下用移动设备操作或者展示业务也比较方便。我们的产品也将会添加相关必要的移动应用,以增加一些环节上的亮点。这让我想起 90年代,会做个静态网页都7-8K的工资的时代。不过,我认为移动应用的方向性趋势正在形成,但还未定型。这也意味着,学习的某些新东西,会很快淘汰。但是这不应该成为我们不学习的理由。保持好奇心,学习并尝试,这是软件开发者的一个重要素质。 阅读全文
posted @ 2012-09-05 16:40 沙耶 编辑
摘要:Double salary1 = 10000.0;Double salary2 = 10000.12345;Double salary3 = 10000.1289;Int salary4 = 10000;string salary5 = "10000";string salary6 = "10000.12345";string salary7 = "10000.1289"Convert.ToDouble(salary1).ToString("0.00");//保留小数点后两位,结果为10000.00Convert. 阅读全文
posted @ 2012-09-05 11:46 沙耶 编辑
摘要:数据库在使用过程中会使日志文件不断增加,使得数据库的性能下降,并且占用大量的磁盘空间。SQLServer数据库都有log文件,log文件记录用户对数据库修改的操作。可以通过直接删除log文件和清空日志在清除数据库日志。一、删除LOG1、分离数据库。分离数据库之前一定要做好数据库的全备份,选择数据库——右键——任务——分离。勾选删除连接分离后在数据库列表将看不到已分离的数据库。2、删除LOG文件3、附加数据库,附加的时候会提醒找不到log文件。删除数据库信息信息的ldf文件:附加数据库之后将生成新的日志文件log,新的日志文件的大小事504K。也可以通过命令才完成以上的操作:use master 阅读全文
posted @ 2012-09-04 15:47 沙耶 编辑
摘要:日常开发中,相信大家经常会用like去匹配一些数据,同时我们也知道,like往往会导致全表扫描,当数据量越来越大的时候,我们会纠结于数据库的龟速查找,此时我们必须另寻蹊跷,这时lucene就可以大显身手了。 首先我们做一个demo,向数据库中插入10w条数据,总共778M。接下来,我们搜索下新闻内容中包含“流行”的记录。mmd,检索一下要78s,是谁都要砸了面前的破机子。下面我们来看看lucene的效果怎么样。下载地址:http://incubator.apache.org/lucene.net/download.html 1 using System; 2 using System.C... 阅读全文
posted @ 2012-09-04 15:07 沙耶 编辑
摘要:1 .NET为什么要引入泛型? 说到.NET泛型,应该都不陌生,毕竟泛型是.NET 2.0中就推出的特性,各位博友应该都知道引入泛型的目的是为了解决装箱、拆箱带来的性能损失,说的当然没有错,但是不够“太具体”,确切来讲泛型解决了原先无法避免的容器操作的装箱拆箱问题。 目的就说这么多吧,言简意赅,该说的说了,多说无益。 2.浅谈.NET泛型原理 有过C++编程经验的博友对C++中的模板,一定不陌生,泛型的语法和概念和C++中的模板极其类似,在C++中模板的目的是为了设计更加通用的类型,在.NET中也是这样,当然还有另外一个重要的作用,就是前面所说的:避免容器操作中的装箱和拆箱操作! ... 阅读全文
posted @ 2012-09-04 10:03 沙耶 编辑
摘要:给个通俗的解释吧.例表aaid adate1 a12 a23 a3表bbid bdate1 b12 b24 b4两个表a,b相连接,要取出id相同的字段select * from a inner join b on a.aid = b.bid这是仅取出匹配的数据.此时的取出的是:1 a1 b12 a2 b2那么left join 指:select * from a left join b on a.aid = b.bid首先取出a表中所有数据,然后再加上与a,b匹配的的数据此时的取出的是:1 a1 b12 a2 b23 a3 空字符同样的也有right join指的是首先取出b表中所有数据,然 阅读全文
posted @ 2012-09-03 17:25 沙耶 编辑
摘要:简介 Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果; 特点 Solr是一个高性能,采用Java5开发,基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎。 文档通过Http利用XML 加到一个搜索集合中。查询该集合也是通过http收到一个XM... 阅读全文
posted @ 2012-09-03 17:02 沙耶 编辑
摘要:Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。 Lucene是一套用于全文检索和搜寻的开源程式库,由Apache软件基金会支持和提供。Lucene提供了一个简单确强大的应用程式接口,能够做全文索引和搜寻,在Java开发环境里Lucene是一个成熟的免费开. 阅读全文
posted @ 2012-09-03 16:48 沙耶 编辑
摘要:1. ORACLE SELECT * FROM TABLE1 WHERE ROWNUM<=N HQL: from table1 t order by t.createTime desc where rownum<=n2. INFORMIX SELECT FIRST N * FROM TABLE13. DB2SELECT * ROW_NUMBER() OVER(ORDER BY COL1 DESC) AS ROWNUM WHERE ROWNUM<=N或者SELECT COLUMN FROM TABLE FETCH FIRST N ROWS ONLY4. SQL SERVERSE 阅读全文
posted @ 2012-09-03 16:40 沙耶 编辑
摘要:1.得到字符串中的第一个字符的 ASCII 值 代码 ASCII(STR) select ASCII('ABCD') FROM DUAL; 结果: 65 2.得到数值 N 指定的字符 代码 CHR(n) select CHR(68) from dual; 结果:D 3.连接两个字符串 代码 CANCAT(char1,cahr2) 和 || select concat('abc','defg') from dual; select 'abc'||'defg' from dual; 结果: 'abcdefg&# 阅读全文
posted @ 2012-09-03 16:31 沙耶 编辑
摘要:作用:merge into 解决用B表跟新A表数据,如果A表中没有,则把B表的数据插入A表;当处理大数据量是,该方法的效率很高。语法:MERGE INTO[your table-name] [rename your table here]USING( [write your query here] )[rename your query-sql and using just like a table]ON([conditional expression here] AND [...]...)WHEN MATHED THEN[here you can execute some update sq 阅读全文
posted @ 2012-09-03 16:24 沙耶 编辑
摘要:一优点(版本一)1、可操作的的分布式应用程序可以实现不同应用程序和在不同系统平台上开发出来的应用程序之间通信。与RMI、DOCM、CORBA最大的不同就是:Web Service 以 SOAP 作为基本通信协议从而避免了复杂的协议转换.2、普遍性、使用HTTP和XML进行通信任何支持HTTP和XML 技术的设备都可以拥有和访问Web Service,不同平台不同开发语言照样可以调用我们发布的Web Service.3、Web Service 甚至可以穿越防火墙,真正的自由通信一般要访问的Web服务器以及要访问的Web Service的客户端很可能位于防火墙后面,都默认关闭其它端口而开发HTTP 阅读全文
posted @ 2012-09-03 15:00 沙耶 编辑
摘要:说到多线程,不可不说线程池,C#中关于池的概念很多,今天来整理下ThreadPool的使用。 是的,如果你很懒,如果你的执行任务比较短,如果你不想对线程做更精细的控制,那么把这些繁琐的东西丢给线程池吧。一:ThreadPool好了,下面看看TheadPool下有哪些常用的方法。1:GetMaxThreads,GetMinThreads 首先我们肯定好奇线程池到底给我们如何控制线程数,下面就具体的看一看。 1 class Program 2 { 3 static void Main(string[] args) 4 { 5 int... 阅读全文
posted @ 2012-09-03 10:14 沙耶 编辑

点击右上角即可分享
微信分享提示