随笔-468  评论-941  文章-3  trackbacks-22

使用2.0,就要使用2.0的新功能啊。下面记录两个今天的小发现
1.从字符转换成数字的最佳办法
1.1的时候,如果要从字符转换成数字,都会碰到一个如果字符不是规则数字怎么办?以前最好的办法是用正则验证。现在……最好也是用正则验证(汗……),但是在程序转换方面,有了比 Int32.Parse (String)更好的Int32.TryParse (String, Int32)。下面是sdk文档对这个的一些说明

public static bool TryParse (
 string s,
 out int result
)
参数
s
包含要转换的数字的字符串。
result
当此方法返回时,如果转换成功,则包含与 s 所包含的数字等效的 32 位有符号整数值;如果转换失败,则包含零。如果 s 参数为 空引用(在 Visual Basic 中为 Nothing),格式不正确,或者表示的数字小于 MinValue 或大于 MaxValue,则转换会失败。该参数未经初始化即被传递。
返回值
如果 s 转换成功,则为 true;否则为 false。

以后就都用TryParse吧!。

2.sql分页新方法
sql server2005增加了很多新函数,其中一个比较有意思的是ROW_NUMBER。使用这个函数可以给查询结果表中增加一个自动增长的连续的列。下面是sdk的具体说明
ROW_NUMBER
返回结果集分区内行的序列号,每个分区的第一行从 1 开始。
ROW_NUMBER ( )     OVER ( [ <partition_by_clause> ] <order_by_clause> )
备注
ORDER BY 子句可确定在特定分区中为行分配唯一 ROW_NUMBER 的顺序。

对sql语句分页的朋友可以立刻发现这个函数的价值。没错,以前,我们在分页存储过程中构造一个虚拟表来存放连续序号的做法,现在用这一个函数就可以。
一个具体的例子是
select *, ROW_NUMBER() OVER (order by ArticleID) as Pos
from dbo.ES_Article
这会给结果表增加一个新列Pos,里面的值为连续增长的序号。
有了这个,在用wher pos<max and pos>min来进行分页就非常简单了。

以后有机会要试验一下这个函数!

posted on 2006-08-06 17:32 Notus|南色的风 阅读(546) 评论(3)  编辑 收藏 所属分类: Happy Programming

评论:
#1楼  2006-08-07 09:45 | yzx110      
ROW_NUMBER() 用起来很死板,效率也不怎么好
不如在oracle里的那个rownumber
  回复  引用  查看    
#2楼  2006-08-08 11:22 | 沐枫      
>> 以前最好的办法是用正则验证。现在……最好也是用正则验证
不敢苟同。
这么简单的验证,用上那么个大家伙,不合算。
另外,Parse在没有tryParse之前,可以在前后加上try-catch。
  回复  引用  查看    
#3楼 [楼主] 2006-08-10 10:48 | Notus@再见,博格坎普      
to yzx110
只是觉得ROW_NUMBER()好玩,但是如果真的说用,还是要有一定勇气的,不知道有没有做过测试啊?

to 沐枫
是的,其实我这个写的有问题,很多场合根本就没办法验证,就传过来了.try-catch是1.1唯一的办法了,比较无奈,毕竟要写太多行代码了
  回复  引用  查看    

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      


相关链接: