Pages

2014-08-27

SQL Express免費版資料庫限制

SQL Server Express是免費版的SQL Server,主要差別是檔案Size的限制,超出時錯誤如下:

Limit Size Error

SQL Express 2005/2008
1CPU, 1GB RAM(Per Instance), 4GB DB Size (Per Database Size)

SQL Express 2008 R2/2012/2014
1CPU, 1GB RAM(Per Instance), 10GB DB Size (Per Database Size)

SqlExpress Logo

2014-08-20

MVC的App_Code裏的自訂類別無法被引用?

當你在MVC專案裏想在App_Code目錄下新增Helper類別,你會發現在專案裏總是無法使用它,明明都有using namespace路徑仍是看不到。原來該Class檔案右鍵屬性裏的Build Action預設是Content,必須改成「Compile」該Class才能被辨別。

App_Code Custom Class

一個平時沒注意的小細節,總是讓人白白花了好多時間尋找原因。

 Build Action

2014-08-13

提高程式SQL字串的易讀性

查詢資料通常會依UI輸入條件,最後得到要送往DB執行的SQL字串,以下面查詢畫面為例:

Query Conditions

常見的組合SQL字串之實作方式約有:

  1. 在字串接龍裏,透過IF-ELSE判斷輸入來組合SQL文串,然而邏輯判斷及SQL字句夾雜,維護不易,加上還要考慮WHERE AND的字句及分頁語法,混亂不堪。
  2. 撰寫特殊的SQL Composer物件,依UI控制項輸入加入相關SQL子句,最後輸出完整字串。其缺點是要查看及測試SQL字串不易,遇上很複雜的多個SQL指令文本,愈寫愈複雜。

以上的作法我都實作過,甚至為了跨不同資料庫對於不相容的SQL語句作自動轉換(如LIMIT分頁),但總覺得不是很滿意,因為程式裏的SQL字串應該要能「非常輕易」貼到管理工具去交叉測試執行才對。因此提出了以下的寫法,既簡單又好理解,供大家參考。

SQL String

先將要執行的完整SQL做好斷行排版及註解(這是程序員的專業素養),再加入StringBuilder類別(加上@即可斷行),每一個過濾條件前加入辨別代碼(標示1-2),最後再判斷UI控制項上是否有輸入值,替代文本變數即可。

Replace Identity Phrase

本身這些AND條件就已註解不會執行,替代成空白字元等同執行,如此一來非常好維護SQL及作事前的資料測試。我也習慣在SQL文本前端加入SQL變數宣告,方便程序員作測試及提醒輸入條件的參數指定。