1

パラメータ化されたクエリをaspクラシックで機能させるようにしています。感謝される助けはここにエラーがあります

VisualFoxProエラー「80040e14」用のMicrosoftOLEDBプロバイダーオペランドがありません。/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
4

3 に答える 3

2

SQL句にパラメータを使用する場合は、パラメータ値の一部としてlikeを渡す必要があります。%

また、SQLインジェクション攻撃から保護するために、他の値のパラメーターも使用することをお勧めします。

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()
于 2012-07-08T06:57:49.207 に答える
0

%文字を引用符で囲む必要があります。

... +" and upper(name) like ? + '%' "+ ...
于 2012-07-05T00:50:37.023 に答える
0

VFPは名前付きパラメーターをサポートしていないようです。名前付きパラメーターの代わりに(?)を使用して、クエリに表示される順序でパラメーターを追加するだけで機能します。

それ以外の :

cmd.Parameters("@name") = code

使用する :

cmd.Parameters("?") = code
于 2016-11-01T19:34:51.890 に答える