麻烦在asp经典的Access DB上运行查询

时间:2014-11-06 18:17:13

标签: sql vbscript asp-classic

我正在尝试对我的数据库运行查询,但我在执行时遇到错误80004005,但不知道为什么?

Set adconn = Server.CreateObject("ADODB.Connection") 
adconn.Open "justlistit_changes"

Set sqlgetad1 = Server.CreateObject("ADODB.Command")
sqlgetad1.ActiveConnection = adconn
sqlgetad1.commandtext = "Select * from ads where county = '" & selcounty & "' and where position='1'"
sqlgetad1.Prepared = true
sqlgetad1.execute
adconn.Close

当我使用county参数时,查询工作正常,但在我尝试在查询中的任何位置使用position时,查询工作无效,即使只是单独使用。我试过硬编码和使用变量,但没有任何作用,请帮助。

2 个答案:

答案 0 :(得分:0)

松开第二个“在哪里”:

"Select * from ads where county = '" & selcounty & "' and where position='1'"

==>

"Select * from ads where county = '" & selcounty & "' and position='1'"

答案 1 :(得分:0)

  

<强>更新

     

原因是position是Microsoft Access中的ANSI 92保留字 - 请参阅ACC2002: Error with ANSI-92 Reserved Words When SQL Server Compatibility Syntax (ANSI 92) Is Enabled

     

要解决此问题,只需将字段封装在方括号中[] (更新我的示例)

[position] = ?

  

<强>更新

     

看起来您的报告错误与您的代码无关。

     

您使用ADODB.CommandCommandText中的设置变量会在执行参数化查询时使用ADODB.Command绕过保护。

试试这个;

Dim sqlgetad1, rs

Set sqlgetad1 = Server.CreateObject("ADODB.Command")
With sqlgetad1
  'Assuming justlistit_changes is your connection string variable.
  .ActiveConnection = justlistit_changes
  .CommandType = adCmdText
  '******** Avoid any clashes with ANSI 92 reserved words ********
  .CommandText = "Select * from ads where [county] = ? and [position] = ?"
  .Prepared = true
  .Parameters.Append(.CreateParameter("@county", adVarChar, adParamInput, 100))
  'Assuming your position field is actually a numeric value.
  .Parameters.Append(.CreateParameter("@position", adInteger, adParamInput, 4))
  .Parameters("@county").Value = selcounty
  .Parameters("@position").Value = 1
  Set rs = .Execute()
End With

如果您的position字段不是

的数字替换
.Parameters.Append(.CreateParameter("@position", adVarChar, adParamInput, 10))
.Parameters("@position").Value = "1"

如果您在使用adCmdText等名为常量的ADO时遇到问题,请查看how to use METADATA to import DLL constants