2016-01-21 21 views
1

我有一個存儲過程,需要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

您正在將@levelType參數定義爲adVarChar,但您將Integer傳遞給它。改爲傳遞參數String

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

我用"2"而不是2

+0

我試過了,它沒有區別。根據原始文章中描述的內容,它仍然有效或中斷 – user3839756