2008-08-25 203 views
7

我有几个关于VBScript和ASP经典问题:的VBScript/ASP经典

  1. 什么是在VBScript/ASP访问的MS SQL Server数据库的首选方法是什么?

  2. 关于将模型与控制器视图分离的最佳实践是什么?

  3. 任何其他的事情我应该知道关于VBScript或ASP?

如果您还没有注意到,我是VBScript编码新手。我意识到数字是一种过于笼统的巨大的“黑洞”问题,所以不要以为我期望从这里学到所有关于这两个问题的知识。

+1

你有我衷心的同情心。 – 2009-07-09 12:27:28

回答

20

ADO是访问VBScript/Classic ASP中数据库的绝佳方法。

Dim db: Set db = Server.CreateObject("ADODB.Connection") 
db.Open "yourconnectionstring -> see connectionstrings.com" 
Dim rs: Set rs = db.Execute("SELECT firstName from Employees") 
While Not rs.EOF 
    Response.Write rs("firstName") 
    rs.MoveNext 
Wend 
rs.Close 

此处了解详情:http://www.technowledgebase.com/2007/06/12/vbscript-how-to-create-an-ado-connection-and-run-a-query/

一个需要注意的是,如果你是在一个记录返回一个备注字段,要确保你一次只能选择一个备忘录领域,并确保它是最后一个列中查询。否则,你会遇到问题。 (参考:http://lists.evolt.org/archive/Week-of-Mon-20040329/157305.html

2

在2号,我觉得你有几个选项...

1)您可以使用VB6开发COM组件等,以你的一些业务逻辑分离开你UI。

2)您可以在VBScript中创建类。没有继承的概念,并且实现中没有其他更高级的特性,但是您可以将逻辑封装在类中,这有助于减少应用程序的分散性(spagehttiness)。看看这个:http://www.4guysfromrolla.com/webtech/092399-1.shtml

3

呼应一些想法,并加入了一些我自己的:

1)最好的方式来访问数据库将抽象的是远成某种你从VBScript访问COM组件。 2)如果你真的想要你可以在VBScript中编写控制器,然后访问页面中的控制器。它将类似于Page Controller模式,而不是在ASP.NET MVC或MonoRail中会看到的Front Controller。3)为什么要对自己做这件事?大多数做这种工作所需的工具甚至不再可用。

+1

回复3:确实如此,并且有很多资源可以提供帮助(如SO)。您可能没有多年使用过它,但这并不意味着其他人不会继续使用它,无论这样做的智慧如何。 (一些合同工作的好处:快速进出,一些合同工作的挑战:需要在现有框架内提供解决方案。) – 2009-10-01 18:17:49

1

方式归途中一天的VBScript/ASP仍然确定 我曾在一家公用事业公司有非常复杂的数据库环境不受,我使用本网站发誓:http://www.connectionstrings.com/

@michealpryor这样做是正确

1

我一直坚持建立在ASP上,我感到你的痛苦。

1)查询SQL Server的最佳方式是使用参数化查询;这将有助于防止SQL注入攻击。

教程(我的博客):
http://www.nomadpete.com/2007/03/23/classic-asp-which-is-still-alive-and-parametised-queries/

2)我还没有看到关于MVC实现ASP专门针对什么,但我很有兴趣,因为这是我有一个艰难的时间的东西包裹着我的头。我通常试图至少包含类似于视图的东西,以及在不同功能中类似控制器的东西。我想你可能会在不同的文件中编写代码,然后使用服务器端包含将它们全部连接在一起。

3)你可能来自一种内置了更多功能的语言。起初,有些东西看起来可能会丢失,但它通常只是编写比你更多的代码行习惯于。

+0

@Fionnuala断开连接? wayback it:http://web.archive.org/web/20071221011242/http://www.nomadpete.com/2007/03/23/classic-asp-which-is-still-alive-and-parametised-queries/ – frumbert 2014-11-06 00:58:23

8

记住要程序变成这个语言而不是程序吧。仅仅因为你使用的是有限的工具集并不意味着你必须像1999年一样编程。

我同意JasonS关于类。这是真的,你不能做的事情一样的继承,但是你可以很容易伪造它

Class Dog 
    Private Parent 

    Private Sub Class_Initialize() 
     Set Parent = New Animal 
    End Sub 

    Public Function Walk() 
     Walk = Parent.Walk 
    End Function 

    Public Function Bark() 
     Response.Write("Woof! Woof!") 
    End Function 
End Class 

在我的项目的ASP页将具备以下条件: INC-APP-CommonIncludes.asp - 这包括的东西像我一般的图书馆(数据库访问,文件功能等),并设置安全性,并包含任何配置文件(如连接字符串,目录位置等)和常用类(用户,权限等),并包含在每个页面中。

Modules/ModuleName/page.vb.asp - 有点像页面背后的代码。包括页面特定BO,BLL和DAL类别,并设置页面/接收提交表格数据所需的数据等。

Modules/ModuleName/Display/INC-DIS-Page.asp - 显示页面中设置的数据.vb.asp。

1

也为数据库访问我有一组功能 - GetSingleRecord,GetRecordset和UpdateDatabase具有类似的功能,以迈克尔·提到上述

16

我有,当我看到的第一个答案,从我的PC走开,和我仍然很痛心,它已经得到了很多人的赞同。这是最糟糕的ASP代码的一个令人震惊的例子,这种代码可以确保您的网站具有SQL注入功能,并且如果您继续在整个网站中使用此代码,就可以在其生命的一英寸范围内进行修复。

这不是你应该给新来ASP编码的那种代码,因为他们会认为这是用语言编码的专业方式!

  1. 不要在代码中显示连接字符串,因为它包含数据库的用户名和密码。改为使用UDL文件,或者至少使用一个可在其他地方声明并在整个网站中使用的常量。

  2. 对于在Web环境中的任何操作使用内联SQL已经不再有任何好的借口。使用存储过程 - 不能强调安全优势。如果你真的无法做到这一点,那么查看内联参数作为次优选项......内联SQL将使您的站点对SQL注入,恶意软件注入以及其他方面开放。

  3. 变量的迟声明可能导致草率编码。使用“显式选项”并在函数顶部声明变量。这是最好的做法,而不是一个真正的跆拳道,但最好从你的意思开始。

  4. 没有向数据库提示这是什么类型的连接 - 仅用于读取还是用户更新记录?如果有效地告诉连接可以期望什么,连接可以被优化并且数据库可以非常有效地处理锁定。

  5. 数据库连接在使用后未关闭,并且记录集对象未完全销毁。

ASP仍然是一个强大的语言,尽管很多人建议迁移到.NET - 具有良好的编码习惯的ASP网站可以写,易于维护,可扩展性和快速的,但你必须确保您使用可用的每种方法来使代码高效,您必须保持良好的编码习惯和一点预谋。一个好的编辑器也会有所帮助,我的偏好是PrimalScript,我发现它比ASP似乎非常以.NET为中心的最新MS产品更适合ASP编码器。

此外,“MEMO”字段来自哪里?这是Access命名法,还是MySQL?我问,这样的字段在MS-SQL中被称为TEXT或NTEXT字段十年。

+0

1.在脚本内部建立连接并不意味着连接字符串暴露给访问者。 2.使用存储过程意味着失去灵活性。也可以使用内联sql来防止sql注入。 – 2010-11-06 09:13:59

+2

1.如果您的网络服务器被任何方法攻击或访问,那么您的数据库现在也是一个开放的目标,这要归功于代码中的用户名和密码。 – 2010-11-12 11:38:58

2

我同意@Cirieno,因为他提到的所有原因,所选答案在生产代码中并不明智。这就是说,如果你只有一点经验,这个答案是基础知识的一个很好的起点。

在我的ASP体验中,我更愿意使用VB编写我的数据库访问层,编译成DLL并通过VBScript引用DLL。很难直接通过ASP进行调试,但它是将所有数据访问代码封装在ASP代码之外的好方法。

3

AX - 天冬氨酸的Xtreme进化是对于ASP MVC框架经典

有一些尝试,在做测试框架的asp: aspUnit是好的,但不再保留。

我在几个月前看到了关于如何制作你自己的一个样本。 该示例使用nUnit针对网站调用函数进行自动测试。 我认为我得到了它here(我的线是borked所以我不能检查)