2016年10月2日 星期日

UPDATE 搭配 CASE WHEN 取代 效能不彰的 CURSOR

我們知道使用SELECT 搭配 CASE WHEN 可以用來簡單的執行邏輯判斷。例如以下的條件

假設有一個員工資料表,裡面有四筆資料

CREATE TABLE #Emp(
EmpID CHAR(4),
EmpName NVARCHAR(5),
EMPAGE INT,
SALARY INT
)


INSERT INTO #Emp VALUES('0001','王大明',36,28000)
INSERT INTO #Emp VALUES('0002','李曉華',23,30000)
INSERT INTO #Emp VALUES('0003','周星星',49,38000)
INSERT INTO #Emp VALUES('0004','劉的華',45,43600)

假設今天要調整薪水,條件如下:
-- 如果年紀在 35~ 45 ,薪水小於30000的員工,加薪 10% ,大於40000要減薪 5%

查詢語法可能會如下這樣執行
SELECT
   *,
   加薪後=CASE
    WHEN (EMPAGE >=35 AND EMPAGE <=45) AND SALARY < 30000 THEN SALARY + SALARY * 0.1
    WHEN (EMPAGE >=35 AND EMPAGE <=45) AND SALARY > 40000 THEN SALARY - SALARY * 0.05
    ELSE
    SALARY
    END

FROM #Emp

結果如下:



如果要實際更新資料表的方法很多種,但使用CASE WHEN應該是滿不錯的選擇

UPDATE #Emp
SET SALARY=
CASE
WHEN (EMPAGE >=35 AND EMPAGE <=45) AND SALARY < 30000 THEN SALARY + SALARY * 0.1
WHEN (EMPAGE >=35 AND EMPAGE <=45) AND SALARY > 40000 THEN SALARY - SALARY * 0.05
ELSE
SALARY
END








2016年9月27日 星期二

如何進行Xamarin開發環境的升版和退版動作

手機版本更新速度之快,Xamarin也不惶多讓,所以就很容易在Visual Studio 2015開發環境彈出更新通知。


於是我們透過升級介面來檢查最新版本並升級 (此例升級版本為 Ver.4.2)


只是有時更新後的下場,常常會讓開發人員抓狂 ,原本執行沒問題的專案突然就無法編譯,不然就是整個怪怪的不順暢等等。下面跟大家分享退版的步驟:

步驟一:至官網下載您要退回的版本(此案例是預計退到 Ver. 4.1.2)



步驟二:下載後並安裝。


步驟三:檢視Xamarin版本是否已退回預期的版本。


JDK編譯版本不相容的問題 (Unsupported major.minor version 52.0)

新增一個android專案

嘗試編譯會出現 Unsupported major.minor version 52.0 錯誤



您可以嘗試更新您的JDK到比較新的版本(當前顯示版本為JDK1.7)

到ORACLE官網(下載)較新的JDK版本


下載並安裝後,新版本路徑如下圖 (此例為預設64位元的路徑)


開啟Visual Studio 2015環境,修改成JDK1.8路徑


重新編譯 (強烈建議要先清除後再編譯) 


正常可以編譯,模擬器也正常啟動




2016年9月24日 星期六

Windows 10 家用版升級到專業版後,解決無法使用Visual Studio Emulator for Andorid的問題

要使用微軟提供的 Visual Studio Emulator for Android 模擬器,需搭配有Hyper-V功能的Windows 10 (專業版以上),若您是家用版透過專業版以上之金鑰來升級(如下圖)的話,下面提供我個人升級的經驗和步驟供大家參考。

步驟一:輸入合法金鑰並註冊成功後,檢查版本也都已變成專業版

當您執行Visual Studio Emulator for Android時,會出現 "Unable to add user to the Hyper-V Administrators group. Exit code 2220." 錯誤


此時您會發現電腦管理並沒有 [本機和使用者群組] 這個功能。


步驟三:下載並執行(經過一段漫長的更新動作)後,再次啟動Visual Studio Emulator for Android 就可以正常啟動了。

[本機和使用者群組]也出現囉!




2016年9月18日 星期日

Hello ASP.NET WEB API 2 (一)

開發一個ASP.NET WEB API並不困難,但您確定我們開發出來的是符合RESTFUL規範嗎?在還沒說明什麼才是符合RESTFUL規範前,我們先來快速簡單建立一個WEB API實際過程。

步驟一:新增一個專案

步驟二:選擇Web API範本,並取一個您要的專案名稱(此例專案取名為HelloWebApi)

步驟三:為了讓此教學單純,我們以靜態泛型的List當成資料來源。
  1. 為了產生泛型List,我們先在Models資料夾中建立一個Product類別,在此檔案中,我們另外再新增一個VoProduct類別,僅含三個屬性(下圖編號3)。
  2. 有了值物件後,我們在Product類別中,新增一個ProductsData靜態方法(下圖編號4),主要目的是產生四筆靜態資料(您亦可由資料庫產生資料),並回傳包含此四筆的 List

步驟四:此驟就開始設計Web Api的重頭戲了。請於Controller目錄夾新增一個 [Web AP控制器空白]

將此Controller取名ProductController


步驟五:新增ProductController後,在此檔案撰寫一個提供所有商品資訊的API。
  • 編號3:每個Controller都是繼承ApiController
  • 編號4:將所有商品資料儲存在 _productList變數中。
  • 編號5:設計一個以Get開頭的GetProducts()方法,用來回傳所有的商品資料。 
將此專案進行編譯,如果編譯過程沒有錯誤,表示我們已經撰寫好一個可提供所有商品資訊的Web API。如何測試我們寫的Web API呢?瀏覽器本身只能有POST和GET的動作,如果要測試其它諸如PUT、PATCH、DELETE等動作,可能就必須藉由JAVASCRIPT撰寫發送和接收結果的程式碼,更重要的是伺服器傳回的狀態碼更沒辦法透過瀏覽器得知。建議如果要測試WEB API可以透過 POSTMAN (下載點) 這套軟體進行測試。

步驟六:手動啟動IIS Express (參考步驟),此例的Port定義為5000

輸入好指令並執行,系統會在此目錄下(即專案目錄)啟動一個IIS Express 伺服器。(啟動後,請勿將此命令提示字元關閉)。


步驟七:開啟POSTMAN軟體。

(1)我們在ProductController類別中所建立的API方法名稱是GetProducts(),Get開頭表示Client端需要使用Get動作才能使用此API,所以我們在POSTMAN選擇GET。
(2)我們剛剛透過命令提示字元啟動一個本機端的IIS Express (埠號5000),所以網址列輸入http://localhost:5000,至於後面為什麼是 /api/product 呢 ? 這是因為預設的Route的設定,我們打開App_Start目錄夾下的WebApiConfig.cs檔案如下:


這邊預設值的設定表示存取API時,都要固定先加上一個/api/,而含有左右大括符{
controller}表示這是變數,這代表是controller的名稱。以此例來說,就是ProductController這個類別名稱的Product。當Client端的URI使用GET動作,且網址輸入的是 /api/Product/的時候,系統會去尋找ProductController類別中,符合無參數且是Get開頭的方法,並且執行此方法。因此在預設的情況下,我們命名的方法名稱已經不是那麼重要。(可透過WebApiConfig.cs設定{action}來指定全名)


至於第三個部分{id},指的就是指系統會尋找符合ProductController類別中,含有一個參數的方法,並且執行此方法。url中的參數只能用在GET方法,如果是複雜型別的參數,就需要使GET以外的動作了(如:POST、DELETE、PUT等等)。
(3) 於POSTMAN選好GET動作、URI也輸入正確後,點選Send按鈕。
(4) 下半部的藍色虛線框是主機Response部分(上半部藍色框是Request),您會發現回傳的Body內容是四筆json格式之商品資料,表示此API如預期般正常執行。
(待續)

2016年9月10日 星期六

手動啟動 IIS Express

有時為了開發方便,不見得每次都要執行F5 或 Ctrl + F5 去啟動一個aps.net專案 (如 ASP.NET WEB API專案)。我們可以手動啟動IIS Express來方便我們開發。步驟如下:

  1. 啟動命令提示字元,並將目錄夾切換到  C:\Program Files (x86)\IIS Express\   
  2. 輸入 iisexpress.exe  /path:您的網站專案目錄夾  port:/指定使用的port
    ex : iisexpress.exe /path:c:\demo\ port:/52222  
  3. 執行後,命令提示字元會顯示啟動iis express的過程(如下圖)

  4. 這時候您就可以在您的瀏覽器輸入 htpp://localhost:52222 來啟動您的網站或WEB API

2016年9月8日 星期四

Angular 2 開發環境建置


  1. 安裝Visual Studio Code (下載)
  2. 安裝Visual Studio Code的擴充套件
    1. Angular 2 TypeScript Snippets
    2. Path Intellisense
    3. TypeScript Toolbox
    4. Auto Import 
    5. refactorix
  3. 安裝Node.js (下載)
    若已安裝Node.js,請執行完整移除。步驟如下:
    1. 至控制台手動移除Node.js
    2. 於命令提示字元輸入下面指令
      (a) del "%USERPROFILE%\.npmrc" 命令 (此檔不一定存在,若錯誤不用理會)
      (b) 
      rmdir /s/q "C:\Program Files\nodejs"
      (c) rmdir /s/q "%APPDATA%\npm-cache"
      (d) rmdir /s/q "%APPDATA%\npm"  (此步驟會移除所有npm的全域套件) (過程稍久)
  4. 安裝 angular-cli
    1. npm uninstall -g angular-cli  (若沒安裝過,先移除)
    2. npm cache clean
    3. npm install -g angular-cli@webpack
    4. npm install -g gulp yo webpack rimraf typescript typings eslint tslint  (非必要)
  5. 檢查版本
    1. node -v  (node.js版本)
    2. ng -v      (確認是1.0.0-beta.11-webpack.2以上的版本)
  6. 開啟命令提示字元,驗證Angular-CLI是否能正常執行
    1. ng new test  (建立專案目錄夾,此目錄夾名稱取名為test,並在此目錄夾安裝npm和typing套件)
    2. 命令提示字元視窗切到 test目錄夾,執行 ng serve  (啟動web server)
    3. 開啟瀏覽器,網址列輸入 http://localhost:4200
  7. 瀏覽器出現app works! 字樣表示環境安裝完成。