摘要:有关分页 SQL 的资料很多,有的使用存储过程,有的使用游标。本人不喜欢使用游标,我觉得它耗资、效率低;使用存储过程是个不错的选择,因为存储过程是经过预编译的,执行效率高,也更灵活。先看看单条 SQL 语句的分页 SQL 吧。 方法1: 适用于 SQL Server 2000/2005 SELECTTOP页大小* FROMtable1 WHEREidNOTIN ( SELECTTOP页大小*(页数-1) idFROMtable1ORDERBYid ) ORDERBYid 方法2: 适用于 SQL Server 2000/2005 SELECTTOP页大小* FROMtable1 WHEREid
阅读全文
摘要:IFOBJECT_ID(N'dbo.p_show')ISNOTNULLDROPPROCEDUREdbo.p_showGO/*--实现分页的通用存储过程显示指定表、视图、查询结果的第X页对于表中主键或标识列的情况,直接从原表取数查询,其它情况使用临时表的方法如果视图或查询结果中有主键,不推荐此方法如果使用查询语句,而且查询语句使用了orderby,则查询语句必须包含top语句最后更新时间:2008.01.20--邹建 --*//*--调用示例EXECdbo.p_show@QueryStr=N'tb',@PageSize=5,@PageCurrent=3,@FdSh
阅读全文
摘要:1、数据绑定的问题:当DataGridView的DataSource绑定的为DataTable时,当DataTable的内容发生改变 时,DataGridView中的内容会自动跟随DataTable改变而不用重新绑定数据源;而把List<T>绑定到 DataGridView则不然,当List<T>的内容发生改变是,需要先设置DataGridView的DataSource属性为 new List<T>(),然后再把作过改动的List<T>重新赋于DataGridView的DataSource。(注:不能设 置DataGridView的DataSou
阅读全文
摘要:之前的文章“浅谈C#中的延迟加载(1)——善用委托”中介绍了三层结构中在Model层对实体类的属性实现延迟加载的方法,该方法利用C#中的委托来实现,最后虽然延迟加载的目的得以实现,但是给客户端(例如UI层)暴露了不必要的属性(一个委托对象,我使用了泛型的Fun类来实现)。这篇文章介绍一种方法来隐藏这个属性,同时又可以达到延迟加载的目的,更重要的是这一切都是在之前的基础上来完成的,不需要改变原来使用到实体类的地方的代码。 按照惯例,我们考虑一下想要我们的代码达到什么效果:首先在Model.Acticle(文章实体类)中的Category属性和原来一样,只在需要的 时候通过调用委托来获取文章所属分
阅读全文
摘要:啊~~最近的业余时间都用在修改博客上面了,主要是这段时间在网站的留言板上发现很多外国的垃圾广告,于是做了个“IP黑名单”的功能,留言和文章评论也都加了验证码,顺便把后台的代码整理了一下,希望新加的验证码不会对大家留言和发评论造成不便! 上一篇文章讲 到把实体类中需要实现延迟加载的属性声明为virtual,然后继承实体类做一个子类,在子类里面实现该属性,配合使用委托来实现比较完美的延迟加载(原 本的”模型层“依旧保持在最底层用于贯穿三层结构,同时又可以实现在实体类的属性里面访问到比他高层的”数据访问层“)。文章的最后依旧出现杯具,原因是 在对模型的属性实现延迟加载之前,这个属性可能由于我们业务的
阅读全文
摘要:很久以前就听过“延迟加载”这个东西,不过没有理解是什么意思,现在算是了解一二了,写点文章作为读书笔记,把自己的想法记录一下,希望对初学者帮助,不管是初学者或者高手如果发现文章那里写得不好或者有更好的思路和做法记得告诉我哦^^。文章打算写成两三篇,这个是第一篇。 在三层结构中我们通常会使用多一个叫做“模型层”的东西,这一层中最主要做的事情是把数据库中的表 (或者其他数据源,例如xml或者自己定义的一种数据格式)转成对应的类,例如有一个文章表,这时候在这一层就会有一个文章类;文章类的属性对应着文章表的列,例如文章标题属性对应文章标题列。 实体类和数据表一一对应是最简单的情况,这时候实体类和实体类是
阅读全文
摘要:之前我谈到,在普通情况下我们可以很轻松地写出过一个代理类,用来处理延迟加载的情况。当时给出了一个很简单的做法,也就是指创建基类,覆盖它的一些属性实现,类似这种:public class LazySomeClass : SomeClass{ public override int SomeID { get { return this.LazySomeID.Value; } set { this.LazySomeID.Value = value; } } public Lazy<int> LazySomeID { get; set; }} 不过我当时也提到,这么做可能够用,但是也有一些
阅读全文
摘要:explicit 和 implicit 属于转换运算符,如用这两者可以让我们自定义的类型支持相互交换explicti 表示显式转换,如从 A -> B 必须进行强制类型转换(B = (B)A)implicit 表示隐式转换,如从 B -> A 只需直接赋值(A = B)隐式转换可以让我们的代码看上去更漂亮、更简洁易懂,所以最好多使用 implicit 运算符。不过!如果对象本身在转换时会损失一些信息(如精度),那么我们只能使用 explicit 运算符,以便在编译期就能警告客户调用端示例: Codeusing System;using System.Collections.Gene
阅读全文
摘要:C#4.0关于缺省参数的新特性,相信大家都不会陌生。所谓缺省参数,顾名思义,就是在声明方法的某个参数的时候为之指定一个默认值,在调用该方法 的时候如果采用该默认值,你就无须指定该参数。和很多语言层面特性(语法糖)的实现一样,缺省参数也是编译器为我们玩的一个小花招。缺省参数最终体现为两 个特殊的自定义特性OptionalAttribute和DefaultParameterValueAttribute 。 目录 一、缺省参数的用法 二、实现缺省参数的两个特性:OptionalAttribute和DefaultParameterValueAttribute 三、直接通过OptionalAttribu
阅读全文