我有一个存储过程,需要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
我在这里难倒,除了我的参数定义之外,还有其他不正确定义的参数对象可以参考吗?
答案 0 :(得分:0)
您将@levelType
参数定义为adVarChar
,但是您正在向其传递Integer
。将参数改为String
。
...
.Parameters.Append .CreateParameter("@levelType", adVarChar, adParamInput, 1, "2")
...
我使用"2"
而非2
。