1

下面是我用来向 SQL Server 数据库插入一些数据的简单 asp 代码。它给出了以下错误。有人可以看看,让我知道这段代码的错误吗?

<html>
    <head>
        <title>Address Book Insertion</title>
    </head>
    <body>
<%

    set connection=Server.CreateObject("ADODB.Connection")
    connection.Open "Provider=SQLOLEDB;Server=charithj-pc;Integrated Security=SSPI;Initial Catalog=AddressDB;"

    cmd =       "INSERT INTO AddressBook (FirstName, Surname, Address) VALUES ('"
    cmd = cmd & Request("FirstName") & "','"
    cmd = cmd & Request("Surname")   & "','" 
    cmd = cmd & Request("Address")   & "')"

    Response.Write(cmd)

    on error resume next
    connection.Execute cmd
    if err <> 0 then
        Response.Write("Insertion failed")
    else 
        Response.Write("Insertion successful")
    end if
    connection.close
%>
    </body>
</html>

网站无法显示页面

HTTP 500

最可能的原因:

•网站正在维护中。

•该网站有一个编程错误。

4

3 回答 3

3

进入您的浏览器,我认为它是 Internet Explorer 并禁用“显示友好的 http 错误”。这可以帮助您查看真正的错误消息。

顺便提一句。您的代码允许 sql 注入。使用 sql 参数或替换一些字符,如单引号等。

于 2011-04-24T09:10:41.467 回答
2

关于关闭友好的 HTTP 错误、删除错误恢复和处理 SQL 注入的观点都是正确的,你应该在我们猜测错误之前做这些,但有一件事在你的 VB 中确实很突出脚本代码(即嵌入在 ASP Classing 中的语言<% %>)。

那就是你对 Response.Write() 的使用。

这样做是允许代码将输出返回给浏览器。当你有这条线时:

Response.Write(cmd)

您正在将 cmd 对象的字符串表示形式发送回浏览器。这很容易破坏页面的服务器端创建。


还有两条一般性建议可以让您更好地工作:

  • 对于除了最琐碎的页面之外的所有页面,通常最好从 ASP 页面中删除代码并将其放入 ASP 页面随后调用的独立库中。这对于数据访问代码当然是可取的。

  • 在测试时,您的 VB 脚本代码不需要运行在 ASP 页面之外,您可以将脚本复制到文本文件中。将该文件重命名为 .vbs,您应该能够通过双击它来运行 VB 脚本。在解决错误时,我总是发现这更方便。

于 2011-04-24T09:30:56.370 回答
1

这是我现在得到的错误。Microsoft OLE DB Provider for SQL Server 错误“80004005”无法打开登录请求的数据库“AddressDB”。登录失败。/AddressBook/Insert.asp,第 9 行 -</p>

尝试使用 sql 身份验证,请参阅此处的连接字符串:www.connectionstrings.com/ 或更改您的安全设置:

http://msdn.microsoft.com/en-us/library/2xzyzb0f.aspx

于 2011-04-25T06:58:47.160 回答