台灣最大程式設計社群網站
線上人數
1263
 
會員總數:242636
討論主題:187614
歡迎您免費加入會員
討論區列表 >> C# >> C# 撈取資料庫資料
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
C# 撈取資料庫資料
價值 : 20 QP  點閱數:446 回應數:8

樓主

小K
門外漢
0 11
156 20
發送站內信

各位前輩好 :
使用者有需求需要撈取資料庫資料(進貨單),作為報表..
我是一筆撈資料出來,假設總共100筆資料依照單別(A001)、單號(A002)、單身序號(A003)一筆,正常來說序號(A003)是0001-0100,但實際上會有跳號的情況,就是全部100筆資料,但最後一筆序號是0110,其中序號0090-0091這10筆資料是空白的,原程式設計可以允許跳一號,
EX : (1)序號0001 0002 0004 0005 0006,程式還是可以跳過0003撈取下一筆(0004)的資料,利用下列程式numcount去判斷。
若是(2) 序號 0001 0002 0005 0006,這樣的話程式就會跳出(Exception ex)的訊息,因為撈不到資料
簡單說該如何將程式寫成可以連續跳號(例如(2)這個範例)
請問需要怎麼修改? 或者其他方式去寫這個程式呢?

謝謝各位~



搜尋相關Tags的文章: [ 資料庫資料筆數跟序號不相等 ] ,
本篇文章發表於2018-02-21 11:35
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
回應

春天
檢舉此回應
真奇怪的搜尋方式 要產生報表一次Select出來不就好了
本篇文章回覆於2018-02-21 12:05
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
不錯的參考

小羊窒息
捐贈 VP 給 小羊窒息 檢舉此回應
有考慮用group by的方式直接撈所有的資料嗎??

好比以下的寫法:
"SELECT A003, COUNT(*) FROM a_table WHERE A001 = @SinglesName AND A002 = @SingleNumber group by A003";


(資料表的資料量非常大的話大概就不適合了)
本篇文章回覆於2018-02-21 16:55
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
不錯的參考

風燭殘年
捐贈 VP 給 風燭殘年 檢舉此回應
要撈100筆的話就下 TOP 100 就行了不是嗎!?
本篇文章回覆於2018-02-22 16:21
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

小K
檢舉此回應
我在講仔細一點...
今天有一張銷貨單 購買品項可能有數十筆至數百筆
然而單身在資料庫的資料呈現方式如下
單別(A001) 單號(A002) 序號(A003) 品號 金額 數量 總額
ABC 20171231001 0001 A產品 5 4 20
ABC 20171231001 0002 B產品 4 5 20
ABC 20171231001 0003 C產品 6 5 30
所以才一開始會去 SELECT COUNT(A003) FROM A_table
purthcount = 上面SQL計算出來的數字
讓for (i = 1; i <= purthcount ; i++)
但今天是上列表格序號這部分若 0001 0002 0003 ...以此類推,程式不會有問題,或者 0001 0002 0004 0005,0003這筆被刪掉了...程式也可以順利跑出來
若是 0001 0004 0005 0006 中間跳號跳超過2筆以上就會導致程式錯誤,因為在抓0002的時候,會進入下列這一段程式碼,所以會自動多增加1號,直接去抓0003的資料,但由於0003也沒資料,程式也不會再回去判斷,所以程式會有錯誤

本篇文章回覆於2018-02-22 16:35
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
最有價值解答

小羊窒息
捐贈 VP 給 小羊窒息 檢舉此回應
首先, 沒資料要跳下一筆, 不需要再i++了...(因為for迴圈已經自動在累加了)

再來, 要直接繼續撈下一筆應該是在 purthcount++; 之後直接加一行continue;


由於你只貼了片段(沒人知道你後續到底是什麼樣的寫法),
只能推測是 j ++之後的部份造成錯誤...


(天曉得你的Exception訊息寫了什麼)
本篇文章回覆於2018-02-22 17:13
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
回應

風燭殘年
捐贈 VP 給 風燭殘年 檢舉此回應
既然在資料庫中可以透過 單別(A001) 單號(A002) 來抓取到資料
何必一定要執著在先取得所有筆數,然後再透過迴圈一筆一筆的將資料取出
select * from A_table order where A001= 'AAA' and A002='BBB' ORDER BY A001, A002, A003
這樣取出來的資料就依照 單別(A001) 單號(A002) 序號(A003) 排序,然後再塞到 DataTable 裡面
如此不就不需要跑 for 迴圈了不是嗎...

本篇文章回覆於2018-02-22 20:33
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
作者回應

小K
檢舉此回應
TO 小羊大
按照小羊大的建議,目前匯出資料後,資料都有正常匯出,只是會有EXCEL空白列的問題,非常感謝~
我花了點時間去了解一下break return continue等用法

TO 風蠋大
您說的方法,我會再試試看!!
謝謝您的建議,但由於工作性質非單純coding都需要一點時間去嘗試後,才能回應,不好意思!
本篇文章回覆於2018-03-05 11:33
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
作者回應

小K
檢舉此回應
TO 小羊大

空白格子的問題,我已經自行解決了~ 謝謝您的建議 !
本篇文章回覆於2018-03-05 11:36
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.