發表文章

Entity Framework 裡的View,顯示結果不正確 (Entity Framework returns incorrect data from SQL Server view)

我們的專案中,針對某些join非常複雜且使用lambda不易除錯的報表,會先在SQL Server上寫成View或預存程序來呼叫。但某隻報表卻出現奇怪的狀況,原來View的資料是對的,在C#  Entity FrameWork程式碼內下中斷點,看到程式產生的SQL也是對的,但輸出的結果卻荒腔走板。 View的內容只是幾個Table的組合,沒有特別的地方 select COMPANY_CODE,  COMPANY_NAME,  GOODS from SELL_RECORD 1,蘋果,  IPAD 1,蘋果,  IPHONE 2.HTC,  HTC ONE 在EF內則變成 2,蘋果,  IPAD 2,蘋果,  IPHONE 2,HTC,  HTC ONE 後來查了文章  [ 出處1 ] [ 出處2 ],問題在於查詢的欄位內有COMPANY_CODE這個欄位是查詢結果相關table的第一個主索引鍵,但並不是 Query 結果的真正索引鍵。而Entity FrameWork在將查詢結果轉為物件的過程中,需要在查詢結果內找到有意義的Key值,任其自行推斷會發生恐怖的不測。 最後我們使用 SQL 2005以後即具備的 ROW_NUMBER 方式幫記錄排序,並產生流水序號CID供EF判斷。也別忘了在EF的模型檢式介面,手動將此欄位設定為主索引鍵並重新建置,才能發揮作用。 ROW_NUMBER () OVER ( ORDER BY SomeValue ) AS CID

使用chart.js 畫系統監控圖表

圖片
專案有個需求是可以觀察server 上資源的使用情形。本來習慣使用 hichart,但後來發現他的使用是要錢的,於是改用chart.js。 繪製動態圖表需要準備幾件事情: 一、取得資料來源:目前多用ajax取得資料。 二、資料有無依照時間序列變化:資料可能是依照時間變化跑的,或者只是依類別顯示。 三、要幫資料歸類出x軸(資料點的名稱)與y軸(數值變動)。 我們的專案是利用power shell 或 vbs 將伺服器監控的數據寫到SQL Server,再用Asp.net 網站讓管理人員查閱資料。作一隻簡單的泛型處理函式(ashx)將資料轉為json,讓chart.js讀取。 我們當初在紀錄資料時,每筆紀錄就包含日期、CPU使用率跟可用記憶體。很明顯這是隨時間序列變化的資料。搭配EF大概是這樣寫:  using ( xxxxxxxEntitiesdbm = new xxxxxxxEntities()) {                 string vid="OOOp_WEB";                 /*抓兩天以內的資料*/                 DateTime lastdate = DateTime.Now.AddDays(-2);                 var query1 = dbm.monitor_record                     .Where(o => o.Server_id == vid && o.Recdate >= lastdate)                     .Select  ( o=>...

無法啟用教育版的office怎麼辦

工作上常常遇到,學生的電腦無法 正確啟用學校下載的Office軟體。 有這樣的情形,通常是學生購買的筆電已經安裝過Office365或是筆電附贈的Office精簡版。 必須要徹底把這些原有Office移除,才能安裝校園版的Office。 不過光從控制台刪除再重開機,還是會移不乾淨。 請連至以下微軟的官方頁面(連結可能無法直接點選,請複製至瀏覽器的網址列): https://support.office.com/zh-tw/article/%E5%BE%9E%E9%9B%BB%E8%85%A6%E8%A7%A3%E9%99%A4%E5%AE%89%E8%A3%9D-Office-9dd49b83-264a-477a-8fcc-2fdf5dbf61d8?ui=zh-TW&rs=zh-TW&ad=TW 查看 選項 2 - 使用簡易修正程式工具完全解除安裝 Office 2016。 請點選畫面中的 簡易修正按鈕 將 Office 解除安裝。 確定移除且重新開機後,再安裝前次下載至您筆電中的Office。 軟體啟用作業需在校內進行,或透過學校的VPN連線認證後,再從校外執行。

提升前端安全性 檢查表

1.加上安全的header https://devco.re/blog/2014/03/10/security-issues-of-http-headers-1/ 2.頁面端傳遞變數時,將其編碼,以免有些參數跑掉了 透過javascript傳遞值,要再加上  encodeURIComponent() 做urlEncode 若使用    encodeURI()   不編碼符號包括:  ~!@#$&*()=:/,;?+' (轉引自 https://blog.longwin.com.tw/2010/01/javascript-encodeuri-component-utf-8-2010/ ) 3.不要相信前端傳遞的資料。關鍵的代碼需要在後端編碼過,再傳到前端。

regexp 測試網站

https://regex101.com/

Entity framework 攻略

有多重排序的需求,該怎麼作? .OrderBy(x => new { x.PROGRAM_CODE , x.LITERACY_CODE }).ToList(); 提升寫入速度 利用foreach新增多筆資料或刪除多筆資料時,將多筆資料塞到一個 list中,再利用RemoveRange()方法處理。同時不要每一筆紀錄就執行一次 savechange()。 也有人建議將偵測異動屬性關閉,但這樣會抓不到savechange筆數 dbContext.Configuration.AutoDetectChangesEnabled = false; 要追求極致效能,使用手寫sql等技巧,有以下的討論: https://www.thereformedprogrammer.net/entity-framework-core-performance-tuning-a-worked-example/ Entity framework 要如何 left join? (LINQ LEFT JOIN where clause) 此處的情境假設有個db實體為XEntities,主要表格為PROGRAMs,join SCHOOLs、PROGRAM_TYPE兩個表格。要找出 PLAN_FILL_RECORD 有沒有填寫紀錄。 因為 PLAN_FILL_RECORD 要指定只抓某年度的紀錄,因此年度的條件是放在 join 該行的 where 敘述中。若放在 on 的敘述,會變成 inner join。 此外,PLAN_FILL_RECORD 不一定有值,所以在on 之後會讓查詢結果加上一個 into 敘述(黃色部分),將以上的查詢結果帶到  pRes   之中。 接下來再用 from .... in  pRes.DefaultIfEmpty() 的語法查詢結果,這樣有結果則顯示資料,沒結果則帶出 left join資料表的欄位預設值。 最後用欄位投影方式,處理欄位有null時如何顯示。這裡為了讓資料維持強型別,定義了一個 OBJECT_SHOW物件來接收資料。 var query2 = ( from b in XEntities .PROGRAMs join e in  XEn...

C# 入門語法整理(字串函數)

常用字串函數 用途 回傳 .Tostring() 其他型別轉字串 字串 char sp = ‘,’; string someStr=”joe,alisa,tesla”; string[] array1 =someStr.split(sp) 把字串分割成陣列 字串陣列 .Trim() 清字串末尾的空白 字串 (“where a={0}”, str1) 字串格式化 字串 .replace(“ 目標字元 ”,” 取代後字元 ”) 取代某個字串 字串 string. Contains( "goodbye" ) 確認是否包含某個字元 bool string.IndexOf(“ 清華 ”, 0) 查出某字串自第幾個字元起是否包含要查詢的詞彙 Int ,表示所在位置, 不存在時,回傳 -1 string.Compare(" 字串 ", " 測試 "); // result = -1  string.Compare(" 字串測試 ", " 字串測試 "); // result = 0  比對兩個字串是否完全相符 不同 =-1 相同 =0 .ToUpper() 轉大寫 字串 .ToLower() 轉小寫 字串 .Substring(1, 2) 擷取某部分字串 字串 轉型別 ( 型別寫在前面 ) (int32)obj 求餘數 % Stringbuilder 類別 用於大量的字串串接,提高效能 Stringbuilder sb = new stringbuilder(); Sb.append(“xxxxxxxx”); 條件 ( 三元 ) 運算子 Stirng vColor...