天天看點

CYQ.Data V5 MAction新增加SetExpression方法說明

需求:

解決方案:

1:如果用maction操作,可能會如下代碼:

CYQ.Data V5 MAction新增加SetExpression方法說明

using(maction action=new maction(表名))

{

if(action.fill(id))

    action.set(字段名,action.get<int>(字段名)+1);

    action.update();

}

CYQ.Data V5 MAction新增加SetExpression方法說明

簡單的說,就是需要查詢出值,然後再用原值進行相關的操作,用這種代碼代價就是要多查一次。

2:另一種方式高性能的是使用mproc來直接操作sql語句,可能會如下代碼:

using(mproc proc=new proc("update 表名 set 字段名=字段名+1"))

proc.exenonquery();

用mproc基本是萬能的了,直接處理sql語句和存儲過程。。。

大夥習慣了maction多,是以希望maction也有個順路功能:

CYQ.Data V5 MAction新增加SetExpression方法說明

不過好多人習慣用maction,都圖個友善,連條sql語句也想省一下。。。

事實上,我本人在多個項目中,也有這種需求,當然最後都是直接使用mproc處理了。

很多時候,我一直在尋找一種最優方式,能處理這種值+1,值-1的問題,不過每每看着架構,不好下手,一直沒找到切入點和使用方法。

CYQ.Data V5 MAction新增加SetExpression方法說明

比如一開始想的:

action.set(字段名,“[字段名]+1”);

action.update("id=1");

但是這種方式,實作起來,沒想象的簡單,而且這值是字元串還是表達式?分不清也說不明,是以一直卡在以何種使用方式上。

cyq.data 架構設計原則:

cyq.data 架構的設計,很多時候,是先思考使用的方法,再去想怎麼實作的,先想象出最簡單的使用方式,再去想能不能實作,而不是實作了一個功能,卻很難使用。

為此,但網友又對我提出這種需求的要求時,我又花了n個小時,看着代碼發呆,每次我思考問題或有某項功能時,我都會看着代碼發呆幾個小時。。當然是在不停的思考。。

後來終于設計出最終解決方案:

CYQ.Data V5 MAction新增加SetExpression方法說明

action.set(字段名,值);

action.setexpression(“字段名=字段名+1”);

action.setexpression(“字段名=len(字段名)+1”);

action.update();

CYQ.Data V5 MAction新增加SetExpression方法說明

通過增加一個表達式方法,基本上有點萬能了,事實在後端,組成的update語句大體為:

update 表名 set 表達式,字段名=@字段名 where ...

簡單說,就是表達式隻是簡單的被附加到原來的set的後面,最終被組裝成sql執行,當然了,如果你想進階點用參數化也是可以的。

CYQ.Data V5 MAction新增加SetExpression方法說明

            using (maction action = new maction("blog_class"))

            {

                action.setexpression("count=count+@value");//表達式更新帶參數化。

                action.setpara("value", 2, dbtype.int32);//設定參數化值

                action.update();

            }

CYQ.Data V5 MAction新增加SetExpression方法說明

到此,基本上有表達存在,可以處理n種不同的需求了,友善性提升了不少。

補充: 

不小心把文章“隻允許注冊使用者通路”給打上勾了,結果發現注冊使用者的閱讀數僅88,根據統計,還有近27個是為了看文章被逼登陸了一下。

周末的行情通路量這麼低?大夥都跑哪去偷情了?

CYQ.Data V5 MAction新增加SetExpression方法說明

版權聲明:本文原創發表于部落格園,作者為路過秋天,原文連結:

http://www.cnblogs.com/cyq1162/archive/2013/05/05/3060543.html