• ----:)欢迎访问源码网(:----
    • 首页
    • 博客
    • 学院
    • 下载
    • 论坛
    • 影视
    • 发布源码
    • RSS
    • ITPig
    • 笑话网
    • 百家姓
    • 繁體中文

源码网 - 中国第一源码门户
选择镜像:网通镜像 - 电信主站
  • 首 页
  • 新闻动态
  • 网站运营
  • 网页制作
  • WEB开发
  • 编程开发
  • 图像媒体
  • 操作系统
  • 数据库
  • 服务器
热门搜索 优化 SEO 故事 cms IIS7 MySQL 个人 AdSense 主题推广 | 文章搜索: 高级搜索
会员登录/控制面版您的位置: 学院首页 >> WEB开发 >> ASP开发 >> ASP基础 >> 详细内容
 

推荐文章

  • ASP的100个必须掌握的基础
 
 

热点文章

  • ASP初级三——ASP实例讲解
  • ASP的100个必须掌握的基础
  • ASP入门及提高
  • ASP中级三--Ajax入门讲座记录
  • ASP初级一——入门及总结
  • asp学习入门经验谈
  • ASP中级一——正则表达式讲座记录
  • ASP中级二--ORM讲座记录
  • 精华asp代码收集
  • ASP个人上手指南
  • ASP编程常用的代码
  • ASP开发网页牢记注意事项
 
 

相关文章

  • ASP中级三--Ajax入门讲座记录
  • ASP中级一——正则表达式讲座记录
 
 

百度搜索

 
 

ASP中级二--ORM讲座记录

  • 阅览次数:
  • 文章来源: nnhy
  • 原文作者: 大石头
  • 整理日期: 2007-03-04
  • 发表评论
  • 字体大小:
  • 小
  • 中
  • 大

首先,请大家先下载一份CMS。
使用DW、UE、记事本等编辑器打开/CMS/Gen/UserClass/Class_News.asp文件。

今天的讲座,讲围绕这个文件展开,请大家准备。

这里下载CMS
http://www.codepub.com/info/2007/03/info-11696.html

下载我开始讲讲什么是ORM

简单的理解,ORM就是对象和关系的映射,对ASP程序员来说,可以理解成 对象和关系数据库的映射。

比如Class_News.asp文件中的字段
id, NClassID, NL_NClass_NClassName, Title, NewsKey, ComeFrom, PostTime, Author, Assessor, Hits, Remark, IsPicNews, PicPath, IsTop, Content
这里的每一个字段,均对应着数据表NL_News中的一个字段,一一对应。这里的对应,就是简单的ORM。

我所要讲的ASP中的ORM,就是用ASP实现数据库到类对象的映射。文件Class_News.asp就是一个例子,这个文件只有一个类NewLife_Class_News,这个类的大部分功能,就是实现了把数据表中的数据读取到由该类声明的对象中,使得使用该类的业务代码,能够抛开数据库底层,直接实现OO编程。

ORM的概念,就讲到这里,大家可以自由提问。
休息十分钟,下一部分,讲NewLife_Class_News类是如何实现ORM的。

卫新建(305274486) 13:21:02
你的ORM文件 是自动生成的吗?

Class_News.asp是由Gen中的一个工具asp文件生成的,因为VBS类只能实现简单的功能,不能实现继承和多态等。

对ASP来说,类,就是一大堆变量、函数和方法的集合体

为了便于管理,把它们凑在一起的

下面要讲的是:如何在ASP中实现ORM

绝大部分人使用VBS来写ASP,众所周知,VBS所能实现的类,功能是非常有限的,简直就是一大堆变量、函数、方法的集合体。

也许正因为简单,才有这么多人支持ASP吧

下面我们就看看怎么在简单的ASP的类中,实现ORM

请大家打开CMS中的/CMS/Gen/UserClass/Class_News.asp

这里下载CMS:
http://www.codepub.com/info/2007/03/info-11696.html


我们先看看Class_News.asp中有什么

整个文件,就是一个NewLife_Class_News类

大家请看15到17行

以下是代码片段:
 Rem
 Public id, NClassID, NL_NClass_NClassName, Title, NewsKey, ComeFrom, PostTime, Author, Assessor, Hits, Remark, IsPicNews, PicPath, IsTop, Content
 Rem

这里定义的每一个类全局变量,分别对应着数据库/CMS/Data/News.asa中的NL_News数据表的各个字段

这些全局变量的数据,对应数据表NL_News中的一行记录。

我们的ORM,要实现的功能有:添删改查 四大功能。
添加:在数据表NL_News中新增一条记录,把这些变量所保存的数据存入该记录对应的字段中。
删除:删除数据表中和这些变量对应的行。
修改:以id作为关键字,修改数据表NL_News中对应ID字段为id值的行,也就是保存关键字id以外所有变量的值到数据表中id所定位的行。
查询:从数据表中取出一个符合条件的记录行,并把各字段的数据赋值到同名的变量中;或者从数据表中取出符合条件的一批输出,进行模版运算后,直接输出。

TableName变量指明该类对应当数据表是NL_News

请大家看GetInfo方法。该方法实现了取一行记录到类的各字段变量的功能。

以下是代码片段:

 Public Sub GetInfo()
  E.State = "取 文章"

  If Con.DbType = DTOracle Then
   'sql = "Select " & MulSelectStr & " From " & MulTableName & " Where rownum<2   And NL_News.NClassID=NL_NClass.id  And NL_News.id=" & id & ""
   sql = "Select * From (Select " & MulSelectStr & " From " & MulTableName & " Where 1=1   And NL_News.NClassID=NL_NClass.id  And NL_News.id=" & id & ") Where rownum<2"
  Else
   sql = "Select Top 1 " & MulSelectStr & " From " & MulTableName & " Where 1=1   And NL_News.NClassID=NL_NClass.id  And NL_News.id=" & id & ""
  End If
  Set rs = Con.GetRs(sql,0)
  If not rs.eof Then
   Rem
   id        = CInt("0" & Rs("id"))
   NClassID  = CInt("0" & Rs("NClassID"))
   NL_NClass_NClassName  = Rs("NL_NClass_NClassName") & ""
   Title     = "" & Rs("Title")
   NewsKey   = "" & Rs("NewsKey")
   ComeFrom  = "" & Rs("ComeFrom")
   PostTime  = "" & Rs("PostTime")
   Author    = "" & Rs("Author")
   Assessor  = "" & Rs("Assessor")
   Hits      = CInt("0" & Rs("Hits"))
   Remark    = "" & Rs("Remark")
   IsPicNews = CInt("0" & Rs("IsPicNews"))
   PicPath   = "" & Rs("PicPath")
   IsTop     = CInt("0" & Rs("IsTop"))
   Content   = "" & Rs("Content")
   Rem
  Else
   E.ErrAdd "没找到数据", 1
  End If
  rs.close
 End Sub

E.State = "取 文章"
E.开头的代码,都是为了方便调试用的,不影响程序功能,大家可以略过

在调用GetInfo前,需要先对该对象的id变量复制,GetInfo才能取到由id定位的记录到各变量中

If Con.DbType = DTOracle Then
这个判断是为了兼容Oracle数据库
CMS是同时支持AC、MSSQL、Oracle等多种数据库的

Set rs = Con.GetRs(sql,0)
这是调用 Gen 的连接类的GetRs方法来获取记录集,sql参数就不说了,参数0表示尽是取数据,而不用修改数据,下面的Edit中将会看到1

再下面的赋值,大家都懂,就不多说了

类中,使用Add实现把变量中的数据写入数据表,原理与上面的GetInfo差不多一致,只是数据的方向不同而已

id行被注释了,没有使用,因为这是数据库的自增字段

Edit实现了修改数据的功能,同样是由id来定位记录。
Del实现了删除数据的功能,也是由id来定位要删除的记录,特别的是,Del支持批量删除记录,使用的是in语法。

Con是NewLife_Class_Conn类的对象,DBType是它的一个属性(变量成员),位于文件/CMS/Gen/Class/Class_Conn.asp中

Main方法,是类中最复杂的一个方法,因为它实现了批量获取数据,同时还要支持分页(分页还要兼容AC、MSSQL、Oracle等多种数据库),已经模块循环替换等多种功能

ORM的实现,到这里就完成了,大家获取发现,类中,还有不少函数和方法,是的,它们是扩展功能,包括和表单的映射。

也就是说,这个类,不仅实现了对象到数据库的映射,还实现了对象到表单单元的映射,使用编辑功能的时候,能够把各变量的数据自动赋值到对应当表单单元中,保存表单的时候,能自动把表单单元的数据接收到对应的变量中,再调用一次Edit方法,对象变量中的数据就进入数据库了。添加也是这个原理。这样大大方便了开发。

GetFromRequest负责接收表单单元的数据到对应的变量中
F.R是GetFromRequest的封装,用于强类型处理,在底层上解决SQL注入以及别的非法输入的问题。
比如:id        = F.R("id",        fNumber)第二个参数指明,现在要接收到是数字类型数据,如果是别的数据,一概返回空,这样,SQL注入就没有什么机会了。对于字符串型SQL注入,有个专门的类型fForSQL,它会过滤所有的危害性字符。欣慰的是,Gen中,不会使用接收来的字符串构造SQL,所以,可以说,Gen对SQL注入是绝对安全的,当然,如果外部跨越UserClass中的类来操作数据,那就另当别论了。

好了,今天的讲座就到此结束,谢谢大家

欢迎继续读下一文章,Ajax讲座。

NewLife_Class_News类的实际使用,请看web/index.asp

上一篇:比AcdSee功能还强大的图片处理、编辑软件,推荐下载!
下一篇:ASP上传漏洞防范
  • 网友评论:
  • 查看所有评论
  • 我要发表评论
您的网名:
留言主题:
你要发表的内容:

 

关于本站 | 广告联系 | 版权声明 | 网站地图 | 发布软件 | 帮助中心 | 源码论坛

Copyright © 2005-2007 CodePub.Com  程序支持:木翼  滇ICP备05005971号