星期四, 4月 29, 2021

[SQL] Order By 排序

系統升級後接到使用者回報,單據資料排序亂掉導致搜尋困難,原本是 ABCD,但卻變成 ADCB,查 AP 發現撈資料時並沒有下 Order By,導致回傳的資料排序不如預期

官方文件上有提到,要確保回傳資料集排序一定要下 Order By

星期二, 4月 20, 2021

[SQL] 資料收集

想透過 [資料收集] 來取代 [Windows 效能監視器] ,使用 SQL Server 2019 來紀錄建立資料收集步驟,四步驟分別為
  • 建立管理資料倉儲
  • 建立資料收集
  • 資料收集組屬性
  • 報表
建立管理資料倉儲

資料收集 => 工作 => 設定管理資料倉儲,建立一個專屬 DB 給資料收集使用

[SQL] 資料收集-1

進入資料倉儲精靈

[SQL] 資料收集-2

選擇伺服器和資料庫,資料庫假如已存在,就不用新增

[SQL] 資料收集-3

建立 mdw DB

[SQL] 資料收集-4

建立或選擇使用者

[SQL] 資料收集-5

資料倉儲設定明細確認

[SQL] 資料收集-6

資料倉儲設定完成

[SQL] 資料收集-7

資料庫內就會出現 mdw DB

[SQL] 資料收集-8

星期三, 4月 14, 2021

[C#] .NET Framework 預設 C# 版本

build .NET Freamework 專案時發現在 debug mode 不會出現的錯誤,在 release mode 都會跑出來,好在錯誤訊息明確,快速就定位 
錯誤 CS8370 在 C# 7.3 中無法使用 '目標型別條件運算式' 功能。請使用語言版本 9.0 或更高的版本。
檢查該 Project 內的 C# 版本發現,原來 debug mode 被修正為 lastest,而 release mode 還是維持在預設的 7.3,Orz

利用記事本打開 Project 專案,並搜尋到 LangVersion 就可以查到 C# 版本

[C#] .NET Framework 預設 C# 版本-2

C# 語言版本控制 內的說明截圖

[C#] .NET Framework 預設 C# 版本-1

星期一, 4月 05, 2021

[C#] IEquatable<T>

搞清楚 IEquatable<T> 觀念和使用

VS 快捷鍵可以快速 override Equals 和 GetHashCode Method


手動建立的 User Class 只包含兩個 Property
public class User
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}
在 class 上使用 Alt + Enter 就可以看見快捷功能,選擇 [產生 Equals 與 GetHashCode]

[C#] IEquatable-1

勾選 [IEquatable<User>] 選項

[C#] IEquatable-2


產生完整的 User Class Code
public class User : IEquatable<User>
{
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public override bool Equals(object obj)
    {
        return Equals(obj as User);
    }

    public bool Equals(User other)
    {
        return other != null &&
               FirstName == other.FirstName &&
               LastName == other.LastName;
    }

    public override int GetHashCode()
    {
        // VS 自動產生
        int hashCode = 1938039292;
        hashCode = hashCode * -1521134295 + EqualityComparer<string>.Default.GetHashCode(FirstName);
        hashCode = hashCode * -1521134295 + EqualityComparer<string>.Default.GetHashCode(LastName);
        return hashCode;
        
        // 查資料時發現,下列寫法比較常見
        return FirstName.GetHashCode() ^ LastName.GetHashCode();        
    }
}

Demo 範例

using System;

namespace IEquatableSample
{
    class Program
    {
        static void Main(string[] args)
        {
            User UserA = new User
            {
                LastName = "姓",
                FirstName = "名"
            };

            User UserB = new User
            {
                LastName = "姓",
                FirstName = "名"
            };

            Console.WriteLine($"UserA == UserB:{UserA == UserB}");
            Console.WriteLine($"UserA.Equals(UserB):{UserA.Equals(UserB)}");
        }
    }
}
結果

[C#] IEquatable-3