简体   繁体   中英

Parameter object improperly defined Error, Parameter definitions seem to be correct

I have a stored procedure that takes 6 parameters 5 inputs and 1 output. All of the parameters seem to be properly defined (parameter name, data type, input or output, size and value). My output size and data type does not seem to be the problem. however I get the error message "Parameter Object is improperly defined Run-Time error 3708" only sometimes. The odd thing is that If I run this code with all other values equal (including CurrentCnn, adCmdStoredProc, etc.)with a value of OptStore or OptCorporate True my code runs fine. If I have any other Opt* variable True instead then I get this error. all strStorNo values are string values at most 3 chars long. I can test my stored procedure and it returns my count value as expected with the stored procedure values I would pass in for all cases.

here is the vb6:

138     With cmdSP
140         .ActiveConnection = CurrentCNN
142         .CommandType = adCmdStoredProc
144         .CommandText = "HIcountProducts"
146         If blnUseUPCinSP Then
148             .Parameters.Append .CreateParameter("@upc", adVarChar, adParamInput, 13, objProdB.upc)
150             .Parameters.Append .CreateParameter("@cert_code", adVarChar, adParamInput, 15, Null)
152             .Parameters.Append .CreateParameter("@vendor", adInteger, adParamInput, , Null)
            Else
154             .Parameters.Append .CreateParameter("@upc", adVarChar, adParamInput, 13, Null)
156             .Parameters.Append .CreateParameter("@cert_code", adVarChar, adParamInput, 15, objProdB.cert_code)
158             .Parameters.Append .CreateParameter("@vendor", adInteger, adParamInput, , Null)
            End If
162         If intRetailVer = 2 Then
                If OptStore.Value = True Then
                    .Parameters.Append .CreateParameter("@levelID", adVarChar, adParamInput, 3, strStoreNo)
                    .Parameters.Append .CreateParameter("@levelType", adVarChar, adParamInput, 1, 3)
                ElseIf OptCorporate.Value = True Then
                    .Parameters.Append .CreateParameter("@levelID", adVarChar, adParamInput, 3, strStoreNo)
                    .Parameters.Append .CreateParameter("@levelType", adVarChar, adParamInput, 1, 6)
                ElseIf OptZones.Value = True Then
                    .Parameters.Append .CreateParameter("@levelID", adVarChar, adParamInput, 3, strStoreNo)
                    .Parameters.Append .CreateParameter("@levelType", adVarChar, adParamInput, 1, 2)
                ElseIf OptRegions.Value = True Then
                    .Parameters.Append .CreateParameter("@levelID", adVarChar, adParamInput, 3, strStoreNo)
                    .Parameters.Append .CreateParameter("@levelType", adVarChar, adParamInput, 1, 1)
                ElseIf OptClasses.Value = True Then
                    .Parameters.Append .CreateParameter("@levelID", adVarChar, adParamInput, 3, strStoreNo)
                    .Parameters.Append .CreateParameter("@levelType", adVarChar, adParamInput, 1, 1)
                End If
            End If
            .Parameters.Append .CreateParameter("@count", adInteger, adParamOutput, 1, 1)
166         .Execute , , adExecuteNoRecords
        End With
168     intRecordCount = cmdSP.Parameters("@count")
170     Set cmdSP = Nothing

Im stumped here, is there something else this parameter object improperly defined could be referencing besides my parameter definitions?

You are defining the @levelType parameter as adVarChar but you are passing an Integer to it. Pass the parameter as String instead.

...
.Parameters.Append .CreateParameter("@levelType", adVarChar, adParamInput, 1, "2")
...

I used "2" instead of just 2 .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM