- 博客(33)
- 收藏
- 关注
原创 Data Provider DataDirect
最近发现了一个高性能的数据访问组件:DataDirect.网址:http://www.datadirect.com/index.html.性能远远优于ADO.NET, 支持Oracle, Sybase, DB2, SQL Server.Repository h
2011-09-23 09:21:08
826
原创 Visual Studio Database Project
对于数据库设计,以前一直使用的是ER-Win和PowerDesigner, 也用过Visio,只记得很早就在VS里有一个DatabaseProject模板,可能是懒惰吧,几乎没有关注过这个东西,只是最近有一个项目从其他公司转过来了,数据库设计正好用的是这个DatabaseProj
2011-08-10 14:32:38
1455
原创 Visual Studio一些小技巧
1. Ctrl+Tab 预览已打开的项目程序2. Ctrl + Alt + P Attach to Process3. 输入语法关键字,例如“foreach”,并点击两下Tab 键,VS 2010 便会自动完成相应的语法结构4. 在编写UI代码时,有时我们
2011-08-09 20:26:56
452
原创 自己动手实现一个简单的Ajax
<br /> 尽管Ajax(Aysnchronous Javascript and XML)不是一种标准化的技术,也不是一个全新的理念,但它确实已经以很快的速度改变了Web的访问体验,提供了一种相比于传统Web体验来说更流畅、更无缝的交互模型。<br /> Microsoft在IE5中初次引入了XMLHttpRequest对象,XMLHttpRequest是Ajax技术的关键功能,该对象允许Javascript生成服务器请求并使用变量返回信息。它可以接收任何形式的文本文档,而
2011-01-08 17:41:00
858
原创 行为模式-访问者模式
<br />访问者模式(Visitor)表示一个作用于某对象结构中的各元素的操作.它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作.<br />可以这么理解,访问者模式实际上是分离了容器结构中的元素和对这些元素进行操作的行为,然而容器对象就象是个大染缸,本来有各种鲜明类型的对象一旦放入后,再取出时,这些类型就消失了,这时我们就可以使用访问者模式来加以处理.<br /> publicinterfaceIVisitor<br /> {<br /> void Process
2010-07-17 11:52:00
407
原创 行为模式-模板模式
<br />模板模式(Template)是比较简单的设计模式之一,但它却是代码复用的一项基本的技术,在类库中尤其重要.所以模板模式可以理解为定义一个操作中算法的骨架,将一些步骤的执行延迟到其子类中.模板使得子类可以不改变一个算法的结构即可重定义该算法的某些特定处理步骤.<br />变化一直以来都是软件设计的永恒话题,在XP(极限编程)编程中提倡拥抱变化,积极应对.如何更好的去抓住变化点,应对变化,如何更好的提高代码复用,通过学习模板模式,您应该有一个新的认识.<br /> publicabstract
2010-07-16 22:35:00
375
原创 行为模式-策略模式
策略模式(Strategy)面向接口编程是面向对象编程中一个最重要的原则,根据封装的原理,我们常常将易于变化的部分进行抽象,定义为接口.对于调用者而言,只需要知道接口的外部定义即可,具体的实现则不用理会.在设计模式中,策略模式就是这样的一个面向接口编程的最佳体现,它进行抽象的
2010-07-16 00:18:00
294
原创 行为模式-状态模式
<br /> 状态模式(State)在实际应用中使用的比较多,一般用于”状态的切换”,因为我们经常会使用if else进行状态切换.如果针对状态的这样判断切换反复出现,我们就要联想到是否可以采取状态模式了.<br /> 不只是根据状态,也可以根据属性.如果某个对象的属性不同,对象的行为就不一样,这点在数据库系统中出现的频率比较高,我们经常会在一个数据表的尾部,加上一个属性含义的字段,用以标识记录中一些特殊性质的记录,这种属性的改变又是随时可能发生的,就有可能要使用状态模式.<
2010-07-15 00:12:00
472
原创 行为模式-观察者模式
<br /> 观察者模式(Observer) 定义对象间的一对多个关系,当一个对象的状态发生变化时,所以依赖它的对象都会得到通知,并自动更新.<br /> 观察者模式完美的将观察者和被观察的对象分离开,举个例子:用户界面可以作为一个观察者,业务数据是被观察者,用户界面观察业务数据的变化,发现数据变化后,就显示在界面上.面向对象设计的一个原则是:系统中的每个类将重点放在某一个功能上,而不是其他方面.一个对象只做一件事情,并且将他做好.观察者模式在模块之间划定了清晰的界限,提高了
2010-07-14 23:45:00
393
原创 行为模式-备忘模式
<br /> 备忘模式(Memento)在不破坏封装性的前提下,捕捉一个对象的内部状态,并在对象之外保存这个状态,这样以后就可以将这个对方恢复到保存的状态.可以使用序列化将保存的状态类序列化为本地文件,这样可以持久化保存当前状态.如果用`一个接口来让其它对象直接得到这些状态,将会暴露对象的实现细节并破坏对象的封装性.<br /> publicclassTarget<br /> {<br /> publicint Number;<br /> <br />
2010-07-13 23:37:00
291
原创 行为模式-中介者模式
<br /> 中介者模式(Mediator) 使用一个中介对象来封装一系列对象的交互行为,中介者模式可使各个对象之间不需要显示的引用,降低耦合度,并且可以独立改变之间的交互.<br /> 各个对象之间的交互操作非常多;每个对象的行为操作都依赖彼此对方,修改一个对象的行为,同时会涉及到修改很多其他对象的行为,如果使用中介者模式,可以使各个对象间的耦合松散,只需关心和中介者的关系,使多对多的关系变成了一对多的关系,可以降低系统的复杂性,提高可扩展性.<br /> publi
2010-07-13 00:25:00
435
原创 行为模式-迭代器模式
<br /> 迭代器模式(Iterator) 提供一个方法用于顺序访问一个集合中的各个元素,而不需要暴露该集合的内部表示.<br /> 集合对象拥有两个最基本的功能,即存储数据和遍历集合中的每一个数据.迭代器模式为遍历不同的集合结构提供一个统一的接口,从而支持同样的算法在不同的集合结构上进行操作.<br /> .NET中提供了两个接口,分别为IEnuerable和IEnumator,这就为实现迭代器提供了极大的便利.
2010-07-12 23:48:00
279
原创 行为模式-解释器模式
<br />解释器模式(Interpreter) 用于定义语言的文法,建立一个解释器来解释该语言的句子. 它描述了一个语言解释器是如何构成的.<br />当有一个语言需要解释执行,并且你可将该语言中的句子表示为一个抽象语法树时,可使用解释器模式.例如:<br /> publicclassContext<br /> {<br /> } // class Context<br /> publicinterfaceIExpression<br /> {<br />
2010-07-11 23:15:00
283
原创 行为模式-命令模式
<br /> 命令模式(Command)将一个请求封装为对象,从而使你可用不同的请求对客户进行参数.对请求排队或者记录日志,以及支持可撤销的操作.也就是说将功能封装成对象.对象的激发者和接收者都不需要了解命令的执行过程.从而消除了激发者和接收者之间的耦合.为程序提供了更清晰的结构.实际运用中通过将系统的命令封抽象成一个接口所有的命令都是这个接口的实现.<br /> 为了给命令模式一个整洁清晰的结构,命令模式通常和工厂模式一起使用.采用一个工厂对命令对象的建立进行管理,减少命令
2010-07-10 00:11:00
511
原创 行为模式-职责链模式
<br /> 职责链模式(Chain of Responsibility)使多个对象都有机会处理请求,避免请求的发送者和接收者之间的耦合关系,将这些对象链成一个链,沿着这条链传递请求,直到有对象能够处理请求为止。<br /> 无法预测请求处于那种类型每一个类碰到其不能处理的请求就放弃处理,从而降低了耦合性,但也带来的效率的损耗。<br /> publicclassRequest<br /> {<br /> publicint Type { get;
2010-07-09 00:30:00
342
原创 结构性模式-代理模式
<br /> 代理模式(Proxy)是通过给一个对象提供一个代理,由代理对象控制对原对象的引用.如果由于一些原因,一个对象不能或者不想直接引用另一个对象.这时可以通过一个代理对象建立在客户端对象和目标对象之间的引用关系.例如:<br /> publicclassProcess<br /> {<br /> publicvoid Add()<br /> {<br /> }<br /> }<br /> publicclassProx
2010-07-07 23:48:00
266
原创 结构性模式-享元模式
<br /> 享元模式(Flyweight)通过共享一个元类,解决避免大量相同内容的小类而引起的系统开销.面向对象的原则是一切都是对象,但如果真的这样使用起来,那对象可能多的吓人.例如字处理软件,如果把每一个字都看成一个对象.无疑会消耗大量的内存.这时可以通过设计一个元类,封装可共享的类,另外还有一些特性取决于应用,是不可共享的.这也是享元模式中内部状态和外部状态要解决的问题.<br /> 可以先做一个原始模型,根据不同的场合和环境,再产生具体的模型.很显然,在这里需要产生不
2010-07-06 23:49:00
314
原创 交叉查询
<br /><br />SELECTstudent_key,<br /> SUM(CASEcourse_keyWHEN 1 THENmarkelse 0 end)AS'English',<br /> SUM(CASEcourse_keyWHEN 2 THENmarkelse 0 end)AS'Maths',<br /> SUM(CASEcourse_keyWHEN 3 THENmarkelse 0 end)AS'Physics'<br />FROM Score<br
2010-07-06 01:56:00
290
原创 结构性模式-外观模式
<br /> 外观模式(Facade)主要是为系统中的一组接口提供一个统一的界面,通过定义这样一个高层的接口使系统的使用更加容易,外观模式重在于思想.例如在应用程序中如果用到访问数据库,那么当用户从SQL Server数据库切换到Oracle数据库时,如果没有提供统一的数据库访问接口,这时可能需要进行大量的代码修改.或者维护多个组件的版本.通过使用统一的接口,切换数据库时只需要修改相关的配置参数,不需要任何多余的修改.例如:<br /> publicclassFacade<br />
2010-07-06 00:40:00
312
原创 结构性模式-装饰模式
装饰模式(Decorator)用于给动态给对象添加一些额外的职责.例如你的一个方法用于向文件中写入数据,那么你希望添加一些功能在这个方法上,例如在写前打开文件,写后关闭文件,例如: publicinterfaceILog { void Write(); } // interface ILog publicclassFileLog : ILog { publicvoid Write() { //
2010-07-01 23:40:00
330
原创 结构性模式-组合模式
<br /> 组合模式(Composite)将对象组织成树状结构,以表示整体-部分的层次结构.使单个对象和组合对象的操作具有一致性.例如:<br /> publicinterfaceIComposite<br /> {<br /> int Id { get; set; }<br /> string Name { get; set; }<br /> <br /> void Add(IComposite source);<br
2010-07-01 01:36:00
314
原创 结构性模式-桥接模式
<br />桥接模式(Bridge)用于将抽象部分和实现部分分离开来,使其相互独立,可以各自变化,又可以动态的进行组合.<br /> 例如:人分为男人、女人, 其又有行为吃饭、睡觉等,如何将其通过某种方式动态绑定,而不是固定的进行绑定,就可以使用桥接模式,如: <br /> publicinterfaceIPerson<br /> {<br /> string Query();<br /> } // interface IPerson<br /> p
2010-06-30 01:40:00
275
原创 获得自增列的值
<br />SQL Server中获得自增列的值有三个方法,分别为:<br />1. IDENT_CURRENT: 返回为某个会话和作用域中指定的表或视图生成的最新的标识值.<br /> 语法: IDENT_CURRENT("table_name")<br />2. @@IDENTITY: 返回为跨所有作用域的当前会话中的某个表生成的最新标识值.<br /> 语法: @@IDENTITY<br />3. SCOPE_IDENTITY: 返回为当前会话和当前作用域中的某个表生成
2010-06-29 01:24:00
705
1
原创 结构性模式-适配器模式
<br />适配器模式(Adapter)主要是用于将一个类的接口转化为使用者希望的另一个接口.使原本因为接口不兼容而不能一起工作的类可以一起工作.<br /> 在软件开发过程中经常会遇到这类问题,在新的项目中使用现有的一些组件,而这些组件的接口与新的项目的接口不一致,如何使用现有的运行良好的代码,而又能满足新项目的接口规范.这就可以通过适配器模式来实现,例如:<br /> publicclassOldClass<br /> {<br /> publicstring
2010-06-29 01:00:00
263
原创 创建模式-原型模式以及单态模式
<br /> 原型模式(Proto)是创建一个对象,并通过拷贝这个对象来创建新的对象。<br /> 浅拷贝复制对象的基本类型,对对象类型不进行拷贝,只是产生引用。<br /> 深拷贝复制对象的基本类型,以及对象类型。<br /> .NET提供了MemberWiseClone方法以及ICloneable接口用于实现浅拷贝以及深拷贝,例如:<br /> publicclassPerson<br /> {<br /> pub
2010-06-27 15:19:00
243
原创 分页存储过程
<br /><br />自己写的一个SQL Server分页存储过程<br />CREATEPROCEDUREemployee_query<br /> @page_index int,<br /> @page_size int<br />AS<br /> SETNOCOUNTON<br /> <br /> DECLARE@countINT<br /> SET@count=(@page_index- 1)*@page_size<br /> <br />
2010-06-26 19:20:00
436
原创 C#调用Oracle存储过程并返回结果集
1.创建一个存储过程:createorreplaceprocedure GET_PERSON( RC1 outsys_refcursor, RC2 outsys_refcursor)isbegin open RC1 for select * from PERSON; open RC2 for select * from PERSON;end GET_PERSON;2.C#代码OracleConnection conn = new OracleConnection("Data Sou
2010-06-26 19:13:00
2475
原创 创建模式-生成器模式
生成器模式(Builder)将一个复杂对象的创建与表示分离开,对其复杂的创建过程和部件进行解耦,使同样的创建过程可以创建不同的表示. 如果当你的对象的创建过程可以和每个部件的创建过程分离开,并且可能通过组装不同的创建部件可以生成不同的对象. 如同生成一个汽车,你可以通过不同的组装方式来创建一个不同类型的汽车. publicinterfaceIBuilder { void BuildEngine(); // 发动机
2010-06-26 17:50:00
318
原创 创建模式-工厂模式
<br />简单工厂模式又叫静态工程模式,它主要是使用一个工厂类根据传入的参数来创建一个继承于同一个基类的多个不同子类的实例。<br />假如你需要编写一个数据访问模块,用于支持对Sql Server、Oracle等多种数据库的支持,就可以考虑使用工厂模式来完成,例如:<br /> publicinterfaceIDataAccess<br /> {<br /> int ExecuteNonQuery(string sql);<br /> } // interface I
2010-06-26 11:58:00
450
原创 DataReader和DataSet的区别
1. 获取数据的方式 DataReader为在线操作数据, DataReader会一直占用SqlConnection连接,在其操作中其它操作不可以再使用SqlConnection连接对象。 DataSet为离线操作数据,DataSet会将数据一次性读入内存,然后断开连接,这是其它操作就可以使用SqlConnection连接对象。 由于DataReader一次只读取一行数据,所以占用内存较小。但DataReader为只进的,也就是只能单方向向前读取,如果你想回头去读取上一条数据是不允许的。
2010-06-24 14:44:00
5074
原创 数据库性能调整
<br /> 数据库性能调整是一项长期的且极具挑战性的工作,它可以很大程度的展示你的能力,遵循一个系统的方法来调整数据库性能尤其重要.可以参照以下方面:<br /> 1.正确的设计数据库结构,尽可能在数据库规范和可用性方面寻找一个平衡点,不可一味的强求设计规范,更不可将其弃之不顾.很多数据库的性能隐患都是在数据库设计阶段埋下的.<br /> 2.优化数据库访问的SQL代码.将消耗资源的SQL代码尽量封装成存储过程,在经常使用的表上创建索引时一定要慎重.<br /> 3.调整I/O系统
2010-06-23 21:39:00
546
原创 ASP.NET应用程序连接Oracle的问题
再Windows XP上写好的ASP.NET应用程序部署到IIS上,连接不上Oracle10g数据库,提示:System.Data.OracleClient Requires oracle client software version 8.1.7 or greater。因为在调试环境是可以连接上的,所以考虑可能是IIS权限设置问题。试着将ASP.NET用户添加到了Administra
2010-05-20 17:38:00
405
原创 表达式解析-后缀表达式
引言 前一段时间,因为需要在产品内部的脚本解析程序中引入表达式解析功能,研究了一下表达式解析的常用方法. 表达式解析是程序设计语言中最基本的功能之一,我们日常使用的一般为中缀表达式,然而中缀表达式的解析比较复杂,在计算机中的解析一般是将中缀表达式转化为后缀表达式(又叫逆波兰表达式),然后进行解析. 概念 中缀表达式:通用的算术以及
2010-04-16 23:51:00
2141
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人