2017年12月26日 星期二

設計模式 (簡述)

*要感謝Bill叔的課程教導,讓我透過很多實際的經驗來瞭解設計模式


設計模式的誕生主要是要來解決一些常出現的問題,並讓程式碼可以更方便為擴充跟維護,
我自己的理解也滿簡單的,就是簡化程式複雜程度。

通常只要多去想如何符合一些好的開發原則,如 SOLID原則,這樣自然能夠把不自覺的設計模式融入自己的程式中,不用刻意去套,只要能很好的解決需求的模式就是好模式..XD


以下我以解決問題的角度去做分類 :

處理生成問題 :
  • 工廠方法
    • 簡單工廠模式
    • 泛型工廠模式
    • 抽象工廠模式 (整族抽換)
  • Singleton模式
  • Prototype模式
  • Builder模式
處理分支問題
  • Chain of Responsibility責任鏈模式
  • Strategy策略模式
  • State狀態模式
處理結構問題
  • Facade模式
  • Decorator裝飾模式
  • Proxy代理模式
處理行為、流程問題
  • Template樣版模式
  • Memento模式

等等
之後有時間我會陸續補上其他部分



2017年10月5日 星期四

[SQL] 倒序搜尋

如果在sql中url欄位我需要撈出下述的1551066.html就好,該如何?

ex.http://you.ctrip.com//travels/taipeicity360/1551066.html

select right([Url], charindex('/', reverse([Url]) + '/') - 1)

2017年9月5日 星期二

[SQL] SELECT INTO跟INSERT INTO的差別

轉載 :  https://goo.gl/a6PvXF

SELECT INTO可以into進去暫存的table也可以into實體table,
INSERT INTO只能into實體的table。
實體:SELECT ~ INTO table2 FROM table1
虛擬:SELECT ~ INTO #table2 FROM table1


也就是說,如果使用SELECT INTO
後面的table2如果本來就有,他就直接塞資料;
如果本來就沒有table2,他會新建一個table2,再塞資料。


加了#的意義就是,into進去後,
把Query關掉,重新開啟一個Query,table2就不見了,等於是暫存性的。


當然假如不加#的話,table2就會一直保留著。


另外SELECT INTO如果是實體用法,可以等同於:
INSERT INTO table2 (.....)
SELECT ~ FROM table1

2017年8月4日 星期五

[SQL] 小數點去除多餘0

可以使用cast as float 先轉型~

image

結果

image

2017年8月1日 星期二

IIS 上使用到Office COM元件


最近網站有使用到excel內的函式運算 :

Microsoft.Office.Interop.Excel


在本機run都ok, 但放到IIS上卻出現error :

擷取元件 (CLSID 為 {00024500-0000-0000-C000-000000000046}) 的 COM Class Factory 失敗,因為發生下列錯誤: 80070005 存取被拒。 (發生例外狀況於 HRESULT: 0x80070005 (E_ACCESSDENIED))。


解法 : https://dotblogs.com.tw/v6610688/2015/02/19/iis_office_access_word_excel_com_interop_api_configuration

原因就是要設定權限並打開~

2017年7月19日 星期三

[C#] dataset 是唯獨 不能修改問題

今天維護一個有點年紀的程式

此程式是用datareader 讀去資料後放到data set

我需要進一步修改data set 卻報出唯獨不能修改…orz

查了一下才發現使用data Reader來讀資料load 進 dataset還會是唯獨狀態

因此我必須改動狀態才能進行更新.

所以要再加上類似下述

datatable.columns["name"].ReadOnly = false;


---

參考 : https://goo.gl/53dtqt

2017年5月8日 星期一

[C#] 日期時間

 

以下是特定時間與當下時間差做比較,並以小時表示

var timeDiff = new TimeSpan(BeginTime.Ticks - DateTime.Now.Ticks).TotalHours;