如何在SQL语句中使用ASP变量

时间:2013-12-18 13:50:11

标签: sql asp-classic

<%
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

6 个答案:

答案 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)

将来会帮助你的一些事情

  1. 使用Option Explicit以避免隐藏将在以后再次出现的问题
  2. 使用ADODB.Command对象,它非常通用,可以执行一系列数据库调用,从简单的动态SQL语句到存储过程,而不会有SQL注入的风险。
  3. 在代码中使用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
相关问题