VBScript / ASP经典

时间:2020-03-05 18:42:51  来源:igfitidea点击:

关于VBScript和ASP Classic,我有几个问题:

  • 在VBScript / ASP中访问MS SQL Server数据库的首选方法是什么?
  • 关于从控制器分离视图和模型的最佳实践是什么?
  • 关于VBScript或者ASP我应该知道的其他事情吗?

如果我们没有注意到,我是VBScript编码的新手。我意识到数字2和3都是一个过于笼统的"黑洞"问题,所以不要以为我期望从这里学到关于这两个问题的所有知识。

解决方案

回答

ADO是在VBScript /经典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/

一个警告是,如果要在记录集中返回一个MEMO字段,请确保一次只选择一个MEMO字段,并确保它是查询中的LAST列。否则,我们将遇到问题。
(参考:http://lists.evolt.org/archive/Week-of-Mon-20040329/157305.html)

回答

关于2号,我认为我们有一些选择...

1)我们可以使用VB6等开发的COM组件将某些业务逻辑与UI分开。

2)我们可以在VBScript中创建类。没有继承的概念,实现中缺少其他更高级的功能,但是我们可以将逻辑封装在有助于降低应用程序可扩展性的类中。看看这个:http://www.4guysfromrolla.com/webtech/092399-1.shtml

回答

回应一些想法,并添加一些我自己的想法:

1)最好的访问数据库的方法是将其抽象为从VBScript访问的某种COM组件。

2)如果我们确实需要,可以用VBScript编写控制器,然后在页面中访问它。它类似于页面控制器模式,而不是ASP.NET MVC或者MonoRail中看到的前端控制器

3)我们为什么要对自己这样做?进行这种工作所需的大多数工具都不再可用。

回答

早在VBScript / ASP还可以的时候
我曾在一家公用事业公司工作,其数据库环境非常复杂,过去我曾向这个网站发誓:http://www.connectionstrings.com/

@michealpryor正确了

回答

我一直被困在ASP之上,我感到我们很痛苦。

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

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

2)我还没有看到有关专门针对ASP的MVC的任何信息,但是我对此很感兴趣,因为这对我来说很难。我通常尝试至少在单独的函数中包含类似于视图的事物和类似于控制器的事物。我想我们可能可以在单独的文件中编写代码,然后使用服务器端包含将它们重新结合在一起。

3)我们可能来自内置更多功能的语言。起初,似乎有些东西丢失了,但是通常只需要编写比以前更多的代码行即可。

回答

记住要用语言编程,而不要用语言编程。仅仅因为我们使用的工具集有限,并不意味着我们必须像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显示在page.vb.asp中设置的数据。

回答

同样对于数据库访问,我有一组函数GetSingleRecord,GetRecordset和UpdateDatabase,它们具有与Michael上面提到的功能相似的功能。

回答

当我看到第一个答案时,我不得不离开电脑,但我仍然为它被很多人所认可而感到沮丧。这是最糟糕的一种ASP代码的令人震惊的例子,这种代码可以确保网站可以通过SQL注入,并且,如果我们继续在整个网站中使用此代码,则可以在一秒钟内被黑客入侵。

这不是我们应该给ASP编码新手提供的那种代码,因为他们会认为这是使用该语言进行编码的专业方式!

  • 永远不要在代码中显示连接字符串,因为它包含数据库的用户名和密码。请改用UDL文件,或者至少使用可以在其他地方声明并在整个站点中使用的常量。
  • 在网络环境中,对任何操作使用内联SQL不再有任何好的借口。使用存储过程-无法充分强调安全性。如果我们确实无法做到这一点,则将内联参数作为第二好的选择。内联SQL将使站点对SQL注入,恶意软件注入以及其他方面保持开放的态度。
  • 变量的后期声明可能导致草率的编码。使用"显式选项",并在函数顶部声明变量。这是最佳做法,而不是真正的WTF,但是最好继续进行下去。
  • 没有数据库暗示这是什么类型的连接-是只读的,还是用户将更新记录?如果有效告知期望的内容,则可以优化连接,并且数据库可以非常有效地处理锁定。
  • 使用后数据库连接不会关闭,并且记录集对象没有完全销毁。

尽管许多人建议改用.NET,但ASP仍然是一门强大的语言-通过良好的编码实践,可以编写易于维护,可伸缩和快速的ASP网站,但是我们必须确保使用所有可用的方法来使自己的高效的代码,我们必须保持良好的编码习惯并有所预见。好的编辑器也会有所帮助,我更喜​​欢PrimalScript,它比任何以.NET为中心的最新MS产品都对ASP编码器更有用。

另外," MEMO"字段从何而来?这是Access术语,还是MySQL?我问这样的字段在MS-SQL中被称为TEXT或者NTEXT字段已有十年了。

回答

我同意@Cirieno的观点,出于他提到的所有原因,选择的答案在生产代码中使用是不明智的。就是说,如果我们只有一点经验,那么这个答案是基础知识的一个很好的起点。

根据我的ASP经验,我更喜欢使用VB编写数据库访问层,编译为DLL,然后通过VBScript引用DLL。很难直接通过ASP进行调试,但这是一种将所有数据访问代码封装为远离ASP代码的好方法。

回答

AX Asp Xtreme Evolution是适用于ASP经典的MVC框架

有一些尝试为asp创建测试框架:
aspUnit很好,但是不再维护。

几个月前,我看到了一个如何制作自己的样品。
该示例使用nUnit对网站调用函数以进行自动测试。
我想我在这里拿到了(我的电话线很烂,所以我无法检查)