我正在尝试对我的数据库运行查询,但我在执行时遇到错误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
时,查询工作无效,即使只是单独使用。我试过硬编码和使用变量,但没有任何作用,请帮助。
答案 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.Command
但CommandText
中的设置变量会在执行参数化查询时使用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。