<%
postit = request.querystring("thispost")
response.write(postit)
%>
postit
是变量。 response.write
有效,这就在下面的SQL语句之上。
这是SQL,但是当我添加postit
变量时,我收到此错误消息:
delCmd.CommandText="DELETE * FROM post WHERE (pos_ID = postit )"
Microsoft Access Database Engine error '80040e10'
No value given for one or more required parameters.
/student/s0190204/wip/deleterecord.asp, line 32
答案 0 :(得分:2)
向SQL添加参数:
delCmd.CommandText="DELETE * FROM post WHERE (pos_ID = ?)"
delCmd.Parameters.Append delCmd.CreateParameter("posid", adInteger, adParamInput) ' input parameter
delCmd.Parameters("posid").Value = postit
答案 1 :(得分:1)
将来会帮助你的一些事情
Option Explicit
以避免隐藏将在以后再次出现的问题ADODB.Command
对象,它非常通用,可以执行一系列数据库调用,从简单的动态SQL语句到存储过程,而不会有SQL注入的风险。在代码中使用ADODB.Command
对象时,有一些提示可以加快速度,这将在下面的示例中进行演示(假设您已经在全局配置调用中存储了连接字符串{{1 }});
gs_connstr
答案 2 :(得分:1)
在这里,我尝试使用汽车的 car_color
获取汽车的 id
。
现在我可以在我的代码中使用 car_color
记录集。
我还建议在传入值时使用 CLng
,它可以防止 sql 注入。
如果 carID
不是数字,您将收到以下错误:
“来自服务器的 500 响应。记得打开和关闭 sql 连接。”
代码如下:
sql = "Select * from Cars Where ID = " & clng(carID)
rs.open
if not rs.eof then
carID = rs("car_ID")
carColor = rs("car_color")
end if
rs.close
答案 3 :(得分:0)
您没有将postit
的值传递给Access;相反,你告诉Access找到&amp;使用名为postit
的变量。当然,Access中不存在所述变量 - 它只存在于您的代码中。修复只是几个引号和一对&符号。
delCmd.CommandText="DELETE * FROM post WHERE (pos_ID = " & postit & " )"
(当然,在发送到数据库之前,你应该验证postit
。一个简单的CDbl()
可以做到这一点,假设它是一个数值。)
答案 4 :(得分:0)
试试这段代码:
<% Dim postit, stringSQL, objectCon
postit = request.querystring("thispost")
Set objectCon = Server.CreateObject("ADODB.Connection")
objectCon.ConnectionString "Driver={SQL SERVER};Server=server_name;UID=user_name;PWD=password;Database=database_name" 'SET CONNECTION STRING OF YOUR DATABASE
stringSQL = "DELETE FROM post WHERE pos_id='" & postit & "'"
objectCon.Open
objectCon.Execute(stringSQL)
objectCon.Close() %>
答案 5 :(得分:-1)
更容易删除,这种方式在不需要检查记录集时很有用:
cn.open "yourconnectionstring"
cn.execute "DELETE * FROM post WHERE pos_ID = " & request.querystring("thispost")
cn.close