ASP實作ActiveRecord資料查詢更新
引言:
用過PHP框架ThinkPHP或CI框架的同學,都知道這些框架自帶的資料查詢ActiveRecord用來查詢資料和更新資料想到方便,
不單它們,很多PHP框架都支援ActiveRecord,省去了寫過多繁瑣的原生態SQL查詢語句,專案維護更加方便。
現在我們也用在Asp程式碼上進行模擬.已經成功的應用於「基於AspBox框架的AppCore」的應用程式上。
應用核心程式碼是從AppCore裡進行分離。
==================================================== ===============
【一】:查詢數據
a.取得結果:
檢視輸出SQL語句:Dao.getSQL()用法
別名Dao.lastSQL()
eg
Response.WriteDao.T("media").Top(10).lastSQL
Dao.Query()用法
dimrs
dimtb_prefix:tb_prefix=Dao.tbPrefix'資料表前綴
Setrs=Dao.Query("selecttop10id,namefrom@media").Result()
等同於:Setrs=Dao.Query("selecttop10id,namefrom"tb_prefix"media").Result()
Dao.List()用法
dimlist
list=dao.t("media").select("id,name").top(10).List()
註:list'傳回一個二維數組
dimi,id,name
Fori=0ToUbound(list,2)
id=list(0,i)
name=list(1,i)
Response.Writeid":"name""
Next
Dao.Result()用法
別名Dao.GetRs()或Dao.Fetch()
dimRs
SetRs=Dao.T("media").select("id,name").top(10).Result()
ab.traceRs
DoWhilenotRs.eof
Response.WriteRs("id")":"Rs("name")""
Rs.MoveNext
Loop
Dao.Row(n)用法(n表示取得第n+1行資料)Dao.Row(0)表示取第一行資料
dimRs
SetRs=Dao.Query("selecttop10id,namefrom@media").Row(4)'取得第5行數據
IfNotRs.EofThen
Response.WriteRs("id")":"Rs("name")
EndIf
b.查詢條件:
Dao.T()用法和Dao.From()用法等同
Dao.Select()用法和Dao.Field()用法等同
Dao.Where()用法與Dao.Find()用法:
註:Where用法和Find用法基本上差不多,都是條件篩選資料。
Find用法更靈活,可以用Dao.Find("1,3,5")來查詢自動編號(id)為1,3,5的數據
Dao.Find("1,3,5")又可以用以下寫法:
Dao.Find(Array(1,3,5))
Dao.Find("idin(1,3,5)")
Dao.Where("idin(1,3,5)")
Dao.Where("id=1orid=3orid=5")
Dao.Limit()用法:
模擬mysql的limit(offset,rows)用法
用法:
limit(0,0)取全部資料(第1條(0+1=1)資料開始到結束的資料)
limit(0,1)取從(第1條(0+1=1)數據開始的1條數據,即:第1~1條)(共1條)
limit(3,0)取從(第4條(3+1=4)數據開始到結束的數據,即:第4~最後一條)
limit(2,5)表示第3條(2+1=3)數據開始的5條數據,即:第3~第7條)(共5條)
limit(1,2)表示第2條(1+1=2)數據開始的2條數據,即:第2~第3條)(共2條)
limit(4,6)可以這麼算:表示第4+1=5條到第4+6=10條)(共6條)
@注意:Limit用法只能用於查詢,不能用於Rs資料更新!
Dimrs
Setrs=Dao.T("test").Where("pid=1").Limit(0,5).Fetch()
附,查詢範例:
Dao.T("test").field("id,name").where("id>0").order("createtimedesc,iddesc")
Dao.T("test").select("id,name").top(10)
Dao.T("test").select("id,name").order("Rnd(ID)")
Dao.t("user").where("id<>{rq:id}andemail='{rq:email}'").find("id>5").result()
limit條件查詢
Setrs=Dao.T("media").field("id,name").limit(1,5).Fetch()
完整的查詢範例:
dimsql
sql=dao.select("id,name").from("media").where("id>10").join("table2").on("table2.cid=user.cid").order ("iddesc,cidasc").group("id").having("id>5").union("select*fromtablexx").getSQL
===============
【二】:修改數據
新增資料:Dao.Add()
修改資料:Dao.Update()或Dao.Set()
刪除資料:Dao.Del()或Dao.Delete()
智慧保存資料(新增或修改):Dao.Save()
更新某個欄位值Dao.setField()
Dao.AffectedRows()或Dao.affRows()傳回影響的行數
dimo_ds,arr(5),str
Dao.t("user").where("id=14").del()
Dao.t("user").delete("1,3,5")
Dao.t("user").where("id=13").set(Array("username:55"))
Dao.t("user").where("id=13").setField("name","aaa1111")
Dao.query("update@usersetusername='ttt'whereid<7").exec()
Dao.query("delete*from@userwhereid>7").exec()
response.writeDao.AffectedRows()'影響的行數
Dao.t("user").add(Array("username:tttt","password:5fe84ad35fb5f95b","email:[email protected]"))
arr(0)="id>5"
arr(1)="time>#1986#"
arr(2)="oradd=555"
response.writedao.t("media").where(arr).lastSQL()
Seto_ds=Server.CreateObject("scripting.Dictionary")
o_ds("id")="15"
o_ds("name")="sss"
o_ds("ddds!=")="dsd"
response.writedao.t("media").where(o_ds).lastSQL()
response.writedao.t("media").Find(o_ds).lastSQL()