仓酷云

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

[学习教程] ASP编程:怎样制止利用DSN毗连数据库

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

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

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

x
ASP由于使用了COM组件所以它会变的十分强大,但是这样的强大由于WindowsNT系统最初的设计问题而会引发大量的安全问题。只要在这样的组件或是操作中一不注意,哪么外部攻击就可以取得相当高的权限而导致网站瘫痪或者数据丢失;毗连数据库是不是仍然在利用ODBC体系或文件DSN毗连数据库?请用OLEDB供应者取代它,这是一种速率更快并且不必要利用DSN的数
据库毗连手艺。利用OLEDB供应者,你不用再为了创立体系DSN乞求ISP(或数据库办理员/网站办理员),也不用为了网站
文件地位的变更而修正设置。

  问:

  我看到过大批经由过程数据资本名字(DSN)毗连数据库的例子,不外我如今想欠亨过DSN毗连数据库。在ASP中能够完成
这一点吗?可否举几个详细的例子申明?我但愿新的毗连办法不依附于体系DSN,但又能够在数据库毗连串中指定驱动程
序、服务器名字、数据库、数据库账号和暗码。

  答:

  假如你利用的是SQLServer7,请利用上面的数据库毗连串:
  
strConnString="DSN=;DRIVER={SQLSERVER};"&_
"UID=myuid;PWD=mypwd;"&_
"DATABASE=MyDb;SERVER=MyServer;"



  个中最主要的参数在于“DRIVER=”部分。假如你但愿绕过ODBC,间接经由过程OLEDB会见SQLServer(一样平常来说这类办法
速率更快),请利用上面这类毗连串:  
strConnString="Provider=SQLOLEDB.1;Password=mypassword;"&_
"PersistSecurityInfo=True;UserID=myuid;"&_
"InitialCatalog=mydbname;"&_
"DataSource=myserver;ConnectTimeout=15"



  假如你要利用数据库毗连串,但又不熟习OLEDB供应者的毗连串语法,请利用VisualBasic的数据情况计划器或ADO数
据控件创立一个,然后把它拷贝出来用于ADO毗连工具就能够了。在当即窗口中,输出命令?
dataenvironment1.connection1.ConnectionString能够失掉毗连串的代码。请注重MicrosoftAccess毗连串的语法有所不
同,拜见《SyntaxforDSN-LessConnectionforMSAccess》

  拜见:《ASP功能优化指南》中的数据库毗连部分。

2、纪录会合纪录总数的盘算
1062


  刚入手下手在ASP页面中利用纪录集的时分大概常常会碰到这个成绩。假如你想会见纪录会合的数据,起首必需包管纪录
会合的确包括数据。请记着,假如纪录会合没无数据,体系将显现十分不友爱的运转时毛病信息。你可使用上面的代码
往办理这类成绩。

  问:

  我已无数年的VB履历,但方才入手下手进修ASP和VBScript。如今我要翻开一个Access数据库,盘算个中的纪录总数并
在Web页面中显现这些信息。数据库的名字叫sean.mdb,个中包括一个people表,表中有三个纪录。但是,当我运转剧本时
它老是说有-1个纪录。

  是不是能够告知我上面的代码甚么中央堕落了?  
<%

SetobjConn=Server.CreateObject("ADODB.Connection")
SetobjRst=Server.CreateObject("ADODB.Recordset")

objConn.Open("DRIVER={MicrosoftAccessDriver(*.mdb)};DBQ=
"&Server.Mappath("seannewelldbsean.mdb"))

strSQL="SELECT*FROMpeople"

objRst.OpenstrSQL,objConn

Response.write("<P>"&strSQL&"</P>")
Response.write("<H2>Thereare"&objRst.RecordCount&
"Peopleinthedatabase</H2>")

IfobjRst.RecordCount>0Then
objRst.MoveFirst
DoWhileNotobjRst.EOF
Response.write("Name="&objRst.fields(0))
objRst.MoveNext
Loop
else
Response.write("ItsEMPTY!")
EndIf

objRst.Close
SetobjRst=Nothing
objConn.Close
SetobjConn=Nothing
%>



  答:

  在低版本的MDAC中RecordCount属性前往-1。请在你的服务器上把MDAC文件更新到最新的版本,最新的MDAC文件能够
在www.microsoft.com/data找到。

  假如Web服务器由ISP办理而你又无权设置它,没法晋级MDAC文件,那末必需修正代码。

  本来利用上面的代码反省纪录会合是不是有纪录:  
IfobjRst.RecordCount>0Then...



  请改用上面的代码:  
IfobjRst.BOFandobjRst.EOFThen
纪录集为空
Else
DoWhilenotobjRst.EOF
处置纪录集
objRst.MoveNext
Loop
EndIf



  2000年06月30日更新,新西兰的DarylEgarr说:

  能够看出,读者发问中的代码并没有毛病。成绩在于“在低版本的MDAC中RecordCount属性前往-1”,这一判别自己
并没有毛病,但是从发问内容来看做者不该该作出这类假定,由于原成绩中没有任何一行代码意味着利用了低版本的
MDAC。

  作者思索成绩的偏向不合错误,成绩的要点在于并不是一切的游标范例都撑持一切的属性和办法(不论接纳哪一种数据库系
统)。成绩中代码呈现毛病的真正缘故原由在于利用默许的CursorLocation时:  
Recordset.CursorLocation=adUseServer

  RecordCount属性只要在纪录集的CursorType为1大概3(即adOpenKeyset,adOpenStatic)时才是可用的。呈现毛病
的代码没有指定CursorType,也就是利用了0范例的游标(即adOpenForwardOnly,这是速率最快的游标范例),此时对
RecordCount的援用将一向前往0。

  办理成绩的办法很复杂,只需把本来代码中的:  
objRst.OpenstrSQL,objConn

  改成:  
objRst.OpenstrSQL,objConn,1

</p>由于ASP提供的是一对多的服务,所以用户的一些特殊需求很难得到满足。
小妖女 该用户已被删除
沙发
 楼主| 发表于 2015-1-20 05:54:26 | 只看该作者
ASP.Net摆脱了以前ASP使用脚本语言来编程的缺点,理论上可以使用任何编程语言包括C++,VB,JS等等,当然,最合适的编程语言还是MS为.NetFrmaework专门推出的C(读csharp),它可以看作是VC和Java的混合体吧。
爱飞 该用户已被删除
板凳
发表于 2015-1-26 11:47:20 | 只看该作者
没有坚实的理论做基础,那么我们连踏入社会第一步的资本都没有,特别对于计算机专业的学生学好专业知识是置关重要的。在这里我侧重讲一下如何学习ASP,从平时的学习过程中。
第二个灵魂 该用户已被删除
地板
发表于 2015-2-4 14:28:22 | 只看该作者
弱类型造成潜在的出错可能:尽管弱数据类型的编程语言使用起来回方便一些,但相对于它所造成的出错几率是远远得不偿失的。
蒙在股里 该用户已被删除
5#
发表于 2015-2-10 01:41:10 | 只看该作者
尽管MS自己讲C#内核中更多的象VC,但实际上我还是认为它和Java更象一些吧。首先它是面向对象的编程语言,而不是一种脚本,所以它具有面向对象编程语言的一切特性,比如封装性、继承性、多态性等等,这就解决了刚才谈到的ASP的那些弱点。
乐观 该用户已被删除
6#
发表于 2015-2-28 13:05:45 | 只看该作者
Server:这个表示的服务器,操作服务器的一些东西使用这个,如Server.Mappath转换服务器路径,Server.CreateObject实例化一个组件
深爱那片海 该用户已被删除
7#
发表于 2015-3-9 23:45:45 | 只看该作者
最近在学asp,不要问我为什么不直接学.net,因为公司网站是asp做的所以有这个需要,卖了本书asp入门到精通,对里面的六大内置对象老是记不住,还有很多属性和方法看的头晕。
山那边是海 该用户已被删除
8#
发表于 2015-3-17 03:09:18 | 只看该作者
接下来就不能纸上谈兵了,最好的方法其实是实践。实践,只能算是让你掌握语言特性用的。而提倡做实际的Project也不是太好,因为你还没有熟练的能力去综合各种技术,这样只能使你自己越来越迷糊。
透明 该用户已被删除
9#
发表于 2015-3-23 17:33:32 | 只看该作者
学习是为了用的,是为了让你的程序产生价值,把握住这个原则会比较轻松点。除此之外,课外时间一定要多参加一些社会实践活动,来锻炼自己的能力。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-23 23:34

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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