繼續上一篇《ASP.NET開發,從二層至三層,至面向對象 (3)》http://www.cnblogs.com/insus/p/3826706.html 。我們更深層次學會了邏輯層對象,即各個具體對象與數據庫之間的邏輯類。 我們有分為有處理Access的SQL語句和SQL Server的SQL語句的,還有處理存儲過程和參數的。
今天Insus.NET再從處理SQL語句對象,再創建一個對象叫SqlStatement吧。讓用戶引用這個類時,無需再寫SQL語句,只管傳入字段,或值,或條件。
實現之前,我們先想一想,SQL語句有SELECT,UPDATE,DELETE,INSERT四種,其中有些SQL語句還需要帶條件。細節如下,
SELECT語句:
SELECT * FROM table
SELECT * FROM table WHERE xxx= yyy
SELECT col1,col2,...FROM table
SELECT col1,col2,... FROM table WHERE xxx= yyy
UPDATE語句:
UPDATE table SET xxx= yyy WHERE zzz=aaa
DELETE語句:
DELETE FROM table WHERE xxx= yyy
INSERT語句:
INSERT INTO table(col,col2) VALUES(xxx,yyyy)
這個類有兩個property,是為了讓用戶在SELECT,INSERT或是更新時,能傳入所顯示,插入或是更新的字段。
接下來,我們再創建一個WHERE條件類,如Condition,它是讓用戶在SELECT帶有WHERE條件,當然在更新或是刪除時,SQL語句是少不了條件。
這個類,它有三個property。field是指定字段,operators是操作, 你是使用"=",">"還是“<"等,最后一個property為指值。
OK,現在我們可以創建可封裝的類SqlStatement,看看:
寫到這里,也許會有網友會問題,有些情形上面的無實現。Insus.NET想,這畢竟是SQL語句,它比起存儲過程來說,一些不足之處,自然顯示出來,因此Insus.NET一直在使用存儲過程的原因。上面這個SqlStatement類,還是可以擴展的。這需要發揮個人的想象力了。
為了能讓大家能更好的使用。下面Insus.NET重構前幾篇寫好的類Item,改為應用這個SqlStatement類。
先來看看GetAll()方法,注釋掉的語句,是原來的方法:
讓你自動產生SQL語句。
如果是SQL數據庫,最后兩句:

BizBaseSQL objBizBaseSQL = new BizBaseSQL(); objBizBaseSQL.Sql = objSqlStatement.GenerateSelectStatement(); return objBizBaseSQL.ExecuteDataSet().Tables[0];
下面是重構Insert()方法,數據添加,有地方需要注意的,在處理字段時,SELECT語句,值傳入的是null,而插入的SQL語句,需要把value傳入property。當然你寫UPDATE更新時,也應如此。上面的SqlStatement類, Insus.NET並沒有寫處理當沒有值,需要讓動態產生的SQL有傳入為null,如[xxx] = null等。
刪除方法,需要傳入WHERE條件。下面Insus.NET只是演示傳入單個條件,如果WHERE條件中,還帶有OR,AND等時,如何傳,需要想一想。
下面是重構獲取標量的方法,也就是讓程序能執行ExecuteScalar()方法:
這幾篇中,沒有演示過更新的方法。因為BizBase或者BizBaseSQL類的幾個方法,均有演示。不過Insus.NET在下面還是列舉一個更新的方法,也就是為Item類,有update()方法:
本篇演示源程序(Access DB; .NET Framework 4.0;):
http://download.cnblogs.com/insus/ASPDOTNET/Asp_OOP4.rar
注:文章太長了,寫成續集,請關注......