2011-04-24 104 views
1

下面是我用来将一些数据插入到SQL Server数据库的简单asp代码。它给出了下面的错误。有人可以看一下,让我知道这个代码的错误? •网站正在维护经典ASP和SQL Server Express 2005

<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

最可能的原因。

•网站有编程错误。

+0

你确定你的连接字符串是正确的吗?服务器名称看起来不像SQL Server Express实例名称。 – Oded 2011-04-24 09:08:09

+0

我建议在错误恢复下移除 这可能有助于更快找到问题。 – NickD 2011-04-24 09:19:43

+0

无论如何,为什么不使用SQL Server Express 2008 R2? 2005已过时 – abatishchev 2011-04-25 07:07:17

回答

3

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

btw。你的代码允许sql注入。使用sql参数或替换一些字符,如单引号等

+0

对于sql注入+1 - 串连字符串与来自用户的输入并执行它们作为命令是这样的BAD – stalker 2011-04-24 09:14:48

+0

另一点,我假设来自iis的应用程序池无权访问数据库。默认它可能是网络服务。 – NickD 2011-04-24 09:37:13

2

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

这就是您使用Response.Write()。

这样做是否允许代码将输出返回到浏览器。当你有该行时:

Response.Write(cmd) 

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


两个一般性件让你更好的工作:

  • 为所有,但最琐碎的网页通常最好从ASP页面删除代码,并把它变成一个独立的libary,然后ASP页面调用。这对于数据访问代码来说当然是明智的。

  • 测试时,您的VB脚本代码不需要用完ASP页面,您可以将脚本复制到文本文件中。重命名该文件.vbs,你应该能够通过双击运行VB脚本。我总是发现通过一个错误工作更方便。

+0

我想要的是,你需要一个命令对象,但你可以直接使用连接对象。他没有明确地定义选项,所以cmd是一个简单的字符串。 – NickD 2011-04-24 09:33:28

+0

哎呀,对了,我会把那部分拿出来。 – 2011-04-24 09:35:30

+0

@Snoopy此外,做response.write不应该导致问题。我想我们拭目以待真正的错误是:) – 2011-04-24 09:39:12

1

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

可尝试使用SQL身份验证,请参见连接字符串是在这里:www.connectionstrings。COM/ 或更改安全设置:

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