首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 第二书店 程序员
您的位置:Web开发->ASP也来玩三层?

ASP也来玩三层?2008-07-01 来自:lizhe1985  [收藏到我的网摘]

来源:狼Robot - 博客园

  虽然手上一堆东西要做,但实在是没心情,找点感兴趣的东东来玩玩吧,火星一下吧,玩玩asp,怀念一下,想到在asp里用javascript的脚本,js的一些东西似乎比较有趣,那就写吧.实际上也就写了两个简单的类,一个DbHelper,一个BusinessRules,分得不是那么明确,形式.

  DbHelper中实际上只有5个方法:

Open(connectionString); //打开数据连接.connectionString:数据库连接字符串(可略,略则调用类中指定的默认连接字符串).
Close(); //关闭数据连接.
ExecuteNonQuery(sql); //执行SQL语句,[返回受影响的行数](中括号中的内容没实现,似乎有些问题).
ExecuteReader(sql); //返回一个数据记录集,当然,是与数据源断开的.
ExecuteScaler(sql); //执行SQL语句,返回第一行第一列的数据.

  BusinessRules也只有几个简单的方法:

GetEntity(conditions); //根据指定的查询条件取得单个实体.
Insert(entity, identity); //将单个实体插入数据库.identity:如果传入主键列名,则插入数据后实体的主键属性会得到数据库中对应的主键值.
Update(entity, conditions); //将单个实体更新到数据库,conditions:更新条件.
Delete(conditions); //按指定的条件删除数据.(参数略则删除全部数据)
GetList(num, conditions, sortOrder); //取得数据列表.num:指定数量,0表示取符合条件的全部数据.conditions:查询条件,sortOrder:排序方式.(所有参数可略)
GetPageList(pageIndex, pageSize, conditions, sortOrder); //取得分页数据列表.conditions:查询条件(可为空),sortOrder:排序方式(必须).

要用的时候直接<!--#Include File="DbHelper.asp"-->就可以了.

怎么用呢:

假设我们有一个评论表Comment.

有以下字段:

ID:int,自增字段.
Title:nvarchar,标题.
Body:nvarchar,内容.
UserID:int,发表评论的用户ID.
State:bit,状态.
CreateTime:DateTime,发表时间.

示例代码:

<@LANGUAGE="JAVASCRIPT" CODEPAGE="65001"%>
<%
var CommentBLL = new BusinessRules("Comment"); //参数Comment是表名.
var entity = CommentBLL.GetEntity("id = 1"); //这样就得到了一个ID为1的评论记录了.
for(var x in entity)//打印出实体的所有属性和值.
{
Response.Write(x + ":" + entity[x] + "<br>");
}

//当然js有很多种取值方式:

Response.Write("Title : " + entity.Title); //遗憾的是没有智能感知,怎么点也点不出属性来,呵呵.
Response.Write("UserID : " + entity["UserID"]);

//插入:

var comment = {
Title : "Javascript Demo",
Body : "Hello, Robot!",
UserID : 1,
State : false,
CreateTime : new Date().toLocaleString()
}
if(CommentBLL.Insert(comment, "ID"))
{
Response.Write("success!" + comment.ID); //插入数据后comment的ID就会得到数据库中自动递增的值.
}

//更新:延续用上面的实体吧

with(comment)
{
ID = undefiend; //这个是自动递增的列,不能赋值,所以要删掉.
Title += "-->update";
State = true;
}
if(CommentBLL.Update(entity,"ID = 1"))//假设要更新的ID为1.
{
Response.Write("success!");
}

//删除:

if(CommentBLL.Delete("ID = 1"))//删除ID为1的评论.
{
Response.Write("success!");
}

//取得数据列表:

var list = CommentBLL.GetList(0,"Body like %博客园%","CreateTime Desc"); //取得内容中包含"博客园"的数据列表.
for(var x = 0; x < list.length; x++)//打印列表.
{
Response.Write(x + " -->" + " Title : " + list[x].Title + "<br>");
Response.Write(x + " -->" + " Body : " + list[x]["Body"] + "<br>");
}

//取得分页数据列表:
var pageList = CommentBLL.GetPageList(1, 10, null, "CreateTime Desc"); //取得所有数据的第一页数据列表.
//这里返回的数据会比GetList返回的数据多一个RecordCount属性.
Response.Write("符合条件的记录总数 : " + pageList.RecordCount + "<br>");
//打印数据同上,略...
%>

  只实现了一些简单的功能,估计问题也多多,只是兴趣来了随便写写,我比较火星,见得东西少,大家见怪不要怪.呵呵.GetPageList用的是MSSQL2005里的Row_Number()来分页的,不能通用,mssql2k/access改一下就行了.

  当然也可以弄得更强大,比如弄几个类来映射数据表/字段等等,不过没时间写那么多,有时间拿来做个简单的项目玩玩还可以.还是有些怀念asp的简单,虽然我asp比较菜.

  另外:在用Connection.Execute(sql)的时候,我死活取不到那个受影响的行数,有知道的麻烦留个言,指点下.谢谢.

推荐人评论

想到在asp里用javascript的脚本,js的一些东西似乎比较有趣,那就写吧.实际上也就写了两个简单的类,一个DbHelper,一个BusinessRules,分得不是那么明确,形式.

用户评论

正在载入评论列表...

是谁推荐了此篇文章

专家头像李哲
个人blog发送信息
李哲推荐的其他文章

热点新闻

热点评论

    资源下载

    精彩视频