C# 经典ASP和SQLServerExpress 2005
下面是我的简单asp代码,我正在使用它向SQL Server数据库插入一些数据。它给出了以下错误。有人能看一下并告诉我这个代码的错误吗C# 经典ASP和SQLServerExpress 2005,c#,sql-server,asp-classic,sql-server-2005-express,C#,Sql Server,Asp Classic,Sql Server 2005 Express,下面是我的简单asp代码,我正在使用它向SQL Server数据库插入一些数据。它给出了以下错误。有人能看一下并告诉我这个代码的错误吗 <html> <head> <title>Address Book Insertion</title> </head> <body> <% set connection=Server.CreateObject("ADODB.Connec
<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
最可能的原因:
•网站正在维护中
•网站存在编程错误
进入浏览器,我假设它是internet explorer,并禁用“显示友好的http错误”。这有助于您查看真正的错误消息
顺便说一句,您的代码允许sql注入。使用sql参数或替换一些字符,如单引号等。进入浏览器,我假设它是internet explorer,并禁用“显示友好的http错误”。这有助于您查看真正的错误消息
顺便说一句,您的代码允许sql注入。使用sql参数或替换一些字符,如单引号等。关于关闭友好的HTTP错误、删除错误恢复和处理sql注入的要点都是正确的,在我们猜测错误的地方走得太远之前,您应该这样做,但有一点在您的VB脚本代码中非常突出(这是
中ASP分类中嵌入的语言)
这就是Response.Write()的用法
这样做的目的是允许代码将输出返回到浏览器。当您有行时:
Response.Write(cmd)
您正在将cmd对象的字符串表示形式发送回浏览器。这很容易破坏服务器端创建页面的过程
还有两条让你工作得更好的建议:
- 对于除最普通的页面外的所有页面,通常最好从ASP页面中删除代码,并将其放入ASP页面随后调用的独立库中。这对于数据访问代码来说无疑是明智的
- 在测试过程中,您的VB脚本代码不需要从ASP页面中运行,您可以将脚本复制到文本文件中。重命名该文件。vbs,您应该能够通过双击该文件来运行VB脚本。我发现在处理错误时,这一点要方便得多
中嵌入ASP分类的语言)
这就是Response.Write()的用法
这样做的目的是允许代码将输出返回到浏览器。当您有行时:
Response.Write(cmd)
您正在将cmd对象的字符串表示形式发送回浏览器。这很容易破坏服务器端创建页面的过程
还有两条让你工作得更好的建议:
- 对于除最普通的页面外的所有页面,通常最好从ASP页面中删除代码,并将其放入ASP页面随后调用的独立库中。这对于数据访问代码来说无疑是明智的
- 在测试过程中,您的VB脚本代码不需要从ASP页面中运行,您可以将脚本复制到文本文件中。重命名该文件。vbs,您应该能够通过双击该文件来运行VB脚本。我发现在处理错误时,这一点要方便得多
这是我现在得到的错误。Microsoft SQL Server的OLE DB提供程序错误 “80004005”无法打开数据库 登录请求的“AddressDB”。 登录失败。 /地址簿/Insert.asp,第9行- 或者尝试使用sql身份验证,请参见此处的连接字符串:www.connectionstrings.com/ 或更改您的安全设置:
这是我现在得到的错误。Microsoft SQL Server的OLE DB提供程序错误 “80004005”无法打开数据库 登录请求的“AddressDB”。 登录失败。 /地址簿/Insert.asp,第9行- 或者尝试使用sql身份验证,请参见此处的连接字符串:www.connectionstrings.com/ 或更改您的安全设置:
您确定您的连接字符串正确吗?服务器名称看起来不像SQL server Express实例名称。我建议在下一步恢复时删除该名称,这有助于更快地发现问题。无论如何,为什么不使用SQL server Express 2008 R2?2005已过时?您确定您的连接字符串正确吗?服务器名称不正确k类似于SQL Server Express实例名称。我建议在下一步恢复时删除,这有助于更快地发现问题。无论如何,为什么不使用SQL Server Express 2008 R2?2005对于SQL注入来说是过时的+1-将字符串与用户输入关联并将其作为命令执行是非常糟糕的另一点,我假设iis没有对数据库的访问权限。默认的it可能是网络服务。+1对于sql注入-将字符串与用户输入关联并作为命令执行非常糟糕。另一点,我假设iis的应用程序池没有对数据库的访问权限。默认的it可能是网络服务。我认为相同,即您需要一个命令对象,但您可以直接使用连接对象。他没有定义option explicit,因此cmd是一个简单的字符串。@Snoopy,鉴于此,执行response.write应该不会引起问题。我想我们等着看真正的错误是什么:)我非常确定应用程序池用户没有与数据库关联:-)这是我现在得到的错误。SQL Server的Microsoft OLE DB提供程序错误“80004005”无法打开登录请求的数据库“AddressDB”。登录失败/AddressBook/Insert.asp,第9I行同样认为您需要一个命令对象,但您可以直接使用连接对象。他没有定义option explicit,所以cmd是一个简单的字符串。@Snoopy和give