SPL讲解(4)--Criteria操作篇.doc_第1页
SPL讲解(4)--Criteria操作篇.doc_第2页
SPL讲解(4)--Criteria操作篇.doc_第3页
SPL讲解(4)--Criteria操作篇.doc_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

SmartPersistenceLayer 2.0 之 Criteria操作篇概念以前一篇文章中,描述了实体Entity的操作,很明显,仅仅实体的操作是远远不够的。如:我们经常会根据查询条件从数据库中获取记录集并绑定到DataGrid上,会根据条件进行批量的Update和Delete,为此,在SPL引进了Criteria(标准)的概念,那么在SPL中设计了三种Criteria:RetrieveCriteria(获取标准)这个标准是根据查询条件,排序方式来获取满足条件的数据,可以以DataTable、实体集的方式来返回。此标准会生成”Select * from TB where order ”语句执行UpdateCriteria (更新标准)这个标准是根据条件对一个表进行批量更新,最终会生成”Update TB set where .”语句执行DeleteCriteria(删除标准)这个标准是根据条件对一个表进行批量删除,最终会生成”Delete from TB where ”语句执行这些标准都是针对单一实体,也就是针对一个表的操作,当然对于Update和Delete来说,这些操作已经足够了,可对于Select来说,我们经常会多表查询,所以,关于这种联合查询将会在下一篇的”高级查询篇”中讲解。RetrieveCriteria 获取标准这个RetrieveCriteria是针对单一实体的查询,可以定义查询条件,排序方式并以不同的结果返回出来,下面我举一个例子:我们查询二年级的姓刘的学生号p dentEntityria rc=new RetrieveCriteria();,并以学号升序排RetrieveCriteria rc=new RetrieveCriteria(typeof(StudentEntity); /实例化Condition c=rc.GetNewCondition(); /实例化一个条件c.AddEqualTo(StudentEntity._GRADE,2); /二年级条件c.AddMatchPrefix(StudentEntity._Name,刘); /匹配刘字开头c.OrderBy(StudentEntity._NO); /按学号排DataTable dt=rc.AsDataTable() ; /以DataTable方式返回步骤分析:1. 实例化一个RetrieveCriteria时要指明是哪个实体类,使用“typeof(实体类名)”2. New一个Condition(条件),可以使用此方法New出多个Condition,多个Condition之间是”OR”的关系3. 给Condition指定条件,比如使用AddEqualTo(相等)、AddMatchPrefix(前匹配),关于Condition将会专门进行介绍4. 使用OrderBy()方法指定排序方式,默认为升序,如果要以降序排序使用:OrderBy(StudentEntity._NO,false)5. 最后以AsDataTable的方式返回DataTable,这可以方便进行DataGrid的数据绑定 多种返回方式例子中是采用DataTable进行返回,这也是平时最常用的,SPL中还提供了其他的几种方式:EntityContainer 实体集这是指返回结果以实体的集合方式体现,对于实体集的操作是非常简单的:EntityContainer ec=rc.AsEntityContainer();for(int i=0;i0) /如果影响了数据库Response.Write(“更新影响了”+re.ToString()+”条记录”);else /未影响数据库Response.Write(“没有更新记录”);carth(PlException exp) /捕捉异常if(exp.ErrorType=ErrorTypes.RestrictError) /如果是级联更新约束异常Response.Write(“遇到级联更新约束异常”); /友好提示elsethrow exp; /抛出异常步骤分析:1. 实例化一个UpdateCriteria时也要指明是哪个实体类型的2. 创建一个Condition,同样可以New多个Condition,Condition之间是“OR”的关系3. 使用AddAttributeForUpdate(字段名,值)来指定要把某字段更新为某值,可以Add多个,由于时间问题,目前SPL2.0还不支持“字段之间更新”4. 调用Perform()执行,会返回影响条数,如果没有AddAttributeForUpdate,即没有设定要更新的列,那么返回05. 在招待中会抛出级联约束异常,可以捕捉后进行友好提示多帐套功能更新标准也支持多帐套功能,使用方式与RetrieveCriteria类似:UpdateCriteria uc=new UpdateCriteria(typeof(StudentEntity),”DB2”);或者:UpdateCriteria uc=new UpdateCriteria(typeof(StudentEntity);uc.DataBaseName=”DB2”;这样就可以在指定的数据源里更新数据了。SqlString属性可以返回执行的SQL语句,以便调试语句。支持内存存储,也就是如果实体为内存存储的,那么在执行Update后,会自动更新内存,对开发员透明支持事务处理DeleteCriteria 删除标准删除标准是根据条件对数据表进行批量删除,值得提醒的话,这个标准使用要非常谨慎,利用不当误删除数据的。例如:要删除所以四年级的学生DeleteCriteria dc=new DeleteCriteria(typeof(StudentEntity);Condition c=dc.GetNewCondition();c.AddEqualTo(StudentEntity._GRADE,4);tryint re=dc.Perform();if(re0)Response.Write(“成功删除”+re.ToString()+”条记录”);elseResponse.Write(“没有删除记录”);catch(PlException exp)if(exp.ErrorType=ErrorTypes. RestrictError)Response.Write(“遇到级联删除约束异常”);elsethrow exp;步骤分析:1. 实例化删除标准,需要指定实体类型2. 创建删除条件,可以New多个条件,也是“OR”的关系3. 调用Perform()执行,返回影响条数4. 捕捉级联删除约束异常,友好提示多帐套功能这与其他的标准一样,有两种方式:DeleteCriteria dc=new DeleteCriteria(typeof(StudentEntity),”DB2”);或者:DeleteCriteria dc=new DeleteCriteria(typeof(StudentEntity);dc.DatabaseName=”DB2”;这样就可以对指定的数据源进行删除SqlString属性可以返回执行的SQL语句,以便调试语句。支持内存存储,也就是如果实体为内存存储的,那么在执行Delete后,会自动更新内存,对开发员透明支持事务处理总结:对于这些标准操作都有一个共同点,就是都针对单一实体,都支持多帐套功能,都支持内存存储功能;不同的是RetrieveCriteira可以以多种方式返回,而且这样的单一实体查询对于系统业务来说还是远远不够的,因此对于查询,将后在后面介绍Query类的联合查询功能,而对于UpdateCriteria和DeleteCriteria来说,这些操作已经足够了,当业务比较复杂的情况下,都可以拆解成这些方式来实现。关于Condition的细节和事务处理将在后面单独进行讲解。听棠2004年11月 MSN:tintown_liuh

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论