2012-07-04 2 views
1

Я пытаюсь получить paramterised запрос для работы в asp classic. Любая помощь приветствуется Здесь ошибкаПараметрированный запрос asp classic отсутствует ошибка операнда

Microsoft OLE DB Provider для визуальной ошибки FoxPro '80040E14' Отсутствующего операнда. /portal/jobportal/getaddress1.asp, линия 141

function paramQuery() 

code = ucase(request.querystring("code")) 
stype = request.querystring("type") 
cAddressType = request.querystring("caddresstype") 


Set rs = Server.CreateObject("ADODB.recordset") 
Set cmd = server.CreateObject("ADODB.Command") 

If IsObject(Session("portal_conn")) Then 
    Set conn = Session("portal_conn") 
Else 
    Set conn = Server.CreateObject("ADODB.Connection") 
    cConnString = "Provider=vfpoledb;Data Source="+session("portaldata")+"portal.dbc" 
    conn.open cConnString,"","" 
    Set Session("portal_conn") = conn 
end if 

cmd.ActiveConnection = conn 
cmd.Prepared = true 
cmd.CommandType = 1 
cmd.CommandText = "SELECT * from uaddress where userid = "+cstr(session("userid"))+" and upper(name) like ? + % "+" and type = '"+ trim(cAddresstype)+"' order by add1" 

set param1 = cmd.CreateParameter("@name",200,2,40) 
cmd.Parameters.append param1 
cmd.Parameters("@name") = code 
cmd.Execute() <-- missing operand error 
rs.Open cmd 

end function 

ответ

2

При использовании параметра для пункта SQL like нужно передать % как часть значения параметра.

также для защиты от SQL Injection атак вы действительно лучшие параметры использования для других значений, а также:

cmd.CommandText = "SELECT * FROM uaddress WHERE userid=? AND UPPER(name) LIKE ? AND type=? ORDER BY add1" 

set param1 = cmd.CreateParameter("@id", 200, 2, 40) 
cmd.Parameters.append param1 
cmd.Parameters("@id") = cstr(session("userid")) 

set param2 = cmd.CreateParameter("@name", 200, 2, 40) 
cmd.Parameters.append param2 
cmd.Parameters("@name") = "%" & code & "%" 

set param3 = cmd.CreateParameter("@type", 200, 2, 40) 
cmd.Parameters.append param3 
cmd.Parameters("@type") = trim(cAddresstype) 

cmd.Execute() 
+0

Является ли это особенностью FoxPro? Раньше я использовал параметры для предложений 'LIKE' в других базах данных. –

+0

@Cheran Я давно что-то читал, и это заклеено - мое плохое. Будет обновлено мое сообщение соответственно. –

0

Вы должны кавычки % характера:

... +" and upper(name) like ? + '%' "+ ... 
+0

Я думаю, что это будет по-прежнему не работает, так как вы должны передать '%' как часть самого параметра, но это не совсем неправильно как я думал раньше. Мои извинения. –

0

Похоже, VFP не поддерживает именованные параметры, просто добавьте Params в том порядке, apears в запрос, используя (?) вместо именованного параметра, и он будет работать.

вместо:

cmd.Parameters("@name") = code 

Использование:

cmd.Parameters("?") = code