Sql server VBScript/ASP经典

Sql server VBScript/ASP经典,sql-server,model-view-controller,asp-classic,vbscript,Sql Server,Model View Controller,Asp Classic,Vbscript,关于VBScript和ASP Classic,我有几个问题: 在VBScript/ASP中访问MS SQL Server数据库的首选方法是什么 关于从视图和控制器中分离模型,最佳实践是什么 关于VBScript或ASP,我还应该知道什么 如果您没有注意到,我是VBScript编码新手。我意识到数字2和3是一种过于笼统的巨大“黑洞”问题,所以不要认为我期望从这里了解关于这两个问题的所有知识。ADO是在VBScript/Classic ASP中访问数据库的极好方法 Dim db: Set db =

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

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

  • 关于从视图和控制器中分离模型,最佳实践是什么

  • 关于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
    
    更多信息请点击此处:

    需要注意的是,如果要在记录集中返回备注字段,请确保一次只选择一个备注字段,并确保它是查询中的最后一列。否则你会遇到问题。
    (参考资料:)

    关于第二条,我想你有几个选择

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


    2) 可以在VBScript中创建类。实现中没有继承的概念,也没有其他更高级的功能,但是您可以将逻辑封装在类中,这有助于减少应用程序的垃圾性。看看这个:

    重复了一些想法并添加了一些我自己的想法:

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

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


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

    早在VBScript/ASP还可以使用的时候 我在一家公用事业公司工作,那里的DB环境非常复杂,我曾经对这个网站发誓:


    @michealpryor说得对

    我一直在构建ASP,我感觉到了你的痛苦

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

    教程(不是我的博客):

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

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

    记住要用这种语言编程,而不是用它编程。仅仅因为您使用的工具集有限,并不意味着您必须像1999年那样编程

    我同意杰森关于课程的看法。的确,你不能做像继承这样的事情,但你可以很容易地伪造它

    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文件,或者至少使用一个可以在其他地方声明并在整个站点中使用的常量

  • 在web环境中使用内联SQL进行任何操作已经没有任何好的借口了。使用存储过程——安全性好处怎么强调都不过分。如果你真的做不到,那么把内联参数作为第二个最好的选择。。。内联SQL将使您的站点对SQL注入、恶意软件注入和其他内容敞开大门

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

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

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

  • ASP仍然是一种强大的语言,尽管许多人建议迁移到.NET——通过良好的编码实践,ASP站点可以编写出易于维护、可扩展的语言