T-SQL中,有时判断一个变量是否为NULL时,有人可能会用到函数ISNULL,如: 

DECLARE @VAR1 VARCHAR(20)
DECLARE @VAR2 INT
IF ISNULL(@VAR1''= '' PRINT '@VAR1 is null.'
IF ISNULL(@VAR2-1= -1 PRINT '@VAR2 is null.'

这种用法其实是有问题的,再看: 

DECLARE @VAR1 VARCHAR(20)
DECLARE @VAR2 INT
SET @VAR1 = ''
SET @VAR2 = -1
IF ISNULL(@VAR1''= '' PRINT '@VAR1 is null.'
IF ISNULL(@VAR2-1= -1 PRINT '@VAR2 is null.'

很显然,@VAR1和@VAR2均已赋值且不为NULL。

再看更特殊的情况: 

DECLARE @VAR3 BIT
PRINT ISNULL(@VAR3-1)

打印出来的值是1,而不是-1,这是因为:@VAR3的类型是BIT,其可能值只有三个:0、1或NULL,如果给其赋0和NULL之外的值(此处是-1),均被认为是1。

用ISNULL函数判断变量是否为NULL,在特定上下文的业务逻辑中有可能是正常运行的,如上述@VAR1永远不会为'',@VAR2永远不会为-1的情况;还有一种情况,以@VAR1为例,如果开发人员确实希望IF分支中的语句不仅在@VAR1是NULL的时候执行,而且当@VAR1的值是一个空字符串('')时也执行。

变量是否为NULL的判断应该使用IS NULL: 

DECLARE @VAR1 VARCHAR(20)
DECLARE @VAR2 INT
DECLARE @VAR3 BIT
SET @VAR1 = ''
SET @VAR2 = -1
IF @VAR1 IS NULL PRINT '@VAR1 is null.' ELSE PRINT '@VAR1 is not null.'
IF @VAR2 IS NULL PRINT '@VAR1 is null.' ELSE PRINT '@VAR2 is not null.'
IF @VAR3 IS NULL PRINT '@VAR1 is null.' ELSE PRINT '@VAR3 is not null.'

IS NULL经常用于组成一个逻辑表达式出现在单个T-SQL语句的WHERE子句中,有些人在写存储过程时遇到控制流语句却不敢用了,而改用ISNULL函数,记之。

posted @ 2009-11-20 22:58 蜡人张 阅读(505) | 评论 (2)编辑
此刻,
我正在收看徐州公共频道的直播,
这是中国矿业大学建校100周年文艺晚会,
只是徐州公共频道,
未免让人失望,
日薄西山的煤炭行业,
怎么能引起这个功利的社会的关注,
即使是一个有历史的百年学府,
社会确是于矿大不公!
默默无闻,甘于奉献正是矿大人的品质,
矿大的一百年,
承受了太多了的寂寞,
甚至是屈辱,
但是,
历经风雨的她,
依然朴实地缓释着自己的能量,
矿大人的心中,有此当足矣!
矿大人从不张扬,
今天,让我们豪迈地向矿大说一声:
百岁生日快乐!



百年辉煌向未来,
乐观的人已经开始憧憬下一个百年,
其实,我们都还没有做好准备,
煤炭资源即将枯竭,
国务委员同志还让我们保持特色,
严肃一点说,
这是不负责任的,
任何生于特色的东西必将死于特色,
矿大需要进行转型,
这将是一个痛苦而无奈的抉择,
矿大应是学子与教师之矿大,
而非官僚之矿大,
应当明确这种选择权的归属。
不要让紧缺带来的暂时繁荣,
蒙蔽了我们的眼睛,
当我们还在处心积虑榨取煤炭仅存的价值时,
将失去的可能是我们的下一个百年。




posted @ 2009-10-18 22:13 蜡人张 阅读(221) | 评论 (4)编辑
无意中看到新浪上的一篇博文,
高调马云,警惕崩溃为自己企业的“负资产”》,
作者在拿阿里巴巴十周年庆时马云的朋克造型说事儿,
得到的结论似乎是马云应该谨言慎行,
至少作者认为马云这次玩得有点太high,
会有很多像作者本人一样接受不了,
事实上,如果作者对阿里巴巴高层更熟悉的话,
这篇博文的攻击性的覆盖面将更加广泛,
那个“反串性感女神玛丽莲·梦露的男演员”,
其实是阿里巴巴的CFO蔡崇信,
这哥们抬起胳膊做飞吻时露出的黑色腋毛,
肯定让作者想把隔夜饭都吐出来,
所以没有仔细辨认梦露的真面目,
后面还有一个拿着吉他身穿皮衣皮裤假意伴奏的家伙,
那是阿里巴巴B2B事业部的CEO卫哲,
也许不只这三个阿里巴巴的高层人物参加了这场做秀,
但我的内线消息只有这么多,
因为我根本懒得问其他更多的人都是谁,
这段视频在娱乐栏目出现之后,
好像并没有像作者所说“网络上的冷水转眼扑面而来”,
我的一个朋友看了视频只是跟我说了三个字“太搞了”,
是啊,除了“太搞了”就再也没有什么了,
那毕竟是阿里巴巴内部的晚会,
如果马云愿意又有什么不可呢?
但我还是忍不住猜测参加做秀的高管们是否都是自愿的,
但有一点可以肯定,
这种视频会被泄露出来,
一定是他们自愿的,
一如马云过冬论的内部邮件被媒体披露一样,
否则外界根本无从了解这些,
也就不存在这些所谓话题了,
所以,某些人纯粹是得了便宜卖乖。
阿里巴巴是个年轻的公司,
也是一个年轻人的公司,
26000名平均年龄27岁的年轻人,
他们收入较高、压力较大,
见识过太多的新鲜奇趣,
没有多少东西可以轻易刺激到他们,
这种情况下,杰克船长显然要出狠招,
其实,朋克造型并不算最狠的,
去年年会马云还曾戴上假发扮演白雪公主,
马还曾自曝在某次重要庆典上要跳钢管舞,
只不过上台前的最后一刻被死谏拦住而已;
他们各个区域的类似晚会同样非常雷人,
男扮女装衣着暴露的T台秀算是小儿科,
不过个人认为这些其实并不好玩,
真不知道这帮小白领们是怎么想的,
但是按照他们自己的说法,这叫简单、开放,
不认同这种文化的人显然不能够理解这些。
但是,这些并不能够成为外界担忧的原因,
阿里巴巴即使止步于现在,
它也已经可以成为互联网的一个传奇,
多年以后,即使阿里巴巴不存在了,
我们也应该承认阿里巴巴曾经是一个可以称得上伟大的公司。


另外,我想以一个小人物的视角谈谈阿里巴巴,
如一些评论所言,
阿里巴巴已经成功打造了一个电子商务的所谓生态链,
譬如,现在淘宝C2C吸引的年轻人成长之后,
会成为将来B2B的主要客户群体,
但电子商务这种贸易形势更多表现为一种服务,
而B2B上做服务的恰恰非常少,大多数还是实业,
所以这个链条是否畅通值得怀疑;
阿里巴巴现在主要营收应该是来源于中国供应商服务,
金融风暴来临之后,
中国对外出口遭受重创,
阿里巴巴大幅降低服务价格,
导致大批客户加入这个平台,
服务能否跟上是个大问题,
糟糕的大环境也会严重影响用户的信心,
况且原本的B2B平台就相对简单,
很难想象仅凭21套网站模版就能够帮助用户把外贸做好,
用户仅仅是在网站上使用多种外国语展示自己的商品,
最近的两个进步是:
使用可以中英互译的雅虎通与国外客户进行交流,
和让国外客户使用他们并不了解的支付宝进行支付,
但是用户与国外客户成交的大部分流程阿里巴巴基本没有参与,
不过据说阿里巴巴有意购买油轮介入远洋物流,
也许将来B2B相对幼稚的状况可以得到改善;
就文化来讲,
阿里巴巴的任何产品和服务的商业气息都太浓,
作为一个电子商务公司来说,
这本无可厚非,
但我总觉得在互联网上赚取利润应该是静悄悄的,
而不是大张旗鼓的,
最好不要让用户感觉到自己进入某个网站是来花钱的,
让用户自愿花钱才是最高境界,
SNS正在迅猛发展,
如果将来它们可以赚取高额利润,
或许可以为这一点做出佐证;
年轻人为主的人员结构也会带来一些问题,
他们往往缺乏足够的责任心,
而会将重心放在个人财富的积累上,
如果缺乏对客户、对社会的责任,
将严重损坏阿里巴巴的企业形象。
可以预见的几年之内,
淘宝B2C业务可能得到长足发展,
取代中国供应商服务成为主要营收来源指日可待,
事实上,阿里巴巴各项业务运行这么长时间以来,
收集了大量用户数据,
这几乎是中国互联网商业最为完整的数据,
这是一笔非常宝贵的资源和财富,
如果决策得当,
阿里巴巴必将大有可为。




posted @ 2009-09-24 21:21 蜡人张 阅读(219) | 评论 (1)编辑
一直以来,
我都不怎么招领导们待见,
应该是我自己的原因,
嘴笨,不会说话,
见到领导更不会说话,
领导们也会以为我不高兴和他们说话,
有人肯定会想,
怎么这小子一个人就演完了没头脑和不高兴?
反正已经有人用“高尚”一词来嘲笑我啦,
反正已经有人说我不会“钻营”啦,
其实我死得挺冤的,
我就是这样的一个人呀。
在老家呆着的时候,
如果来了熟人,
我都更愿意躲在自己的房间里,
其实我也想掏心窝子和领导们说说知心话啊,
领导也是人嘛,
和其他人没有区别的呀,
可我就是说不出,
和好朋友在一起,
我都可能担心没有话说冷场而惴惴不安,
常常把朋友告诉我的一件事,
原样再讲给同一位朋友听,
而且往往讲了一半,
恍然大悟就是这位朋友告诉我的这件事,
那个尴尬啊,
所以,还能让我怎么办呢?
有人可能会问,
不就是中国话嘛,
你又不是什么ABC,
怎么就不会说宁?
就是啊,
就算再不济,
电影电视上的台词,
总该能记得住吧,
什么大爷您吃了吗,
什么媞儿妈洗衣服哪,
就照这个说不就得了?
呵呵,还是很抱歉,
其实我不是一个演员,
我只是一个死跑龙套的,
我真的演不来。
每次我观摩别人演讲或讲课时,
那些口若悬河,舌灿莲花,
那些慷慨激昂,意气风发,
那种癫狂的状态真是让我神往得口水下流(略往字)啊,
天哪,这个演员真是相当地好啊!




posted @ 2009-09-23 22:23 蜡人张 阅读(222) | 评论 (6)编辑

在Word中可以通过下面的方法手动添加一个条形码:使用菜单“视图”——“工具栏”——“控件工具箱”打开控件工具箱,使用控件工具箱右下角的最后一个按钮“其它控件”,在弹出的列表中选择“Microsoft BarCode Control 9.0”,在文档中新添加的条形码上单击右键,使用邮件菜单“属性”打开属性对话框,设置Value和Style属性值即可显示相应的条形码。

还有另外一种可以添加条形码的方法,使用一些条形码字库,只要输入相应条形码的字符,并选择使用特定的条形码字体即可。

这里讨论的是第一种方法,而且应用的场景是一次性向一个Word文档添加多个条形码,此时手动添加不适用,可以考虑使用VBA完成添加条形码的操作。

在VBA for Word的编程参考资料里很容易找到这样的代码:

 

1 Set myCB = ActiveDocument.Shapes.AddOLEControl(ClassType:="Forms.CheckBox.1")
2 With myCB.OLEFormat.Object
3     .Value = False
4     .Caption = "Check if over 21"
5 End With

 

这是向Word文档中添加一个复选框的VBA代码,如果是添加一个条形码对象,代码是这样的:

 

1 Set myCB = ActiveDocument.Shapes.AddOLEControl(ClassType:="BARCODE.BarCodeCtrl.1")
2 With myCB.OLEFormat.Object
3     .Value = "S-102909211000001-12"
4     .Style = 7
5 End With

 

条形码上显示的字符串是“S-102909211000001-12”。

在C#中如何完成以上操作?

首先应当在项目中添加Microsoft.Office.Interop.Word引用,再添加对Office安装目录下的2052目录中的msbcode9.ocx的引用,后者在解决方案资源管理器中显示为BARCODELib,需要使用此命名空间对条形码的属性进行设置。

然后使用以下代码完成向Word文档中添加一个条形码:

 

 1         private void btnAddBarCodeControl_Click(object sender, EventArgs e)
 2         {
 3 
 4             Microsoft.Office.Interop.Word.Application CurWord = null;
 5             Microsoft.Office.Interop.Word.Document CurDocument = null;
 6             object mValue = System.Reflection.Missing.Value;
 7 
 8             object objFileName = Application.StartupPath + "/testdoc.doc";
 9 
10             object objReadOnly = false;
11 
12             CurWord = new Microsoft.Office.Interop.Word.Application();
13 
14             CurDocument = CurWord.Documents.Open(
15                   ref objFileName
16                 , ref mValue
17                 , ref objReadOnly
18                 , ref mValue
19                 , ref mValue
20                 , ref mValue
21                 , ref mValue
22                 , ref mValue
23                 , ref mValue
24                 , ref mValue
25                 , ref mValue
26                 , ref mValue
27                 , ref mValue
28                 , ref mValue
29                 , ref mValue
30                 , ref mValue
31             );
32 
33             object objOleControlType = "BARCODE.BarCodeCtrl.1";
34             
35             object objLeft = 20;
36             object objTop = 20;
37             object objWidth = 200;
38             object objHeight = 50;
39 
40             object comControl = CurDocument.Shapes.AddOLEControl(
41                   ref objOleControlType
42                 , ref objLeft
43                 , ref objTop
44                 , ref objWidth
45                 , ref objHeight
46                 , ref mValue
47             ).OLEFormat.Object;          
48             
49 
50             ((BARCODELib.IBarCodeCtrl)comControl).Value = "S-102909211000001-12";
51 
52             ((BARCODELib.IBarCodeCtrl)comControl).Style = 7;
53 
54             CurDocument.Save();
55 
56         }

 

 

上面的C#代码是由完成同样功能的VBA代码转换过来的,其它地方可能并无什么难理解之处,有两个地方需要说明一下——

1、AddOLEControl方法的第一个参数ClassType如何确定?语法提示告诉我们这是ActiveX控件的编程标识符,其实,这个编程标识符可以在VBA for Word编程参考资料中找到,文档主题即为“OLE 编程标识符”,常用控件的编程标识符列表如下:

 

要创建此控件 使用此标识符
复选框 Forms.CheckBox.1
组合框 Forms.ComboBox.1
命令按钮 Forms.CommandButton.1
框架 Forms.Frame.1
图像 Forms.Image.1
标签 Forms.Label.1
列表框 Forms.ListBox.1
多页控件 Forms.MultiPage.1
选项按钮 Forms.OptionButton.1
滚动条 Forms.ScrollBar.1
数值调节钮 Forms.SpinButton.1
TabStrip Forms.TabStrip.1
文本框 Forms.TextBox.1
切换按钮 Forms.ToggleButton.1

 

当然,对于条形码控件来说,它的编程标识符要特殊一些,没有办法,只能找找VBA方法中处理时使用的ClassType名称了。

2、comControl的类型是如何确定的?如果不确定它的类型,我们是无法设置该控件的Value和Style属性的。

确定该COM对象类型的过程是这样的,添加对Microsoft.VisualBasic的引用,监视察看Microsoft.VisualBasic.Information.TypeName(comControl)的值(在设置OLE控件属性之前),可以得到字符串"IBarCodeCtrl"(原理可以参照“获取System.__ComObject的真正类型”,不再赘述),在BARCODELib命名空间下恰好有名称为IBarCodeCtrl的接口。

如果要添加的是Office的常用控件,而不是条形码控件,方法类似。以添加一个文本框为例,objOleControlType应为"Forms.TextBox.1",察看Microsoft.VisualBasic.Information.TypeName(comControl)的值为IMdeText,要使用这个接口,应该添加引用Microsoft.Vbe.Interop.Forms,这个命名空间下包含了Office常用控件的接口,可以使用下面的语句为该文本框设置初始显示的字符串:

 

1 ((Microsoft.Vbe.Interop.Forms.IMdcText)comControl).Text = "inital value";

 

 

 

P.S. 有关C#以COM方式操作Word文档可以参见sharemeteor的一篇随笔:.NET1.1下,使用C#自动生成Word2003文档(通过操作COM组件实现)

 

posted @ 2009-09-23 16:39 蜡人张 阅读(619) | 评论 (1)编辑
很多年前,
听谢霆锋的《所有人是傻》,
多少是为标题吸引,
他的《不耐烦》,
又饱含多少年少轻狂……
后来,
听到陈奕迅翻唱罗文的《几许风雨》,
才发现,
虽然我们还在继续挣扎,
却已被岁月磨平了棱角,
我还算得上年轻,
可是我的心,似乎已经老了。
二十多年来,
战栗地活着,
努力过,也堕落过,
追逐平静,
却从未平静过,
追逐本身注定无法平静,
得到什么,
就要失去另外的什么,
也越来越害怕这种怪圈。
为什么不能不为名利而活,
为什么要由别人来评判自己,
你的内心还能够坚守多久?




posted @ 2009-09-20 22:24 蜡人张 阅读(230) | 评论 (1)编辑
     摘要: Lenovo S10 坏了,以前只是在网上看到过,S10有低温不能工作的问题,因此S10也被调侃为“10℃以上”,不过买了不到一年还是坏了。拿回来的时候,说是一开始电量显示不对,电池用完后插上电源就频繁重启,有时候没办法进系统。开机一看,停在磁盘检测的画面:One of your disks needs to be checked for consistency...  阅读全文
posted @ 2009-09-19 23:35 蜡人张 阅读(223) | 评论 (0)编辑
     摘要: 凌晨两点了,还在捣鼓虚拟机,教师节老师们吃不上饭,罪过可就大了。远程有点慢,还遇到个小问题,.netfx 3.5几次都没装上,看了下日志,好像是ghost里的.netfx 2.0有问题,想卸载之,提示无法卸载,找不到原始安装的msi文件,下载一个.netfx 2.0,exe文件直接解压,定位一下msi文件,卸载成功,重新装.netfx 3.5,这次很顺利。普洱茶淡了,洗洗睡了。Z~Z~~Z~~~7...  阅读全文
posted @ 2009-09-10 23:53 蜡人张 阅读(297) | 评论 (4)编辑
     摘要: 季羡林去世了…… 我读书不多,所以对季老了解很少,只是在他去世之后才通过一些悼念他的文章才对他有所了解,读了几篇他的散文随笔。所以,我不能在他的名字前面加上任何定语来称谓他,又或者,我不敢这样做,因为除了一些对他表示尊崇、惋惜的悼念之词之外,我还很看到一些关于他是否“大师”的争论。 这种争论来源于政治,来源于季老对于时代加诸于他身上的不幸的单方面容忍...  阅读全文
posted @ 2009-07-19 22:34 蜡人张 阅读(357) | 评论 (1)编辑
     摘要: 又到一年毕业时,昨天还在毕业论文答辩中经受着考验,今天就在学位授予仪式上品尝了收获。很难想象,很多同学在大学四年当中的那些愤懑和幽怨,今天竟能统统被欣喜与激动所替代。也许,大学里你们所学寥寥,甚至对学校、专业、老师颇有微词,但是今天,在你们即将离别的今天,很高兴看到你们忘却了这些,是的,今天,最猥琐的人都有理由去释然,都有理由被眷恋。你们毕业了,掌声和祝福送给你们!  阅读全文
posted @ 2009-06-25 14:30 蜡人张 阅读(424) | 评论 (3)编辑
     摘要: 呵呵,很多人都介绍过这个原型软件了,正在学习《信息系统分析与设计》和《Web应用程序设计》的同学们,你们可以试一下这个软件,至少看起来它还不错……original image at http://www.balsamiq.com/images/mockups_fpa.jpg好吧,我承认,发布这篇随笔的目的是为了获取该软件的License。这款软件的for Desktop版本...  阅读全文
posted @ 2009-05-03 17:18 蜡人张 阅读(1050) | 评论 (4)编辑
     摘要: 下载:DynamicColumnDemo.zip。 1、SQL Server 2000中如果不存在英文版的Northwind数据库,新建并使用Northwind_db0401还原一个; 2、修改web.config中appSettings节中的连接字符串:[代码]  阅读全文
posted @ 2009-04-01 19:21 蜡人张 阅读(1158) | 评论 (1)编辑
     摘要: 前一段时间花了一些时间搞了一个自己称为轻量级伪OLAP的东西,当然实现方法是不值一哂的野路子,甚至UI上用的一些名词都是用来糊弄不懂的人的,不要太当真,前台展示使用ExtJS + FusionCharts Free,看看效果吧(由于图片较大,排版需要,请单击图片在新窗口中查看图片):  阅读全文
posted @ 2009-02-07 19:16 蜡人张 阅读(2858) | 评论 (24)编辑
     摘要: 如何在Silverlight中绘制如图所示的半圆?  阅读全文
posted @ 2009-02-06 11:56 蜡人张 阅读(930) | 评论 (0)编辑
     摘要: 我的破烂PPC大概有四个功能:电话、短信、闹钟和看小说,如果无聊的时间超过5分钟,我一定会让它履行第四种功能,最近的小说是周瑟瑟的《北京的野花为谁开》。作者“系湖南省作协会员,湖南省青联北京特约委员。做过社会新闻记者、娱乐杂志主编,IT媒体策划。现居北京,为中关村软件企业管理者。”,里面一段关于管理软件现状的描述很有意思,摘录如下——  阅读全文
posted @ 2009-02-04 18:13 蜡人张 阅读(656) | 评论 (2)编辑
     摘要: SPAW Editor .NET Edition v.2乱用中介绍了一个HTML Editor,在使用这个Editor进行页面布局的时候可能希望使用代码控制编辑器的大小,例如在用户调整浏览器大小的时候,可能希望其中的Editor大小随着浏览器的变化而变化。SPAW Editor的默认width属性即是100%,所以我们需要考虑的是如何使用代码调整该控件的高度。OK,假设页面上有一个ID为spawM...  阅读全文
posted @ 2009-02-02 22:15 蜡人张 阅读(644) | 评论 (1)编辑
     摘要: 也许是今年发生的事情太多了,所以比以前要更关注时事,虽然面对一些既成的事实,难免要进行痛心的思考。昨天晚上关注了一下东方卫视播出的9.8特大尾矿库溃坝事故的后续报道,这起特大人为事故已经得到了认定,相关的责任人也进行了处理,但是其中的一些细节还是令人玩味:1、据报道,事故发生之前,附近居民中无人不知该尾矿库存在安全隐患;2、据报道,该矿的安全生产许早已被吊销,采矿许可也早已到期,但是该矿在利益驱使...  阅读全文
posted @ 2008-09-22 19:03 蜡人张 阅读(856) | 评论 (2)编辑
     摘要: 今年是第二次参加篮球赛了,还是没有小组出线 ,还是没有小组垫底,三场比赛得分8-8-6,还真是886了,第二次教工篮球赛!没有任何战术可言,没有突破,没有内线,太依赖外线,互相之间不信任,这样下去不会有什么改观的。尤其是今天,完全有机会赢下来的,结果还是输了,可惜。在场上跑着就纳闷对手这么差为什么就落后了呢,按照实力来说,我们平时三个经常一块玩儿的就能搞定对手的。为什么手感好的时候,认为该自己突破...  阅读全文
posted @ 2008-09-20 23:34 蜡人张 阅读(612) | 评论 (4)编辑
     摘要: HTML Editor有很多,比如常用的FCKeditor等,这些editor各有优缺点,在真正要用到的时候难免要费功夫比较一下。前一段时间,看见有人推荐SPAW Editor,于是到SourceForge下载了一个试用了一下。这个editor还是挺有特点的,比如可以浮动同时支持多个编辑区域、比较好的文件管理器(上传文件并管理)等。不过,之所以是".NET Edition"是因为这个editor最早是给PHP开发人员使用的,后来才推出的.NET Edition,.NET开发人员很少涉及到该editor,Google上很少能够搜索到该编辑器在.NET环境中使用的信息,更要命的是,该编辑器的帮助、代码注释等文档实在是非常之不完备,用起来很痛苦。开发人员将该款editor开源也着实不容易,而且可能他的主要精力还是集中在PHP那边,没办法,作为.NET开发人员的我只能乱用一下了。  阅读全文
posted @ 2008-08-23 21:50 蜡人张 阅读(1183) | 评论 (0)编辑