作者diamondking (天剑流星)
看板C_Sharp
标题Re: [问题] 转型错误
时间Wed Mar 28 13:36:34 2007
※ 引述《Uihc (我 有我的倔强...)》之铭言:
: 我想计算某一白色商品库存,目前已卖出件数Query如下:
: "SELECT Sum(Amount栏位) FROM 销售资料表 WHERE Color栏位 = 'white'";
: 假设原商品数有10件,利用DataSet存放上述Query结果,
: 将已销售总计後的结果取出相减
: int White = 10 - Convert.ToInt16(myDataset.Tables["white"].Rows[0][0]);
: 现在的问题就是,当商品一件都没有卖出时,也就是
: int White = 10 - Convert.ToInt16(myDataset.Tables["white"].Rows[0][0]);
: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
: 已销售件数为0
: 会出现 物件不可以从 DBNull 转换成其他型别 的错误
: 想了半天,不晓得该怎麽做修正?
: 虽然利用 try/catch 处理InvalidCastException例外状况
: 但也只是让画面秀出有错误发生
: 我想做的是,就算是销售件数是"0",也能计算出库存哪...
: 所以想请大家给我一点方向或意见,谢谢 <(_ _)>
其实不用这麽麻烦,去多加那麽多判断在程式里…
只要改成:
SQL Server:SELECT IsNull(Sum(Amount栏位),0) FROM ....(略)
Oracle:SELECT NVL(Sum(Amount栏位),0) FROM ....(略)
即可。其实我觉得这问题是出在sum这个函式,当无资料时,不会自动显示成0,
所以直接在sql里解决掉会比较简洁。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 60.250.84.22
1F:推 tomex:嗯,愈上源解决愈好。甚至,该栏位本就该设定not null预值0 03/30 10:33
2F:推 tomex:我以前跟人家合作,超讨厌那种db定义不严谨,导致下游if连篇 03/30 10:33