🚫 Ad Blocker Detected

Please disable your AD blocker to continue using this site. Ads help us keep the content free! please press keyboard F5 to refresh page after disabled AD blocker

請關閉廣告攔截器以繼續使用本網站。廣告有助於我們保證內容免費。謝謝! 關閉後請按 F5 刷新頁面

0%

如果要製作月報…但只有給起訖日

pic

要產生出如下的列表 要怎麼辦…

pic

第一個想到的解法 會使用 WHILE + [暫存表] 迴圈遍歷 把每個月新增入暫存表中

程式碼如下:

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
DECLARE  @t TABLE
(
StartDate DATETIME,
EndDate DATETIME
);

INSERT INTO @t
( StartDate, EndDate )
VALUES ( '2017/01/01', -- StartDate - datetime
'2018/01/01' -- EndDate - datetime
);

--宣告一個起始時間變數
DECLARE @TempStartDate DATETIME
DECLARE @TempEndDate DATETIME

--設置變數 最小時間(起始時間) 和 最大時間
SELECT @TempStartDate = StartDate,@TempEndDate=EndDate
FROM @t

CREATE TABLE #TEMP(Dates DATETIME)

WHILE(@TempStartDate < @TempEndDate)
BEGIN
--將資料新增入暫存表
INSERT INTO #TEMP (Dates) VALUES (@TempStartDate)
--每跑一次迴圈就加一個月
SELECT @TempStartDate = DATEADD(MONTH,1,@TempStartDate)
END

SELECT * FROM #TEMP

DROP TABLE #TEMP

但這個解法雖然簡單..但程式碼又臭又長..

Q: 有沒有更好看的解法又可達成目的呢?

ANS: 有!! 就是本次主角 CTE 遞迴

Read more »

如果要製作月報…但只有給起訖日

pic

要產生出如下的列表 要怎麼辦…

pic

第一個想到的解法 會使用 WHILE + [暫存表] 迴圈遍歷 把每個月新增入暫存表中

程式碼如下:

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
DECLARE  @t TABLE
(
StartDate DATETIME,
EndDate DATETIME
);

INSERT INTO @t
( StartDate, EndDate )
VALUES ( '2017/01/01', -- StartDate - datetime
'2018/01/01' -- EndDate - datetime
);

--宣告一個起始時間變數
DECLARE @TempStartDate DATETIME
DECLARE @TempEndDate DATETIME

--設置變數 最小時間(起始時間) 和 最大時間
SELECT @TempStartDate = StartDate,@TempEndDate=EndDate
FROM @t

CREATE TABLE #TEMP(Dates DATETIME)

WHILE(@TempStartDate < @TempEndDate)
BEGIN
--將資料新增入暫存表
INSERT INTO #TEMP (Dates) VALUES (@TempStartDate)
--每跑一次迴圈就加一個月
SELECT @TempStartDate = DATEADD(MONTH,1,@TempStartDate)
END

SELECT * FROM #TEMP

DROP TABLE #TEMP

但這個解法雖然簡單..但程式碼又臭又長..

Q: 有沒有更好看的解法又可達成目的呢?

ANS: 有!! 就是本次主角 CTE 遞迴

Read more »

小弟之前有分享過串接【財政部查詢類電子發票API】小框架使用文

使用文連結 快速使用財政部電子發票API 使用 C#
串接文件下載 電子發票查詢API 1.4.4
程式原始碼連結

這次想跟大家分享我做出此框架的歷程..


框架目的:希望可以做出方便日後維護擴展的API。

串接API時發現他們有幾個共同之處

  1. API請求參數名稱需降冪排列
  2. 請求參數最後會加上簽章
  3. 都有時間戳記
  4. 回應資料格式都是Json
  5. 都是使用Http (Get or Post)

 

我就想到可以使用 工廠模式來實作這系列產品 (工廠模式主要是切割產品的使用和生產)

產品解說

Read more »

小弟之前有分享過串接【財政部查詢類電子發票API】小框架使用文

使用文連結 快速使用財政部電子發票API 使用 C#
串接文件下載 電子發票查詢API 1.4.4
程式原始碼連結

這次想跟大家分享我做出此框架的歷程..


框架目的:希望可以做出方便日後維護擴展的API。

串接API時發現他們有幾個共同之處

  1. API請求參數名稱需降冪排列
  2. 請求參數最後會加上簽章
  3. 都有時間戳記
  4. 回應資料格式都是Json
  5. 都是使用Http (Get or Post)

 

我就想到可以使用 工廠模式來實作這系列產品 (工廠模式主要是切割產品的使用和生產)

產品解說

Read more »

今天和大家分享AwesomeProxy.Net小弟開源AOP輕型框架

簡單介紹 AOP (Aspect-Oriented Programming)

AOP 是 OOP(物件導向)一個變化程式撰寫思想。(非取代OOP而是擴充)

導入AOP幫助:
可幫我們分離核心邏輯非核心邏輯代碼,很好降低模組間耦合性,已便日後擴充。

  非核心邏輯代碼像:(日誌記錄,性能統計,安全控制,事務處理,異常處理等代碼從業務邏輯代碼中劃分出來)

例如下圖:

https://ithelp.ithome.com.tw/upload/images/20180209/20096630UyP6I4l2MB.png

  原本寫法把寫日誌相關程式寫入,業務邏輯方法中。導致此方法非單一職則。我們可以把程式重構改寫成(右圖),將寫日誌方法抽離出來更有效達成模組化。

經典例子:

Asp.Net MVC中Contoller,Action過濾器(FilterAttribute)

Read more »

今天和大家分享AwesomeProxy.Net小弟開源AOP輕型框架

簡單介紹 AOP (Aspect-Oriented Programming)

AOP 是 OOP(物件導向)一個變化程式撰寫思想。(非取代OOP而是擴充)

導入AOP幫助:
可幫我們分離核心邏輯非核心邏輯代碼,很好降低模組間耦合性,已便日後擴充。

  非核心邏輯代碼像:(日誌記錄,性能統計,安全控制,事務處理,異常處理等代碼從業務邏輯代碼中劃分出來)

例如下圖:

https://ithelp.ithome.com.tw/upload/images/20180209/20096630UyP6I4l2MB.png

  原本寫法把寫日誌相關程式寫入,業務邏輯方法中。導致此方法非單一職則。我們可以把程式重構改寫成(右圖),將寫日誌方法抽離出來更有效達成模組化。

經典例子:

Asp.Net MVC中Contoller,Action過濾器(FilterAttribute)

Read more »

我們在寫網站一定會使用到 Session
今天就跟大家分享自製微型 Asp.net Session

分析Session->實作Session->使用Session

在實作之前您必須先了解甚麼是Session
網路上一大堆介紹Session文章在此我就不多介紹
或可以點進之前小弟的介紹文來簡單了解 SessionID.cookie,Session傻傻分不清楚??

簡單說明:
Http協議是一個無狀態協議。

核心是 請求=>處理=>回應

每次請求都是獨立不會記住上一次做了甚麼
Session可以幫我們把資料存在Server記憶體,方便我們下次請求使用
上網連線眾多使用者,Server怎麼知道哪份資料,屬於哪個使用者的? 這就要依靠 SessonID
SessionID就像使用者的號碼牌,可以到Server拿相對應的資料

分析:

  1. 使用者請求頁面時會攜帶該網域下Cookies。
  2. Asp.net接收到並使用Key為SessionID的Cookie,使用Cookie的Value來SessionPool中查找屬於使用者的Session。
    如果是第一次請求或是沒有SessionID 會幫他產生一個新的並加入回應的Cookie中
  3. 取得Session物件後就可以在程式中使用。

分析如下圖:

Read more »

傳址,傳參考,傳址 是基本但重要的概念。此概念在很多語言都通用

我使用Gif動畫檔 快速帶領大家了解 傳址,傳參考,傳址

  1. 傳值(Call By Value)

    顧名思義 是把傳到 另一個記憶體位置

https://dotblogsfile.blob.core.windows.net/user/%E4%B9%9D%E6%A1%83/e39d0fd8-5258-4484-949c-3019082ff20e/1519627294_92268.gif

  1. 傳址 (Call By Adress)

是把記憶體位置傳到 另一個記憶體位置

補充:嚴格來說(Call By Adress)是不正統的說法,其實傳址也是傳值但傳的是記憶體位置

https://dotblogsfile.blob.core.windows.net/user/%E4%B9%9D%E6%A1%83/e39d0fd8-5258-4484-949c-3019082ff20e/1519627835_01874.gif

  1. 傳參考(Call By Reference)

    是把記憶體位置傳到 移到另一個記憶體位置上 (可看作同一個物件)

https://dotblogsfile.blob.core.windows.net/user/%E4%B9%9D%E6%A1%83/e39d0fd8-5258-4484-949c-3019082ff20e/1519627909_09266.gif

Read more »

Asp.net使用快取 (一)

向大家簡單介紹

  1. 快取是什麼
  2. 為何要使用快取
  3. 使用簡單HttpRuntime.Cache使用快取機制

這篇是分享把快取程式碼變得更有彈性


第二篇大綱

  1. 提出介面,提高可替換性
  2. 使用泛型改寫快取 讀取方式
  3. 使用擴充方法改寫快取

提出介面,提高可替換性

情境:

Read more »

最近回答SQL Server data caching in ASP.NET問題,且有人問我有關快取的問題.

所以小弟打算寫兩篇文章簡單分享我知道的快取


目錄:

第一篇

  1. 為何要使用快取
  2. 快取操作
  3. Asp.Net中使用快取 by HttpRuntime.Cache

第二篇

  1. 提出介面,提高可替換性
  2. 使用泛型改寫快取 讀取方式
  3. 使用擴充方法改寫快取

正文

Read more »