**1、更新整個實體參數:**
~~~
UserTab user = new UserTab(){UserID= 1,UserName= "張三",Pwd="xxx"};
EntityQuery<UserTab>.Instance. Update (user);
~~~
這里是update表的所有字段,如果字段為NULL則不更新
注意:這種方式表必須要有主鍵。
**2、只更新某個字段:**
~~~
UserTab user = new UserTab(){UserID= 1,UserName= "張三",Pwd="xxx"};
OQL updateQ = OQL.From(user)
.Update(user.UserName) //僅僅更新姓名
.END;
EntityQuery<UserTab>.Instance.ExecuteOql(updateQ);
~~~
這里只更新UserName這個字段
**注意:這種方式沒有指定where條件,所以表必須要有主鍵。**
所以以上的執行等同于:
`UPDATE [UserTab] SET [UserName] = '張三' Where [UserID] =1`
3、根據條件更新某些字段:
~~~
UPDATE [UserTab] SET [UserName] = '張三', [Pwd] = 'xxx' Where [UserID] =1
~~~
如果有多個這種相等的條件,可以都寫在where里,如下:
`Where(user.UserID, user.UserName)`
以上也可以寫成:
~~~
UserTab user = new UserTab() { UserName= "張三",Pwd="xxx" };
OQL updateQ = OQL.From(user)
.Update(user.UserName, user.Pwd)
.Where(cmp => cmp.Comparer(user.UserID, OQLCompare.CompareType.Equal, 1))
.END;
EntityQuery<UserTab>.Instance.ExecuteOql(updateQ);
~~~
如果條件比較復雜,則必須要用Comparer了,如下:
~~~
UserTab user = new UserTab() { UserName = "ssss1", UserTel = "333331" };
OQLCompareFunc<UserTab> cmpFun = (cmp, u) =>
{
OQLCompare cmpResult = null;
//and 條件
cmpResult = cmpResult & cmp.Comparer(user.UserName, OQLCompare.CompareType.Like, "%" + "x" + "%");
//or
cmpResult = cmpResult | cmp.Comparer(user.UserID, OQLCompare.CompareType.Greater, 1);
return cmpResult;
};
OQL update = OQL.From(user)
.Update(user.UserName, user.UserTel)
.Where(cmpFun)
.END;
EntityQuery<UserTab>.Instance.ExecuteOql(update);
~~~
這里定義的條件cmpFun可以多次調用。
也可以簡化成下面的方式:
~~~
UserTab user = new UserTab() { UserName = "ssss000", UserTel = "33333000" };
OQL update = OQL.From(user)
.Update(user.UserName, user.UserTel)
.Where(cmp => cmp.Comparer(user.UserName, OQLCompare.CompareType.Like, "%" + "s" + "%")
& cmp.Comparer(user.UserSex, OQLCompare.CompareType.Equal, "男"))
.END;
EntityQuery<UserTab>.Instance.ExecuteOql(update);
~~~
4、UpdateSelf 函數(用于數字型字段的值加、減一個新值得情況,比如更新會員的積分,購買物品后將會員的原有積分加上本次獲得的積分。)
~~~
UserTab user2 = new UserTab() { UserID = 1, StateFlag =10};
OQL qc = OQL.From(user2)
.UpdateSelf('+', user2.StateFlag)
.Where(user2.UserID)
.END;
EntityQuery<UserTab>.Instance.ExecuteOql(qc);
~~~
相對于的SQL語句為下面:
~~~
UPDATE [UserTab] SET [StateFlag]=[StateFlag] + 10 WHERE [UserID]=1
~~~