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

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

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

  3. 关于 VBScript 或 ASP 我还应该了解哪些其他事情?

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

有帮助吗?

解决方案

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/

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

其他提示

当我看到第一个答案时,我不得不离开我的电脑,并且仍然为它得到这么多人的认可而感到苦恼。这是最糟糕的 ASP 代码的一个令人震惊的例子,这种代码将确保您的站点可被 SQL 注入,并且如果您继续在整个站点上使用此代码,那么在其生命周期内就可能被黑客攻击。

这不是您应该向 ASP 编码新手提供的代码,因为他们会认为这是该语言的专业编码方式!

  1. 切勿在代码中泄露连接字符串,因为它包含数据库的用户名和密码。请改用 UDL 文件,或者至少使用可以在其他地方声明并在整个站点中使用的常量。

  2. 不再有任何好的借口在 Web 环境中使用内联 SQL 进行任何操作。使用存储过程——安全性的好处怎么强调都不为过。如果你真的不能做到这一点,那么将内联参数视为第二好的选择......内联 SQL 将使您的站点对 SQL 注入、恶意软件注入和其他攻击敞开大门。

  3. 变量的延迟声明可能会导致草率的编码。使用“显式选项”并在函数顶部声明变量。这是最佳实践,而不是真正的WTF,但最好按照您想要继续的方式开始。

  4. 没有向数据库提示这是什么类型的连接——是只读的,还是用户会更新记录?如果有效地告知预期内容,则可以优化连接,并且数据库可以非常有效地处理锁定。

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

ASP 仍然是一种强大的语言,尽管许多人建议转向 .NET——通过良好的编码实践,可以编写易于维护、可扩展且快速的 ASP 站点,但您必须确保使用每种可用的方法来实现您的代码高效,您必须保持良好的编码实践和一点远见。一个好的编辑器也会有所帮助,我更喜​​欢 PrimalScript,我发现它比任何看起来非常以 .NET 为中心的最新 MS 产品对 ASP 编码人员更有帮助。

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

记得 编程到 语言而不是其中的程序。仅仅因为您使用的工具集有限,并不意味着您必须像 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-CommonInincludes.asp - 这包括我的通用库(数据库访问、文件函数等)之类的内容,并设置安全性,并包括任何配置文件(如连接字符串、目录位置等)和通用类(用户、权限)等)并包含在每个页面中。

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

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

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

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

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

3)你为什么要这样对自己?完成此类工作所需的大多数工具甚至不再可用。

AX - Asp Xtreme Evolution 是 ASP 经典的 MVC 框架

有一些为asp制作测试框架的尝试:aspUnit 很好,但不再维护。

几个月前,我看到了一份关于如何制作自己的样本的示例。该示例使用 nUnit 针对网站调用函数以进行自动测试。我想我已经把它摘下来了 这里 (我的线路已断线,无法查看)

关于第二点,我认为你有几个选择......

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

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

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

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

回溯到VBScript/ASP仍然可以的那一天,我在一家公用事业公司工作的DB非常混杂,我曾经通过此网站发誓: http://www.connectionstrings.com/

@michealpryor 说得对

我一直在 ASP 上构建,我能感受到你的痛苦。

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

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

2) 我还没有看到任何关于专门针对 ASP 的 MVC 的内容,但我绝对感兴趣,因为这是我很难理解的东西。我通常尝试至少在单独的函数中包含类似视图的东西和类似控制器的东西。我想您可以在单独的文件中编写代码,然后使用服务器端包含将它们全部连接在一起。

3) 您可能来自一种内置更多功能的语言。起初,有些东西可能看起来缺失了,但这通常只是编写比您习惯的代码行多得多的问题。

另外,对于数据库访问,我有一组函数 - GetSingleRecord、GetRecordset 和 UpdateDatabase,它们具有与 Michael 上面提到的类似的功能

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top