仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 623|回复: 7
打印 上一主题 下一主题

[学习教程] ASP编程:在ASP一时表操纵的一些看法

[复制链接]
透明 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:53:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
缺乏可以共同遵循的行业标准,ASP还处在发展初期,大家对它的理解不同,如产品和服务标准,收费标准等,不利于行业的健康发展。一时表自己在调试以下存储过程当中碰到了很年夜的困扰(次要是一时表操纵):

CREATEPROCEDURE[c_readtop]@eachrowint=10AS
declare@tmpcatvarchar(16)
createtable#tmp_result(aridint,cat2varchar(16),titlevarchar(100),updaydatetime)
declarert_cursorcursor
forselectcat2fromcategorywherecat1=电脑手册andcatl=2
openrt_cursor
fetchfromrt_cursorinto@tmpcat
while@@fetch_status=0
Begin
setrowcount@eachrow
Insertinto#tmp_result(arid,cat2,title,upday)Selecttop10arid,cat2,title,updayfromarticleasa
leftjoincategoryasbona.sortid=b.catidwhereb.cat1=电脑手册andb.cat2=@tmpcatorderbyupdaydesc
fetchfromrt_cursorinto@tmpcat
End
select*from#tmp_result
droptable#tmp_result
closert_cursor
deallocatert_cursor

此存储历程的感化是掏出每一个分类的最新10笔记录。
呈现的毛病信息是(一旦操纵前往的纪录集时就呈现):
ADODB.Recordset毛病800a0e78

Theoperationrequestedbytheapplicationisnotallowediftheobjectisclosed.

此存储历程能在qa中一般运转且能失掉准确了局,利用odbc毗连数据库的话,也能失掉准确的了局。因而起首嫌疑oledb方
式毗连没能前往纪录集。举行了上面的调试:
(一)加调试标志,在挪用纪录集前用setrs=rs.nextrecordset测试是否是射中前往的纪录集……
(二)因为该过存本来是另外一个历程的一部分,嫌疑存储过程当中有些语句不克不及同时利用,因而将该历程分别成一个自力的
存储历程,毛病仍旧。
(三)嫌疑挪用该历程的Asp有成绩,因而重做一个只是挪用该存储历程的Asp程序,毛病仍旧。
(四)将毗连体例改成odbc体例毗连(建dsn,设sqlserver的loginID,设权限),该毛病消散。从头利用oledb毗连,
毛病仍旧。
(五)嫌疑对一时表的数据拔出有成绩,作废往一时表拔出数据,能前往一个空的纪录集。
(六)经Bigeagle提醒,将一时表建在一时数据库tempdb上,毛病仍旧
(七)把存储过程当中的droptable往失落,在qa中运转该存储历程,察看一时表的天生情形,发明一时表准确天生且有准确
的数据拔出,百思不得其解,数据输入到哪了?
(八)经Bigeagle提醒createtable一句前往了纪录集,因而从头在输入纪录集前利用多个setrs=rs.nextrecordset(最
多放上了4个),毛病提醒仍旧。
(九)嫌疑一时表操纵有成绩,将一时表改成流动表,不拔出数据时前往空纪录集,拔出纪录时仍旧提醒毛病。在纪录集
输入前先实行一个或多个setrs=rs.nextrecordset,终究有一次没有提醒堕落(检测到rs.eof为false),因而才恍然年夜
悟――不仅是createtable前往了纪录集,并且连insertinto语句也前往了纪录集,不外该纪录集得一种出格的纪录集
(没有字段,不克不及对该纪录集举行任何操纵――连检测rs.eof都不同意),我在此将它称为特别的纪录集,便利上面引
用。
(十)晓得了成绩的关键,就即刻办理了,在存储过程当中不但愿前往纪录集前实行setnocounton,要前往纪录集时,先
实行setnocountoff。

也就是改成:

CREATEPROCEDURE[c_readtop]@eachrowint=10AS
declare@tmpcatvarchar(16)
setnocounton
createtable#tmp_result(aridint,cat2varchar(16),titlevarchar(100),updaydatetime)
declarert_cursorcursor
forselectcat2fromcategorywherecat1=电脑手册andcatl=2
openrt_cursor
fetchfromrt_cursorinto@tmpcat
while@@fetch_status=0
Begin
setrowcount@eachrow
Insertinto#tmp_result(arid,cat2,title,upday)Selecttop10arid,cat2,title,updayfromarticleasa
leftjoincategoryasbona.sortid=b.catidwhereb.cat1=电脑手册andb.cat2=@tmpcatorderbyupdaydesc
fetchfromrt_cursorinto@tmpcat
End
setnocountoff
select*from#tmp_result
droptable#tmp_result
closert_cursor
deallocatert_cursor

成绩办理。


在该存储历程调试过程当中,发明oledb和odbc存在一个很年夜的不同,asp向odbc取纪录集时,odbc过滤了下面所称的特
殊纪录集(那种只占地位但不克不及举行任何操纵的纪录集――多由createtable或insertinto发生),而asp向oledb取纪录
集时,oledb并未将特别纪录集过滤。
同时,熟悉到在利用存储历程前往纪录集时,在不但愿前往纪录的中央,应当利用setnocounton克制存储历程前往
纪录集,不然大概会绕良多弯路。
终究分明了为何绕了这么多弯路:没有想到oledb前往了这么多特别的纪录集(仍是由一个轮回发生的,该轮回实行
次数5、6次),怪不得在取纪录集前固然实行了setrs=rs.nextrecordset,但终因数据不敷多而未能发明毛病关键地点。
出格感激在调试过程当中bigeagle赐与的提醒,多谢。
</p>源代码保护方面其实现在考虑得没那么多了..NET也可以反编译.ASP写得复杂的话别人能看得懂的话.他也有能力自己写了.这方面担心的倒不太多.纵观现在网上可以下载的那些所谓BBS还有什么网站等等的源代码
若相依 该用户已被删除
沙发
发表于 2015-1-20 05:57:50 | 只看该作者
不能只是将它停留在纸上谈兵的程度上。
海妖 该用户已被删除
板凳
发表于 2015-1-28 19:38:57 | 只看该作者
不是很难但是英文要有一点基础网上的教程很少有系统的详细的去买书吧,另不用专门学习vb关于vbscript脚本在asp教材都有介绍
乐观 该用户已被删除
地板
发表于 2015-2-5 21:59:39 | 只看该作者
完全不知道到底自己学的是什么。最后,除了教程里面说的几个例子,还是什么都不会。
金色的骷髅 该用户已被删除
5#
发表于 2015-3-4 01:06:53 | 只看该作者
学习ASP其实应该上升到如何学习程序设计这种境界,其实学习程序设计又是接受一种编程思想。比如ASP如何学习,你也许在以前的学习中碰到过。以下我仔细给你说几点:
柔情似水 该用户已被删除
6#
发表于 2015-3-11 15:16:41 | 只看该作者
虽然ASP也有很多网络教程。但是这些都不系统。都是半路出家,只是从一个例子告诉你怎么用。不会深入讨论,更不会将没有出现在例子里的方法都一一列举出来。
精灵巫婆 该用户已被删除
7#
发表于 2015-3-19 00:22:00 | 只看该作者
代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。
变相怪杰 该用户已被删除
8#
发表于 2015-3-26 20:26:39 | 只看该作者
交流是必要的,不管是生活还是学习我们都要试着去交流,通过交流我们可以学到很多我们自己本身所没有的知识,可以分享别人的经验甚至经历。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 09:32

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表