[問題] 比較List<>和DataTable資料差異?

看板C_Sharp (C#)作者 (1+1≠2)時間11年前 (2014/04/07 22:51), 編輯推噓2(205)
留言7則, 2人參與, 最新討論串1/1
有一個資料庫定時會將資料拋出至某個TableA(因為此資料庫一般使用者無法存取) 拋出的時間尚在跟使用者確認(Maybe 1 小時一次) 如今,有個TableB會將TableA的部分欄位資料取回(可能會follow上述拋出的時間) 假設Table有A,B,C,D,E,F,G欄位(A為主鍵),由TableA取回的僅有A,B,C欄位 TableB的G欄位,會透過一個TXT文字檔塞入 文字檔格式 apple01 <--A主鍵 apple08 <--A主鍵 F08 <--G欄位 banana07 <--A主鍵 pc951dx <--A主鍵 C05   <--G欄位 以上述為例, TableB如果有前兩行A主鍵的話,G欄位則為F08 TableB如果有第3.4行A主鍵,則G欄位為C05 因為TableA有可能會比文字檔先進TableB,文字檔也有機會比TableA先進TableB 那是不是只能在塞入每筆資料前,先對DB做Select在做insert或update? 問題一:如果文字檔的每個G欄位前面有30~50個A欄位,不就要做30~50次SELECT ? 目前的作法是,將讀到的每一行塞入List<>,且當我讀到G欄位時, 使用SELECT * from Table where A IN('','')去判斷Table是否有資料, 假設List有5筆,select回傳DataTable為0筆(代表TableB無資料), 則使用Insert塞入TableB 問題二:如果select後回傳只有3筆,實際List有5筆(代表有2筆TableB無資料), 那麼我要怎麼去抓出是哪2筆在TableB無資料?使用List<>和DataTable比較? 那我該轉成相同的容器再使用foreach比較嗎?還是...? 還是有比較好的處理方式? 因為總覺得都一直在QueryDB,希望可以減少QueryDB的次數 麻煩各位前輩指點,謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.173.151.87 ※ 文章網址: http://www.ptt.cc/bbs/C_Sharp/M.1396882312.A.14E.html

04/07 23:29, , 1F
寫成store procedure 把你的資料邏輯寫在裡面...
04/07 23:29, 1F

04/07 23:31, , 2F
定義結果集 例如 回傳1 就是 XX 2就是XXX 以此類推
04/07 23:31, 2F

04/07 23:31, , 3F
程式在呼叫的時候就是把呼叫SP的結果依結果集去處理
04/07 23:31, 3F

04/07 23:32, , 4F
程式裡可以用enum的方式去做
04/07 23:32, 4F

04/07 23:32, , 5F
資料庫的話 就寫個簡單的文件紀錄一下 或者要記在table
04/07 23:32, 5F

04/07 23:33, , 6F
也可以 避免到時候忘記結果的意義是什麼
04/07 23:33, 6F

04/09 00:31, , 7F
老實說有點看不太懂,否可用merge(DB or table)處理?
04/09 00:31, 7F
文章代碼(AID): #1JGhk85E (C_Sharp)
文章代碼(AID): #1JGhk85E (C_Sharp)