星期六, 9月 28, 2024

[SSRS] Data retrieval failed for the subreport

使用子報表時出現該錯誤訊息

原以為是資料異常造成,後來發現是 SSRS 內的資料集名稱打錯,造成該情況

星期四, 9月 26, 2024

[Shopify] hCaptcha

被告知對外聯絡信箱最近垃圾信件增加不少才去了解,發現 Shopify 垃圾郵件防護沒有啟用,還很意外注意到垃圾郵件防護是使用 hCaptcha,直覺是 Google reCaptcha 才是,在 Shopify 官方 changelog 有找到這兩篇文章

官方文件 - 使用 Google reCAPTCHA 保護您的網路商店 上還是說是使用 Google reCaptcha

網路商店 => 偏好設定 => 垃圾郵件防護,畫面上是 hCaptcha

Shopify 網站右下角有出現 hCaptcha 圖示

星期一, 9月 23, 2024

[CCNA] 預設路由

當設定靜態路由都不通、預設路由就是最後的 routing 選擇或是不論網段一律往特定路由跑時,可以以預設路由來取代一個一個網段設定

簡易網路拓樸圖
使用 ip route connected 確認目前連線
建立預設路由,要透過它連往 192.168.30.0 網段
在 PC0 上 ping Laptop0 確認預設路由是正常的

星期日, 9月 22, 2024

[SSRS] TextDecoration

要在 SSRS Textbox 內設定文字下斜線,該設定沒有 GUI 畫面可以設定,必須在屬性視窗內選擇,分別為 Default、None、Underline 、Overline、LineThrough,Underline 和 LineThrough 可以猜到文字效果,但 Overline 就完全沒有不知道
Underline 、Overline、LineThrough 文字效果,Overline 查資料應該是文字上橫線,但實際設定沒有效果出來
在該官方文章 - TextBox.TextDecorations Property 內的 Overline 效果,沒有找到 SSRS 專屬文件說明
開發環境是 VS2022 WinForm 搭配 ReportViewer

星期六, 9月 21, 2024

[SSRS] TextBox 運算式內換行

SSRS TextBox 純文字輸入換行,基本上是很直覺的操作,但常常是運算式內同時有固定文字、參數和資料集欄位等混在一起呈現內容,該情況要換行的話,要使用 VB.NET 換行符號 - vbcrlf

運算式內設定

星期五, 9月 20, 2024

[CCNA] 靜態路由 - 優先權

延續 [CCNA] 靜態路由 - 負載平衡 筆記,在負載平衡練習時設定靜態路由並沒有指定 AD/Cost,預設為 [1/0] 如下圖
接下來會修改 192.168.100.2 的 Administrator Distance (AD) 來達到路由備援機制,AD 越小表示優先權越大,所以預設會是以 192.168.20.2 為主要線路,當 192.168.20.2 發生異常時,才會切至 192.168.100.2

CLI 內設定 AD

重建 AD 為 3 的 192.168.100.2 靜態路由,先使用 no ip route 刪除後,再使用 ip route 並指定 AD (下圖紅線),設定完成後查詢只會看見 [1/0] 192.168.20.2 靜態路由而已 (下圖藍框),當切換至 [3/0] 192.168.100.2 時,查詢才會出現 192.168.100.2 靜態路由
使用 Tracert 進行測試

從 1921.68.10.2 使用 tracert 192.168.30.2,第一次可以看見是從 192.168.20.2 過去,故意把網卡關閉後,再進行 tracert 就可以看見切至 192.168.100.2 過去
再次查詢靜態路由,就會出現 [3/0] 192.168.100.2
Router1 設定方式是一樣的,就不紀錄囉

星期四, 9月 19, 2024

[CCNA] 靜態路由 - 負載平衡

延續 [CCNA] 靜態路由 筆記,要在兩個 route 之間再拉一條專線來當成備援,備援線路以 192.168.100.0

在兩個 route 上設定第二條靜態路由設定後,從 CLI 上下指令確認,設定 IP 和靜態路由就不多紀錄
實際進行測試,就直接網卡關掉,看 ping 是否會因此中斷

星期六, 9月 14, 2024

[C#] Microsoft.Office.Interop.Excel

閱讀這兩篇官方文章的筆記

nuget 上安裝 Microsoft.Office.Interop.Excel

文章內還是加入 Excel dll 作法,現在可以直接在 nuget 上安裝囉

C# Code
using System;
using System.Collections.Generic;
using Excel = Microsoft.Office.Interop.Excel;

namespace Automation
{
    internal class Program
    {
        static void Main(string[] args)
        {
            var bankAccounts = new List<Account>
            {
                new Account{ID = 345,Balance = 541.27m},
                // 故意把數字變長,超過欄位寬度,AutoFit() 效果才能感受的到
                new Account{ID = 999999999,Balance = -127.44m}
            };

            // 透過 delegate 來塞值並變化背景顏色
            DisplayInExcel(bankAccounts, (account, cell) =>
            {
                cell.Value = account.ID;
                cell.Offset[0, 1].Value = account.Balance;

                if (account.Balance < 0)
                {
                    cell.Interior.Color = Color.Red;
                    cell.Offset[0, 1].Interior.Color = 255;
                }
            });
        }

        /// <summary>
        /// 顯示 Excel 
        /// </summary>
        /// <param name="accounts">資料來源</param>
        /// <param name="DisplayFunc">透過 Delegate 讓主程式可以自訂定義 Excel 內的商業邏輯</param>
        static void DisplayInExcel(
            IEnumerable<Account> accounts,
            Action<Account, Excel.Range> DisplayFunc)
        {
            var excelApp = new Excel.Application();
            excelApp.Workbooks.Add();
            excelApp.Visible = true;
            excelApp.Range["A1"].Value = "ID";
            excelApp.Range["B1"].Value = "Balance";

            // 設定下述迴圈起點
            excelApp.Range["A2"].Select();
            foreach (var ac in accounts)
            {
                DisplayFunc(ac, excelApp.ActiveCell);
                excelApp.ActiveCell.Offset[1, 0].Select();
            }

            // 把 A1:B3 這範圍內容複製至剪貼簿
            excelApp.Range["A1:B3"].Copy();

            // 調整資料行寬度來完全顯示內容。
            excelApp.Columns[1].AutoFit();
            excelApp.Columns[2].AutoFit();
        }
    }

    public class Account
    {
        public int ID { get; set; }
        public decimal Balance { get; set; }
    }
}

儲存格顏色

以前在 VFP 是透過 ColorIndex 來進行設定,詳見 [VFP] Automation 應用 - 改變 Excel 儲存格顏色 紀錄,官方文章是使用 Color 來進行設定,但使用顏色十進制來塞值,一整個不直覺
cell.Interior.Color = Color.Red;
cell.Offset[0, 1].Interior.Color = 255;

Range.Select()

官方文章都是透過 Range.Select() 來進入指定 cell,但一直覺得不是該使用 Range.Activate();,在該篇官方文章 Working with the Active Cell 有說明
To select a range of cells, use the Select method. To make a single cell the active cell, use the Activate method.

複製至剪貼簿
excelApp.Range["A1:B3"].Copy();
執行後在 txt 上直接貼上就可以看見啦
調整資料行寬度來完全顯示內容
excelApp.Columns[1].AutoFit();

星期日, 9月 08, 2024

[EF] 在 edmx 內尋找 Entity

DbContext 內越來越多的 Entity 後,在圖表內找到特定 Entity 變成是一件耗時的事情,好在可以透過 edmx 模型瀏覽器內篩選或搜尋

以 AdventureWork edmx 為例,只截部分而已
在 edmx 模型瀏覽器內,Entity 依據名稱排序,上方也有篩選功能可以使用

星期一, 9月 02, 2024

[CCNA] ping

延續 [CCNA] 靜態路由,在 Router 上都有設定兩張網卡,那 ping 的時候能否指定從特定網卡 (source) 發出,該筆記是從 192.168.10.1 ping 到 192.168.20.2,如下圖

CLI 語法

正常 ping,沒有顯示 source

自訂 ping,可以指定來源 (綠線)

GUI 功能

Packet Tracer 上方有自訂 ping 功能 - Complex PDU (下圖綠色圓框 1),綠色圓框 2 則是可以選擇source,預設是勾選 Auto Select Port 狀態

星期日, 9月 01, 2024

[CCNA] 靜態路由

根據網路資源
來練習在 Router 上設定靜態路由,下圖簡易網路拓樸圖
Router 和連接線

Router 2911 必須先安裝 HWIC-2T 介面,彼此才能使用 Serial Port 搭配 Serial DCE 或 Serial DTE 來相互連線
  • Step1:關閉電源
  • Step2:把 HWIC-2T 安裝進去
  • Step3:開啟電源

連接線選擇 Serial DCE 或 Serial DTE 皆可


Serial DTE 線連接 Router 時,選擇 Serial Port

顯示網路介面設定

IP 設定部分不特別紀錄,設定完成後透過 show ip interface brief 來確認或是在網路拓樸上點選 Router 1 圖示也有相關資訊

在 Router0 上使用 GUI 設定靜態路由

在 Router1 上使用 CLI 設定靜態路由

使用 ip route 語法來設定靜態路由,當設定完成後,要在 Global Configuration 層級呼叫 Privileged 層級語法,可以在前面加個 do 就行,語法如下
do show ip route

ping 測試

最終端的 PC 和 Laptop 互相 ping 看看,確認是否有通