星期二, 8月 24, 2021

[C#] 匯出本機資源圖檔

要修正 Button 控件上的圖示時發現,怎麼在專案資源檔內找不到圖檔

[C#] 匯出本機資源圖檔-2

發現當初匯入為本機資源
 
[C#] 匯出本機資源圖檔-1

查了一下才知道本機資源的圖檔,要在 resx 內找 

Image 003
 
在 resx 內找到圖檔,就可以順利匯出囉

[C#] 匯出本機資源圖檔-4

星期三, 8月 18, 2021

HPM404dn - 雙面列印預設值

使用者回報報表列印異常,到現場才發現說,這台新印表機怎麼會雙面列印,在印表機設定上沒有雙面列印選項可以調整,只能透過軟體把預設雙面列印功能關閉


  HPM404dn - 雙面列印

星期二, 8月 17, 2021

紙張類型提示

使用者回報說,每次開關 2 號紙匣都會出現該提示,來詢問是否可以關閉 

訊問訊息

    紙張類型提示-1

在 HP 印表機內找到該設定,可以關閉該詢問

紙張類型提示-2

星期五, 8月 13, 2021

[C#] FastMember

在公司內發現該套件 - FastMember,了解如何使用它,簡易筆記一下
using FastMember;
using System;
using System.Linq;

namespace FastMemberDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            TypeAccessor Accessor = TypeAccessor.Create(typeof(Employee));
            MemberSet Members = Accessor.GetMembers();

            Console.WriteLine("------- Member 相關");
            Console.WriteLine("-- 只列出公開屬性,所以沒有 Status");
            foreach (Member m in Members)
            {
                Console.WriteLine(m.Name);
            }

            Console.WriteLine("-- 屬性存在測試");
            string PropertyName = "PropertyNotExists";
            if (Members.Any(m => m.Name == PropertyName) == false)
                Console.WriteLine($"該屬性 {PropertyName} 不存在");

            Console.WriteLine("------- Accessor 相關");
            Console.WriteLine("-- Property 取值和設定測試");

            Employee employee = new Employee()
            {
                EmployeeID = 1,
                EmployeeName = "員工姓名",
                Birthday = new DateTime(2021, 8, 13)
            };

            // 設定 Property 值
            Accessor[employee, nameof(Employee.EmployeeName)] = "哇係 FastMember 啦";
            Console.WriteLine($"透過 FastMember 設定 EmployeeName:{employee.EmployeeName}");

            // 取得 Property 值
            DateTime birthday = (DateTime)Accessor[employee, nameof(Employee.Birthday)];
            Console.WriteLine($"生日為 {birthday}");
        }
    }

    public class Employee
    {
        public int EmployeeID { get; set; }

        public string EmployeeName { get; set; }

        public DateTime Birthday { get; set; }

        /// <summary>
        /// 故意設定為 private 來測試的
        /// </summary>
        private bool Status { get; set; }
        
        public int? Age { get; set; }        
    }
}

[C#] FastMember

星期三, 8月 11, 2021

[SQL] 利用視窗函數進行彙總統計

Line 社群上看見的討論,沒拿視窗函數進行資料彙總統計過,拿 AdventureWorks 來測試並筆記一下
-- 建立測試 Index 
CREATE INDEX IX_SalesOrderDetail_ProductID ON [Sales].[SalesOrderDetail] (ProductID)
INCLUDE(OrderQty)

-- 常使用的 Group By 彙總方式
SELECT 
	ProductID ,
	SUM(OrderQty) AS OrderQty
FROM [Sales].[SalesOrderDetail]
WHERE ProductID = 707
GROUP BY ProductID

-- 視窗函數彙總方式
SELECT 
	DISTINCT
	ProductID ,
	SUM(OrderQty) OVER (PARTITION BY ProductID ORDER BY ProductID)
FROM [Sales].[SalesOrderDetail]
WHERE ProductID = 707
以上兩種方式可以獲得相同結果,但在效能上會有差異

statistics io 比較

Group By視窗函數
Logical Read1010
Worktable6235
Workfile0

執行計畫成本比較

[SQL] 利用視窗函數進行彙總統計

所以兩這最大差異還是在視窗函數會使用到 Temp Table 來整理資料

視窗函數執行計畫