看板 C_Sharp 關於我們 聯絡資訊
※ 引述《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
tomex:嗯,愈上源解決愈好。甚至,該欄位本就該設定not null預值0 03/30 10:33
tomex:我以前跟人家合作,超討厭那種db定義不嚴謹,導致下游if連篇 03/30 10:33