参数对象未正确定义错误,参数定义似乎是正确的

时间:2016-01-21 20:00:48

标签: sql-server vb6

我有一个存储过程,需要6个参数5个输入和1个输出。 所有参数似乎都已正确定义(参数名称,数据类型,输入或输出,大小和值)。我的输出大小和数据类型似乎不是问题。但有时我只会收到错误消息“参数对象未正确定义运行时错误3708”。奇怪的是,如果我运行此代码时所有其他值相等(包括CurrentCnn,adCmdStoredProc等),其值为OptStore或OptCorporate True,我的代码运行正常。 如果我有任何其他Opt *变量True,那么我得到这个错误。所有strStorNo值都是最多3个字符长的字符串值。我可以测试我的存储过程,它会按预期返回我的计数值,我将为所有情况传入存储过程值。

这是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

我在这里难倒,除了我的参数定义之外,还有其他不正确定义的参数对象可以参考吗?

1 个答案:

答案 0 :(得分:0)

您将@levelType参数定义为adVarChar,但是您正在向其传递Integer。将参数改为String

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

我使用"2"而非2