相信很多人有這種經驗
一個複雜的查詢 讓使用者很彈性 讓程式設計師很痛苦
你想要給人查 1.商品符合關鍵字 2.價錢介於範圍值 3.產品種類的限制 4.人氣 5.庫存 ... 等條件
簡單,你爺爺我會 T - SQL,就一項條件寫一個 Where ... and ... and ... and ... and ... and ...
判斷的方式用 C嚇 IF ELSE 就搞定了呀
code大概會長這樣
但是芳芳說:自己codeing寫一堆,麻煩做,聰明小孩就交給微軟 xxxTableAdapter 兩行就搞定了
既是強型別,又能直接造方法
但是查詢方法一種要造一個方法來查
以下正題。
其實沒那麼恐怖,T - SQL就能搞定,只要寫一個方法
先實驗T - SQL
DECLARE @uid int, @rank_id int, @bonus int, @bonusMoreThen int
DECLARE @account nchar(20), @password nchar(20)
DECLARE @email nchar(50), @name nvarchar(50), @nickname nvarchar(50), @phone nvarchar(50), @residence nvarchar(50)
DECLARE @date datetime, @birthday date
DECLARE @gender bit, @employee bit
set @uid = null
set @rank_id = null
set @bonus = null --123
set @bonusMoreThen = null --500
set @account = null
set @password = null
set @email = null
set @name = null
set @nickname = null
set @phone = null
set @residence = null
set @date = null
set @birthday = null
set @gender = null
set @employee = null
select * from account
where rank_id = IsNull(@rank_id,rank_id)
and bonus = IsNull(@bonus,bonus)
and bonus > IsNull(@bonusMoreThen,1)
and account = IsNull(@account,account)
and password = IsNull(@password,password)
and email = IsNull(@email,email)
and name = IsNull(@name,name)
and nickname = IsNull(@nickname,nickname)
and phone = IsNull(@phone,phone)
and residence = IsNull(@residence,residence)
and date = IsNull(@date,date)
and birthday = IsNull(@birthday,birthday)
and gender = IsNull(@gender,gender)
and employee = IsNull(@employee,employee)
前大半是宣告參數不用管,後面是把14個條件都寫出來
最神奇的是使用了 IsNull()函數
IsNull()函數 接受2個參數,當第一個參數不為Null時 使用第一個參數,當第一個參數為Null時 使用第二個參數
參數不為Null就像是使用者選定了條件來查詢,所以 Where 欄位 = 參數 來查詢特定條件
參數為Null就像是使用者沒給條件就查詢,所以 Where 欄位 = 欄位
這是什麼意思呢,舉例來說就像是 Where 1 = 1 等於這個條件恆為真,所以會查到所有的資料
也可以理解成 Where 欄位 = 任意值 (因為 目前查詢到的值 等於 目前查詢到的值 ex:Where account = account)
因為預設沒設定參數就是不管這行條件,所以讓這行恆為真,再加上所有條件是以AND串連,就等於不管這行條件的意思
然後是TableAdapter查詢組態精靈裡面的語法
不用管變數宣告了 微軟幫你搞定了 真那麼好奇可以移至定義 (人生在世不需要什麼都知道)
好啦,大成功
以上