發表文章

[IIS] 網站內的背景程式沒運作、莫名異常運作

圖片
如題,遇到一個問題,就是我的網站中有寫一段類似排程的背景程式,但是架在IIS上面卻沒有即時運作,需要某個Request進來,才會作動,查詢相關資料後,整理如以下。 ● 彙整兩個背景運作部分: (1) 背景程式沒運作 (2)莫名異常運作  的解決方式及原因。 1 背景程式沒運作 1.1. 應用程式集區 > 進階設定 > 啟動模式: AlwaysRunning 1.2. 應用程式集區 > 進階設定 > 閒置逾時: 0 1.3. 站台 > 進階設定 > [預先載入已啟用]: True 1.4. 伺服器管理 > 新增角色及功能精靈 > 伺服器角色 > 安裝 [應用程式初始化] 2 莫名異常運作 (站台未啟用,卻無故執行背景排程) 2.1 關閉 AlwaysRunning,改為 OnDemand,請參考 1.1 2.2 關閉 [預先載入已啟用],改為 False,請參考 1.4 2.3 建議可以為站台獨立配置應用集區,並且關閉站台時,也關閉該應用集區。 以上,結案。 參考: 1.  IIS AlwaysRunning 深入研究 - 幽靈排程與自動啟動行為-黑暗執行緒 2.  Hangfire 筆記2 - 執行定期排程-黑暗執行緒

[SqlServer] 資料轉置 及 本機建立DBLink至雲端AzureDB

圖片
如題,近期專案中的測試資料庫放在Azure,在資料轉置的途中,使用過幾種方式,其中最基本的就是使用 [匯出資料] 功能,較為麻煩一點的就是建立 DBLink,以下說明。 1.  [匯出資料]功能     1.1  對資料庫點擊右鍵選擇 [匯出資料],並點擊下一步                    1.2   [選擇資料來源] ,就是你當前資料的存放位置,如下圖所示:     1.3  [選擇目的地] ,就是你要轉置過去的雲端DB,如下圖所示:       1.4   [選擇資料表] ,就是你要轉置過去的資料表,再按一直下一步即可,如下圖所示: ...

[SQL] 解決 DB Lock 的問題

圖片
 如題,近期因為寫 Store Procedure 產生了一個錯誤 /*EXECUTE 之後的交易計數顯示遺漏了 COMMIT 或 ROLLBACK TRANSACTION 陳述式。前次計數 = 0,目前的計數 = 1。*/ 後續就發現特定 Table 無法搜尋,直覺就是應該被 Lock 住了,但是沒有特別處理過這問題,這次特別紀錄下。 以下開始 DB LOCK 的說明及解釋:      1.     模擬 Db Lock,只要有開啟 Transactoin 但是沒有 Commit 或 Rollback 就會產生 Dead Lock。               以下使用 北風資料庫為範例: BEGIN TRAN UPDATE dbo.Employees SET Country = 'JAPAN'      2.       此時 dbo.Employees 已經被 Lock 住了,可以用以下 SQL 查詢 SELECT request_session_id AS spid, resource_type AS rt, resource_databASe_id AS rdb, (CASE resource_type WHEN 'OBJECT' then object_name(resource_ASsociated_entity_id) WHEN 'DATABASE' then ' ' ELSE (SELECT object_name(object_id) FROM sys.partitions WHERE hobt_id = resource_ASsociated_entity_id) END) AS objname, resource_description AS rd, request_mode AS rm, request_status AS rs FROM sys.dm_tran_lock...

[SQL] Sql效能陷阱及優化

 如題,把一些工作上遇到的SQL效能問題記錄下來: 1.     盡量不要在 WHERE 條件中,把Table的欄位進行 Convert , Cast ... 轉換處理!     原因: 此動作會造成 Table 中每筆資料都會轉置,當資料量大時,會造成效能瓶頸。     解決辦法: 將 WHERE 要比較的參數進行轉換,而不是對 Table 的參數進行轉換,甚至可以先在方 DECLARE 一個變數先轉換好,在放到 SQL 語句中。 2.     IN、JOIN、EXISTS 如何選擇:     2.1     盡量不要在 IN 中處理子查詢、CTE!          原因:   因為每次 IN 都會重新查一次子查詢、 CTE,資料量大時,效能極差          解決辦法:  將 子查詢 以 CTE 方式處理,之後再 JOIN 或 EXISTS     2.2    面臨  子查詢、CTE, JOIN 或 EXISTS 兩種取捨!           解決思路:                                    a.     理論上 效能優劣: EXISTS  >  JOIN,因為一旦 EXISTS 尋找找到特定內容,查詢執行就會停止,而 JOIN 將一直持續到最後。           ...

[SqlServer] 簡易使用 SqlCmd 進行查詢資料、匯入SQL

 如題,直接附上代碼及簡易說明: 1.  使用密碼進入資料庫       sqlcmd -S 127.0.0.1 -U sa -P P@ssw0rd -d AdventureWorks2017 2.  使用Windows驗證進入資料庫       sqlcmd -S 127.0.0.1 -E -d AdventureWorks2017 3.  使用Windows驗證進入資料庫,並且查詢資料       sqlcmd -S 127.0.0.1 -E -d AdventureWorks2017      SELECT TOP 100 * FROM [Person].[Person]     GO 4. 使用Windows驗證匯入資料     (備註: -f 65001 是表示使用 UTF-8)      sqlcmd -S 127.0.0.1 -E -d AdventureWorks2017 -f 65001 -i .\Script.PostDeployment.sql 5. 在 SqlServer 匯入資料      DECLARE @CMD_SQL NVARCHAR(MAX)      SET @CMD_SQL = 'sqlcmd -S 127.0.0.1 -E -d AdventureWorks2017 -f 65001 -i D:\DbAdventureWorks\Script.PostDeployment.sql'      EXEC xp_cmdshell @ CMD_SQL  資料庫及相關文件: Download 參考文章: 1.      [SQL Server] sqlcmd import sql file @ Louis學習筆記 :: 痞客邦 :: (pixnet.net)     

[SQL] SqlException 3981 - 在暫止的本機交易中指定命令的連接時,此命令必須具有交易物件才可執行。

 如標題,在使用 C# 對 SQL Server 進行CRUD 時,發生此錯誤。 不廢話,直接附上我的情境及解法。 因為我在 IEnumerable 使用 ForEach() 中,進行 CRUD,此時推測內部的迭代器運作上對初始化交易的步驟,不如正常預期。 所以改為 for(...) { // CRUD },在 for 中執行CRUD,就沒有所謂迭代器的問題,收工。

[遞迴邏輯] 採購單轉為訂購單

有一種業務邏輯如下: /// 功能說明: 將採購單依照特定條件轉結為訂購單。 /// 條件一: 每張訂購單的總金額不能大於 25,000,000 /// 條件二: 未轉訂購單的資料才要轉訂購單 /// 條件三: 報價單種類為 2-特殊報價單,需要進行分類 /// 條件四: 依照 [運送方式 ShipId], [報價單種類 QuotationType], [類別 TransOrderYn], [特報單類別 QuotationNo] 分類 /// 條件五: 特定機型有對應的特定數量,該訂單的數量不能超過該特定數量 不廢話,附上連結: .Net Fiddle |  Github

[遞迴邏輯] 採購單取得一般報價和特殊報價

 /// 功能目的:  /// 採購單需要依照出貨的日期取得商品的報價,而商品報價有分一般報價和特殊報價。 /// 一般報價通常為全年度常態性的報價。特殊報價通常價格較低且有期間限定,且特殊報價需先使用,否則有違約的可能。 /// 功能說明: /// 1. 先準備好採購資料集合、報價單資料集合 /// 2. 依照下方的邏輯去篩選 /// 3. 主要透過採購資料集合的 Done 屬性,來判斷至否結束當前的遞迴。 不囉嗦,附上連結: .Net Fiddle | GitHub

[SQL] 將資料類型從 numeric 轉換到 decimal 時發生錯誤

 如題,該情境是搭配C#後端,要將資料存入資料庫時發生,該欄位是 decimal(11, 6),而檢查後發現我存入的值是 30,000,000,但是該欄位的極限是 99,999.000000。 當下想到我存 decimal  為什麼會跟 numeric 有關係,後來才發現我存的整數部分是 numeric,最後才會轉換到 decimal,所以超過定義的數量才會報錯。 不廢話附上解法,將原本欄位從 decimal(11, 6) =>  decimal(13, 6),結案。

[SQL] 搜尋時間起迄範圍

 如題所示,會遇到資料表中存起、迄時間,並且搜尋時要搜尋特定的區間,只要資料中有任一時間包含區間內就要找到,不廢話直接附上SQL。 ( StartDate BETWEEN @StartDate AND @EndDate OR EndDate BETWEEN @StartDate AND @EndDate OR @StartDate BETWEEN StartDate AND EndDate OR @EndDate BETWEEN StartDate AND EndDate )

[Redis] 常用配置(一)

圖片
 近期接觸了 Redis ,有些配置上的問題做個紀錄。 1. Redis文件中密碼配置及程式中如何設置連線字串:     1.1  Redis文件中密碼配置:           在  redis.windows.conf 中找到 requirepass 這個關鍵字,就在這個段落加上以下內容:           requirepass: 表示要使用密碼。( 切記:  requirepass 前面不能空格!!! )           1qaz2wsx: 為我們設置的密碼          1.2  程式中如何設置連線字串:          在連線字串中,密碼和Host用@進行分隔。 2. 解除 ServiceStack.Redis 中的6000次連線限制 ( 目前版本為 6.0.2 )     2.1 下載原始碼:  GitHub - ServiceStack/ServiceStack.Text: .NET's fastest JSON, JSV and CSV Text Serializers     2.2  限制免費配額功能在ServiceStack.Text類庫下的LicenseUtils.cs文件中,僅需從GitHub上下載源碼後添加一行代碼重新編譯即可解除限制,如下圖:     2.3 將編譯好的DLL放到指定的資料夾中,再把新的專案重新編譯即可。 3. 將 Redis 加入服務     3.1 加入環境變數     3.2 加入服務          3.2.1 在 Redis 的資料夾中開啟 CMD,並且入以下指令 redis-server.exe --service-install redis.windows.conf --l...

[Webpack] Webpack 、Webpack-cli的版本、安裝、解除安裝及打包指令

如題,分享一下 Webpack 的版本及安裝。 /***** Webpack 及 Webpack-cli 版本對應 *****/ webpack3 的 webpack 和 webpack-cli 的功能是集成在一起的,只需要安裝 webpack3 即可 npm install webpack@3 webpack4+,執行方式已調整,不再是 webpack 一個而已,而是多了 webpack-cli 依賴 版本 新版本 webpack 4 5 webpack-cli 3 4 webpack-dev-server 3 3 /***** 初始化 Js/Node.js 項目,並產生 package.json *****/ // "本地"安裝 Js/node.js 項目(需在指定路徑) npm  init /***** 全局 *****/ // 全局安裝最新版本(不限路徑) npm  i  webpack  webpack-cli  -g // 全局安裝指定 webpack4版本 對應 webpack-cli3版本 (不限路徑) npm  i  webpack@4.46  webpack-cli@3.3.12  -g // 全局卸載 webpack 和 webpack-cli  npm  uninstall  webpack  webpack-cli  -g // 全局查看 webpack 版...

[Windows] win10於檔案總管右鍵選單開啟非常緩慢

圖片
 如提,近期在檔案總管右鍵取得選單時,開啟非常緩慢,以下附上解法。 1. 搜尋 regedit 2. 依照圖片找到 Desktop 的目錄,右鍵新增一個 DWORD(32位元) 3. 新增後,先不用改名。 4.  在對這個新增項目右鍵,選重新命名,名稱為: WaitToKillAppTimeout 5. 若是發生名稱重複的錯誤,表示目前已存在該項目,就把新增的刪掉就好,等等我們找到這個新項目直接改。 6. 找到修改項目,右鍵選 "修改",並依照圖片,將值改為0即可。

[SQL] SQL定序及Azure雲端資料庫定序問題

圖片
之前專案的資料庫是放在 Azure 雲端,後來有個調整是要將下拉選單的選項依照名稱排序,那麼此時會遇到奇怪的情況: 基操的 ORDER BY Name 取得的資料竟然沒有照中文筆畫大小排序!!! 這邊就直接附上解法: 1) 什麼是定序: 決定資料庫所使用的字元集、排序的方式 2) 先查詢目前資料庫的定序是什麼? SELECT CONVERT (varchar(256), SERVERPROPERTY('collation'))               我取得的定序是  SQL_Latin1_General_CP1_CI_AS ,而若使用這個定序,就無法依照中文筆畫排序。                * 可以參考 微軟的定序頁面 3) 若是要照中文筆畫排序,則使用該定序  chinese_taiwan_stroke_ci_as SELECT * FROM User ORDER BY Name chinese_taiwan_stroke_ci_as 4) 若是要照ㄅㄆㄇㄈ排序,則使用該定序  Chinese_Taiwan_BOPOMOFO_CI_AI SELECT * FROM User ORDER BY Name Chinese_Taiwan_BOPOMOFO_CI_AI

[VPN] Forticlient 無法連線及版本問題

圖片
 如題,使用 Forticlient 時,會遇到無法連線的問題,目前遇到多數問題可以透過以下兩個方式解決,如果有其他疑難雜症就再自行 google 看看了~ 1. IE 開啟 TLS 1.2 IE > 網際網路設定 > 進階 > TLS 1.2 2. 版本不相容     因為您的 Forticlient 和 Server 端所設定的版本不匹配,所以很常會遇到下載新的版本卻一直報錯,建議使用舊版 FortiClientOnlineInstaller_6.0.exe 來連線即可,收工。

[C#] 需有 Oracle 用戶端軟體版本 8.1.7 或以上版本

圖片
 如題,近期有個老舊專案使用了 System.Data.OracleClient,運行時報了該錯誤,看了一些文章後下載了 Oracle Client 64bit,又報了一個錯誤 => "當與具有32位元的oracle用戶端元件執行64位元模式",搞了幾個小時後總算解決!! 而正解就是要安裝 Oracle Client 11 32bit ,不廢話附上安裝步驟:     1. 安裝  Oracle Client 11 32bit          (1) 解壓縮後找到 setup.exe          (2) 畫面會出現安裝提示,按下是 ( 注意,估計安裝程式很舊,他不會自動跳出,建議 Alt + Tab 切換一下找到這個提示 )          (3) 選擇"一般安裝",之後一直下一步就可以了。 參考資料: 1.  建立webservice 連接DB for Oracle9i - iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天 (ithome.com.tw) 2.  蟲蟲不要找我碴: 嘗試載入oracle用戶端程式庫時傳出badimageformatexception當與具有32位元的oracle用戶端元件執行64位元模式安裝時會出現此問題 (bgcloser.blogspot.com)

[Angular] npm ERR! code ELIFECYCLE ( angular11 執行 npm start 時發生錯誤)

圖片
    如 題,近期專案使用 Angular11 ,臨時發生該問題,花了幾個小時,試過許多方法都無法解決,最後總算是搞定了,以下附上解決的步驟。 1. 修改package.json配置文件:     (1)  將 "start": "ng serve" 調整為以下。           "start": "node --max_old_space_size=8048 ./node_modules/@angular/cli/bin/ng serve" 2. 套件重新安裝"     (1) 刪除緩存,在命令提示字元輸入 =>  npm cache clean --force     (2)  刪除專案根目錄中的 node_modules 資料夾     (3) 刪除  package-lock.json     (4) 在專案中重新執行 =>  npm install     到 這邊可以先執行看看 npm start,若是可以的話那就恭喜您,仍然無法的話就繼續執行第三步驟吧~ 3. 將 node.js 版本調整為 10.X 版本 (圖片是我安裝的版本)     (1) 將當前的nodejs解除安裝 (win10的話,直接在控制台那就可以解除安裝)。     (2) 進入官網  Previous Releases | Node.js (nodejs.org) ,找到 10.X版本按下Downloads 。( 本地備份 node-v10.24.1-x64.msi )     (2) 依照電腦配置下載安裝 參考資料: 1.  node.js - Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory in angular - Stack Overflow 2.  node.js - How to...

[C#] System.ObjectDisposedException: IDataContext is disposed

如題,這次開發中遇到該問題,因為這次用的 ORM 是 LinqToDB,當下以為和 EntityFramework 沒什麼不同,後來再使用中遇到個奇妙的事情,就是我使用 AsQueryable() 後,再次使用該實體時,會發現這個實體被 Dispose 掉了,造成第一次訪問一定可以,後來就出現Bug,目前解決方法是當使用 LinqToDB 時盡量避敏用 AsQueryable()。 參考資料: c# - IQueryable is disposed after using - Stack Overflow

[C#]使用IQueryable動態排序ThenBy

    該情境是前端有資料需要多重排序,每個欄位 (key) 可以正序或倒序 (order) ,且要依照順序 (sortNo) ,所以前端只要把排序條件給後端,而後端會把資料篩選排序後,回傳給前端。     由於效能因素,物件必須於過程中保持 IQueryable,於最後輸出時再轉為 IEnumerable,所以這邊有個擴充可以參考引用。 ●排序條件的範例Json: { "orderList": [ { "key": "Id". "order": 1, "sortNo": 1 }, { "key": "Age". "order": -1, "sortNo": 2 } ] } 一、手動新增IQueryable擴充: public static class IOrderedQueryableExtension { public static IOrderedQueryable<T> OrderBy<T>(this IQueryable<T> source, string property) { return ApplyOrder<T>(source, property, "OrderBy"); } public static IOrderedQueryable<T> OrderByDescending<T>(this IQueryable<T> source, string property) { return ApplyOrder<T>(source, property, "OrderByDescending"); } public static IOrderedQueryable<T> ThenBy<T>(...

[C#]RBK(8進制)和字串互轉

因特殊需求,需要實作該功能,主要功能的轉換是類似以下範例:      "\304\343\272\303" => "你好" 不廢話,附上程式碼。 // 中文轉Rbk8進制 private void button1_Click(object sender, EventArgs e) { string hz = this.richTextBox1.Text; byte[] gbk = Encoding.GetEncoding("GBK").GetBytes(hz); string s1 = ""; foreach (byte b in gbk) { s1 += $"\\{Convert.ToString(b, 8)}"; } this.richTextBox2.Text = s1; } // Rbk8進制轉中文 private void button2_Click(object sender, EventArgs e) { string cd = this.richTextBox1.Text; string[] b4 = RemoveEmptyString(cd.Split('\\')); byte[] bs = new byte[b4.Length]; for (int i = 0; i < b4.Length; i++) { bs[i] = (byte)Convert.ToByte(b4[i], 8); } this.richTextBox2.Text = Encoding.GetEncoding("GBK").GetString(bs); } // 移除空字串 private string[] RemoveEmptyString(string[] strArr) { List strList = new List (); ; foreach (var item in strArr) { if (!string.IsNullOr...

[C#]DateTime移除秒、移除毫秒或無條件進位

 ● 去掉 一個Datetime物件的 秒數(seconds) -方法一 DateTime dt = DateTime.Now; // 初始化一個Datetime物件 dt = dt.AddSeconds(-dt.Second); // 加負號,移除秒數  ● 去掉 一個Datetime物件的 秒數(seconds) -方法二 DateTime dt = DateTime.Now; // 初始化一個Datetime物件 var dtStr = dt.ToString( "yyyy-MM-dd HH:mm" ); // 轉為字串,去掉 :ss dt = Conver.ToDateTime( dtStr ); // 秒數部份即為0  ● 去掉 一個Datetime物件的 毫秒數(Millisecond) -方法一 DateTime dt = DateTime.Now; // 初始化一個Datetime物件 dt = dt.AddMilliseconds(-dt.Millisecond); // 加負號,移除豪秒數  ● 去掉 一個Datetime物件的 毫秒數(Millisecond) -方法二 DateTime dt = DateTime.Now; // 初始化一個Datetime物件 var dtStr = dt.ToString( "yyyy-MM-dd HH:mm" ); // 轉為字串,去掉 :ss dt = Conver.ToDateTime( dtStr ); // 秒數部份即為0  ●Datetime物件的 毫秒數(Millisecond) 無條件進位 DateTime dt = DateTime.Now; // 初始化一個Datetime物件 dt = dt.AddMilliseconds( 1000 - dt.Millisecond ); //秒數會加1, 毫秒數為0 參考資料: 1.  c# - Strip seconds from datetime - Stack Overflow 2.  C#中DateTime对象去掉毫秒部分的方法,如何对毫秒部分四舍五入为整秒 - 代码先锋网 (codeleading.com)

贊助Donate

圖片
  Buy me a coffee   PayPal.Me

[SQL] 在SqlServer修改資料表Schema (Change dbo schema to other)

●修改資料表的 Schema 從 MySchema 回復為 dbo : ALTER SCHEMA MySchema TRANSFER dbo.MyTable ●修改資料表的 Schema 從 dbo 改為 MySchema : ALTER SCHEMA dbo TRANSFER MySchema.MyTable 參考資料:  sql - How do I change db schema to dbo - Stack Overflow  

[Git]Another git process seems to be running in this repository

     如標題,操作Git時,偶然間發生這個問題,想要使用 switch / checkout, 或是 commit 都是這個錯誤 "git did not exit cleanly (exit code 128)" ,此外還有一行提示 "Another git process seems to be running in this repository",不多話,附上解法: 刪掉  .git/index.lock 收工。 參考:  Another git process seems to be running in this repository - Stack Overflow