還記得坎尼在 自定固定長度流水號的方法 中有提到過
要取得新ID 必需先將目前ID最大值給傳入嗎?
坎尼的作法就是利用 T-SQL 語法中的 select max(id) from table 來取得最大值
而最近坎尼一直在改同事的程式,發現到一個怪現象
他們一樣和坎尼用 max 去抓取目前最大值 id
然後回傳的是 DataTable,接著再用 DataTable.Rows.Count 去判斷
if(DataTable.Rows.Count != 0)
ID = DataTable.Rows[0][0].ToString();
else
ID = "0";
有人看出哪不對勁了嗎?
大家先看一下下列美美的抓圖
知道為什麼坎尼要下第一個 select 語法嗎?
第一個 select 不是什麼東西都抓不到嗎?
沒錯! 就是什麼都抓不到!
此時若是把這個查詢塞進一個 DataTable 中,DataTable.Rows.Count = 0
那為什麼要提這個呢?
原因就在於
當我們用 max、min 、count、avg....等語法時
如果資料表內無資料
它仍然會回傳一個值 (count是回傳0,max min avg則是回傳null)
所以,上述的判斷條件式應該改為
if(DataTable.Rows[0][0].ToString() != "")
ID = DataTable.Rows[0][0].ToString();
else
ID = "0";
同樣的bug坎尼已經抓過數次 (還是不同的同事寫的 囧>
所以提出此觀念讓還不知道的人了解一下
以上測試環境皆以 MS SQL 2000 為基準
課後補充
坎尼prefer的作法是,用MS SQL裡的 IsNull來判斷 (Oracle是NVL)
這樣抓取資料的人也不用再去判斷來判斷去
語法是 select IsNull(max(ID) , 0) as MaxID from Table
訂閱:
張貼留言 (Atom)
Google Spreadsheet 裡用規則運算式
最近因為工作關係,遇到要用 Google Form 及 Google Sheet 所以研究了 Google Sheet 裡的一些 function 怎麼用 首先,分享一下如何在 Google Sheet 裡用規則運算 :D
-
今天坎尼去上課老師講了一題很有趣的題目 所以回到家坎尼就順手試驗了一下 I. XOR (exclusive OR) XOR 是邏輯運算子之一,定義為: 當兩數的值不同才為 true,相同則為 false 其他相關說明可以參考 維基百科:XOR II. 程式 以往的做法會宣...
-
好久沒開 Chart Control 議題了 剛好前陣子 Codeplex 出現可以輕鬆建立 Excel 檔案的 Library- NPOI 於是坎尼想說研究一下,看能不能把 Chart Control 匯出圖片到 Excel 中 沒想到只花了不到1小時就研究...
-
上個週末打開一個影片檔,發現字幕檔是中英文混合的,造成字幕吃掉畫面很大的空間, 打開字幕檔一看,果然每一段時間都有先英文後中文的字幕: 因此我想要自己作成「只有中文」&「只有英文」兩個字幕檔,但這個檔案有6418 行,如果要手動一行一行的刪除...
沒有留言:
張貼留言