【问题标题】:Parameter object improperly defined Error, Parameter definitions seem to be correct参数对象未正确定义错误,参数定义似乎是正确的
【发布时间】:2016-01-21 20:00:47
【问题描述】:

我有一个存储过程,它接受 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

我被难住了,除了我的参数定义之外,这个未正确定义的参数对象是否还有其他引用?

【问题讨论】:

    标签: sql-server vb6


    【解决方案1】:

    您将@levelType 参数定义为adVarChar,但您将Integer 传递给它。改为将参数传递为String

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

    我使用"2" 而不仅仅是2

    【讨论】:

    • 这个我试过了,没什么区别。它仍然可以工作或中断,具体取决于原始帖子中的描述
    猜你喜欢
    • 2013-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多