發表文章

Angular使用筆記2_不能錯過的在Visual Studio跟VS Code好用插件

圖片
  Visual Studio Angular 2 Snippet Pack https://marketplace.visualstudio.com/items?itemName=MadsKristensen.Angular2SnippetPack Visual Studio Code Angular Snippets (Version 11) https://marketplace.visualstudio.com/items?itemName=johnpapa.Angular2 其他還有像是 Angular Language Service https://marketplace.visualstudio.com/items?itemName=Angular.ng-template Path Intellisense https://marketplace.visualstudio.com/items?itemName=christian-kohler.path-intellisense

T-SQL筆記16_如何查詢最近一次Table的異動以及DB各Table創建時間資訊

圖片
  如果要查最近一次DB中創建的Table 又或者想得知DB中每張Table被異動和創建的時間點 則可透過如下語句來查詢 1 2 SELECT name, object_id, create_date, modify_date FROM sys.tables order by create_date desc SELECT * FROM sys.tables order by create_date desc

T-SQL筆記15_三種分頁查詢寫法_避免Server壓力過大Loading等待太久(支援自SQL2000,2005,2012後)

圖片
 在網頁中通常做表格資料的呈現最怕就是資料量大到幾千筆甚至到萬筆查詢Loading過久,Server負荷不來的情況。 此時在網頁上通常會做一些分頁減輕查詢耗費資源與時間成本 (每頁一次查詢只先呈現10~20、30幾筆之類的分頁小批量查詢機制) 而不一次就要將上萬筆資料先全查出來,等loading轉圈圈1分鐘甚至到5~8分鐘過後網頁資料才出現。 有了上述的概念後接著就記錄一下常用到的透過SQL分頁查詢語法段落 這裡的目標結果TABLE可能會是一個join起來的table集合也可能是單一一個temp table 看實際應用情境 以我的情境是join的情況 我要套分頁機制的  目標結果Table 是來自於這段SQL 這裡pat_patNo為專利的流水編號 寫法1.用最硬解的SELECT TOP方式, 可支援SQL 2000的環境 1 2 3 4 5 6 7 8 9 10 DECLARE @PageIndex INT = 1 , @PageSize INT = 25 SELECT TOP @PageSize * FROM {目標結果 Table } WHERE ( {具唯一跟可排序性欄位} NOT IN ( SELECT TOP (@PageSize*(@PageIndex- 1 )) {具唯一跟可排序性欄位} FROM {目標結果 Table } ORDER BY {具唯一跟可排序性欄位} ASC / DESC )) //skip(@PageSize*(@PageIndex- 1 )) 條記錄 ORDER BY {具唯一跟可排序性欄位} ASC / DESC 寫法2.透過ROW_NUMBER()搭配OVER(ORDER BY 特定某個具唯一性跟可排序性的Field)跟BETWEEN來實踐 備註:ROW_NUMBER()是 自SQL Server2005開始就適用 具體寫法模式 1 2 3 4 5 6 7 8 9 10 11 12 13 DECLARE @PageIndex INT = 1 , @PageSize INT = 25 SELECT * FROM ( SELECT *, ROW_NUMBER() OVE...

Angular使用筆記1_Angular的歷史_Angular1跟Angular2比較

圖片
  Angular本身是由Google提出的一套base on MVC架構的 (可跟常見的後端程式語言PHP、.NET、NodeJS搭配開發) Web Application的開源JS Framework 主要特色在於可以對HTML透過指令方式做彈性延伸達成動態內容建構。 除了網頁應用也可以建構手機應用(跟Ionic 、RN搭配) 主要會在介紹到 Angular的歷史與版本演進 Angular1跟Angular2比較 Angular 開發工具介紹 Angular CLI Angular的使用場景 Angular的語法特點 Angular的歷史與版本演進 主要是在2009年由Misko Hevery 跟Adam Abrons兩個開發者設計出來的 Misko Hevery於2009年開始在Google工作 並且 於2012年由Google名義推出 Angular version 1.0 也就是AngularJS  A JavaScript MVW Framework   Extends HTML by adding attributes, tags, and expressions  Events Handling  Powerful Data Binding  Built-In Template Engine and Routing  Form Validations and Animations  Dependencies Injection etc. 於2016年9月則又釋出了Angular version 2.0  Modern, faster and highly scalable framework  One framework for web, mobile and desktop apps  Not an update to Angular1.x, but a complete rewrite  Written in Typescript  Simple and Expressive  Web components based architecture  Hierarchical Dependenc...

.NET Core第7天_MVC專案跟空專案創建出來比較_跟.net MVC專案做小比較

圖片
  這是.net core  空專案創建出來預設項目 .NET Core MVC專案創建方式 可以看到預設直接選擇MVC類型專案會幫我們自動建立出Model,Controller,View的folder 當中的HomeController.cs 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 using AppNetCore5MVC.Models ; using Microsoft.AspNetCore.Mvc ; using Microsoft.Extensions.Logging ; using System ; using System.Collections.Generic ; using System.Diagnostics ; using System.Linq ; using System.Threading.Tasks ; namespace AppNetCore5MVC.Controllers { public class HomeController : Controller { private readonly ILogger<HomeController> _logger; public HomeController (ILogger<HomeController> logger) { _logger = logger; } public IActionResult Index () { return View (); } public IActionResult Privacy () { return View (); } [ResponseCache(Duration = 0, Location = ResponseC...

T-SQL筆記14_sp_helpdb指令的使用_MSSQL:Could not allocate space for object 'X' in database 'Your Database' because the 'PRIMARY' filegroup is full

圖片
 通常出現這錯誤就代表你的DB空間已經滿了 這時無論你怎麼insert都會失敗然後跑出這錯誤 對DB右鍵->屬性->切至檔案後到自動成長/大小上限的[...]按鈕開啟訊息窗 一種方式就是去調整你的DB預設上限 或者調成無限制(以北風資料庫預設設定為例) 你也可以透過系統指令sp_helpdb來查看當前DB狀況 可以看到filegroup 為 primary的size已經達到maxsize就代表空間已滿了 Ref: ERROR: "Could not allocate space for object 'X' in database 'Your Database' because the 'PRIMARY' filegroup is full" https://support.managed.com/kb/a132/error-could-not-allocate-space-object-x-database-your-database-because-primary-filegroup-is-full.aspx [問題]~利用jdbc insert資料DB 卻一直無法insert.... https://social.msdn.microsoft.com/Forums/zh-TW/41cf172d-49d3-45ce-8468-59a9a46bf53b/21839389882103329992jdbc-insert3603926009db?forum=240 Could not allocate space for object dbo.table https://stackoverflow.com/questions/19114680/could-not-allocate-space-for-object-dbo-table HOW TO FIX ERROR "COULD NOT ALLOCATE SPACE FOR OBJECT 'X' IN DATABASE"? https://manage.accuwebhosting.com/knowledgebase/2324/How-to-Fix-Error-Could-not-allocate-spa...

T-SQL筆記13_較通用且完善的trim solution_replace跟rtrim,ltrim

圖片
  SQL 資料欄位裡面空白字元trim掉處理 trim (SQL2017後才支援)  早期版用Ltrim跟Rtrim(比較通用) 因此若有要做trim仍然是以可以上下支援的語法版本比較保險 那怕哪天突然說從SQL Server2017 又退回去用2005 , 2000之類的 設想一下一個登入比對邏輯 有個天兵的在註冊時輸入account id 用email而且給我多1到2個空白甚至是TAB在尾巴... (可能從excel或outlook直接複製mail來貼輸入) 註冊時 他輸入的account id:'abc@hotmail.com   ' 結果要登入時 給我輸入account id:'abc@hotmail.com' 這時若直接把已經在DB裡面的欄位值原封不動就拿來比對 頭就痛了~~~ T-SQL 1 2 3 select * from User where LTRIM(RTRIM( REPLACE ( REPLACE ( REPLACE ( REPLACE ( REPLACE ( REPLACE ( REPLACE (account_id, CHAR ( 0 ), CHAR ( 32 )), CHAR ( 9 ), CHAR ( 32 )) , CHAR ( 10 ), CHAR ( 32 )), CHAR ( 11 ), CHAR ( 32 )), CHAR ( 12 ), CHAR ( 32 )), CHAR ( 13 ), CHAR ( 32 )), CHAR ( 14 ), CHAR ( 32 )))) =@ account_id and mb_pwd =@ password 光只仰賴內建的trim (ltrim , rtrim)仍會有未知疑似空白的字元 trim不乾淨的狀況 而在測試跟爬文時發現 SQL內建的trim函數只辨別的了ascii:32的一般空白字元 因此在做LTRIM跟RTRIM之前網路上建議是還要再多做一些取代成32的動作 Ref: LTRIM RTRIM doesn’t always work https://www.codeproject.com/Tips/330787/LTRIM-RTRIM-doesn-t-always-work

WebForms UnobtrusiveValidationMode 需要 'jquery' 的 ScriptResourceMapping

圖片
  當我們在webform專案裡面遇到有要做欄位必填 正規表示格式確認(email,純數字)又或者密碼跟再次驗證等等 通常會透過.net 內建的 RequiredFieldValidator RegularExpressionValidator CompareValidator 等驗證控件 而預設若直接使用可能會報這錯誤 WebForms UnobtrusiveValidationMode 需要 'jquery' 的 ScriptResourceMapping WebForms UnobtrusiveValidationMode requires a ScriptResourceMapping for jquery 此時最快解法就是 在Page_Load事件中加上 解法1. UnobtrusiveValidationMode = UnobtrusiveValidationMode.None; 解法2. 在web.config 中加入 <appSettings>     <add key="ValidationSettings:UnobtrusiveValidationMode" value="None" /> </appSettings> 解法3. 自.net 4.5之後驗證相關機制仰賴於jQUery 中 javascript的一些引用參考 所以也可以去nuget補安裝AspNet.ScriptManager.jQuery Ref: Using CompareValidator To Check Password In ASP.NET https://www.dotnetheaven.com/article/using-comparevalidator-to-check-password-in-asp.net [ASP.NET] 驗證控制項 / Validation Control https://dotblogs.com.tw/yc421206/2009/04/24/8155 Validate Email Address using Regular Expression Validator in ASP.Net https://www.aspsnippets.com/Art...

ASP.NET下拉選單DropDownList套用jQuery複合選取時的經驗談(改採ListBox較適合)

圖片
  Multiple Select is a jQuery plugin to select multiple elements with checkboxes 雖然DropDownList預設Render到HTML對應產生SELECT的HTML TAG 但是Code-Behind中要透過SelectedValue取得只能取得到第一個選到的唯一值 https://docs.microsoft.com/zh-tw/dotnet/api/system.web.ui.webcontrols.dropdownlist?view=netframework-4.8#properties 原因在於Multiple Select這項jQUery plugin背後實作只是將select 的 display設置為none 然後自行在render出來上下兩組div做特殊處裡 因此這裡必須捨棄掉dropdownlist的控件相關屬性、方法處理 首先 先有辦法監聽到每次check/unckeck項目的值 jQuery MultipleSelect code範本 See the Pen jQuery Multiple Select by Jacob ( @dryjoker ) on CodePen . 這裡要注意使用的MultipleSelect版本有差異!!! 像是這裡我用官網cdn使用 它裡面選中是定義成selected 而我這裡專案的定義則是 checked!!!! 建議都先console印出來裏面的屬性有哪些 .aspx 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 $( '#<%=ddl_multi.ClientID%>' ).multipleSelect({ placeholder: "法人單位(可複選)" , width: '99%' , selectAll: false , multiple: true , multipleWidth: 1...

經得起原始碼資安弱點掃描的程式設計習慣培養(三)_7.Cross Site Scripting(XSS)_Stored XSS_Reflected XSS All Clients

圖片
  近期新加入的功能code剛好也被CheckMarx掃出高風險部分的程式碼漏洞 我也踏到這個Issue啦 Cross Site Scripting(XSS)  第一種.Stored XSS 高風險 CheckMarx掃碼報告給的說明[Stored XSS] ============================================================ 風險: 攻擊者可以利用合法存取應用程式提交資料到資料庫。 當另一個使用者隨後存取該資料,網頁可能會被改寫且惡意腳本可能會被啟動。 發生原因: 從資料庫中的資料建立網頁。資料直接嵌入至HTML的頁面,利用瀏覽器顯示。 資料可能源自於其他使用者的輸入。 如果資料包含HTML片段或Javascript,使用者無法分辨是否為預期的頁面。 該漏洞主因為未先對嵌入資料庫中的資料進行編碼(Encode) 來預防瀏覽器將其當為HTML的格式而非純文字。 如何避免: 1.驗證所有資料,無論其來源為何。驗證應基於白名單:僅接受預定結構的資訊,而不是拒絕不良的樣式(Patterns)。  應確認:  ● 資料型態  ● 大小  ● 範圍  ● 格式  ● 期望值  2. 驗證無法取代編碼. 輸出嵌入之前,不論其來源, 將所有動態資料進行編碼. 編碼方式應該是上下文相關的. 例如: ● HTML內容使用HTML的編碼方式  ● HTML編碼特性是將資料輸出到特性的值 ● JavaScript的編碼方式為伺服器產生的Javascript  3.考慮使用ESAPI的編碼庫,或它的內置功能。對於舊版的ASP.NET,請考慮使用AntiXSS.  4.在HTTP類型對應的表頭, 明確定義整個頁面的字元編碼.  5. 設置 httpOnly 標誌於會期資訊,以防止利用XSS來竊取資訊. ============================================================ 這裡報告描述是指我對傳進來字串參數直接拋給DAL處裡的類別執行查詢 這裡缺乏對輸入進來的字串參數做一些查檢判斷 也建議在帶入時對參數也做一些html encode處理 這裡用AntiXSS來Enc...