9

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

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

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

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

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

4

10 回答 10

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/

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

于 2008-08-25T15:04:33.867 回答
17

当我看到第一个答案时,我不得不离开我的电脑,并且仍然为它得到这么多人的认可而感到苦恼。这是最糟糕的 ASP 代码类型的一个骇人听闻的例子,这种代码可以确保您的站点是可注入 SQL 的,并且如果您继续在整个站点中使用此代码,则可以在其生命周期内被破解。

这不是你应该给刚接触 ASP 编码的人提供的那种代码,因为他们会认为这是用这种语言编码的专业方式!

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

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

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

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

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

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

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

于 2008-09-18T12:37:21.400 回答
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 - 显示在 page.vb.asp 中设置的数据。

于 2008-09-18T10:34:46.593 回答
3

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

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

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

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

于 2008-08-25T16:19:15.810 回答
3

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

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

I saw a sample on how to make your own one a few months back. The example used nUnit to call functions against the website for automatic testing. I think i got it off here (my line is borked so I can't check)

于 2009-07-09T12:25:32.273 回答
2

在第 2 点上,我认为您有几个选择...

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

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

于 2008-08-25T16:02:54.867 回答
2

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

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

于 2008-10-08T22:42:54.940 回答
1

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

@michealpryor 做对了

于 2008-08-25T19:37:08.753 回答
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)您可能来自一种内置更多功能的语言。起初,有些东西可能似乎丢失了,但通常只是编写比您习惯的更多行代码的问题。

于 2008-09-13T04:50:57.413 回答
1

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

于 2008-09-18T10:36:52.767 回答