前言:
下面看一下新版本的修改記錄
實用:
1:maction:select方法增加重載:select(string where);
2:formatwhere處理了"parent is null"的"is"關鍵字;處理"order by"語句補充為"1=1 order by ..."
3:maction增加exists方法
4:mdatarow 增加toentity<t>()方法轉實體
5:允許更新null值到資料庫中
事務:
6:修正事務二次復原的錯誤,即連續調用兩次action.rollback();
7:修正二次啟動事務。
緩存:
8:緩存增加set方法,無則添加,有則更新
9:大力修改cache機制,使資訊更容易檢視.[定時清緩存]
其它:
10:mdatarow 重寫clear()方法,該方法将清除行的資料[即資料重置為null]
11:aop的end方法修改傳回值為mdatarow和mdatatable結果集
12:修正ormbase轉實體時值為dbnull.value的轉換異常
下面進行詳細的解說
一:實用性功能介紹
1:maction:select方法增加重載:select(string where)
在v4.3及之前版本,僅存在以下兩個原型方法:
public mdatatable select()
public mdatatable select(int pageindex, int pagesize, string where, out introwcount)
有很多人使用習慣:select("where語句");然後發現where語句不起作用,全部資料都查出來了,然後糾結的問起這個問題。
原因:
不存在該重載方法。為何不報錯?有點迷惑。
因為預設有aop功能,該參數會變成aop參數傳給aop功能使用,多數人不了解aop,是以第一次使用上容易引發此問題。
本次增加了重載的方法,一來适應大衆使用習慣,二來也消除掉一些迷惑。
問題1:action.select(1,10,"parent is null",out count);
原因:會被解析成id="parent is null",是以條件将失敗。
解決方法:action.select(1,10,"1=1 and parent is null",out count);
可以的原因:因為有"="号或其它符号時,則不會被解析成id=xxx的形式。
本次增加is解析,解決了這個問題。
問題2:action.select(1,10,"order by id desc",out count);
原因:内部組裝為:“...where"+"order by id desc",sql語句文法錯誤
解決方法:action.select(1,10,"1=1 order by id desc",out count);
可以的原因:組成:"...where+“1=1 order by id desc",這樣組裝就正常能過了。
本次自動補充1=1字首。以後可以放心的直寫order by語句了。
早期的判斷:if(action.getcount(where語句)>0){}來判斷。
此次增加後判斷:if(action.exists(where語句)){},表達上看更前進了一些。
在很多網友的使用中,還是有很多使用實體類的使用者。
cyq.data中可以通過:action.select().tolist<t>(),将表轉成實體類。
不過對于單行實體類,一直沒此功能,此處增加功能後,即可:
if(action.fill(id)){userinfo info=action.data.toentity<userinfo>();}
可以填充後轉實體類操作。
本次增加的功能,允許你設定:
action.set(字段,null)或者action.set(字段,dbnull.value);
然後通過action.update();将null值更新回資料庫。
二:事務
6:修正事務二次復原的錯誤[連續調用兩次action.rollback()]
在之前版本中,連續調用兩次action.rollback()來復原兩次事務是會抛異常的,
雖然一般你不會這麼做,但還是處理了一下。
7:修正二次啟動事務
一個maction中,如果你結束掉事務之後,是無法啟動第二個事務的。
本次修正後可以在一個maction中多次啟用關閉事務。
三:緩存
8:9:本次版本更新到最新版本緩存機制。
四:其它
10:mdatarow 重寫clear()方法:該方法将清除行的資料[即資料重置為null]
最後:
版權聲明:本文原創發表于部落格園,作者為路過秋天,原文連結:
http://www.cnblogs.com/cyq1162/archive/2011/05/06/2038712.html