使用具有可变大小参数的CreateParameters

时间:2016-02-10 16:36:35

标签: sql vba sql-server-2008 excel-vba stored-procedures

我需要从Excel调用存储过程,将用户输入的多个值作为参数传递。我几乎使用以下Parameters集合实现了这一点。

Set ADOCmd = New ADODB.Command

With ADOCmd
        .Parameters.Append .CreateParameter("@Department", adChar, adParamInput, Len(cDept), cDept)
        .Parameters.Append .CreateParameter("@title", adChar, adParamInput, Len(cTitle), cTitle)
        .Parameters.Append .CreateParameter("@name", adChar, adParamInput, Len(cName), cName)
        .Parameters.Append .CreateParameter("@email", adChar, adParamInput, Len(cEmail), cEmail)
        .Parameters.Append .CreateParameter("@tel_no", adChar, adParamInput, Len(cTel), cTel)
        .Parameters.Append .CreateParameter("@mob_no", adChar, adParamInput, Len(cMob), cMob)
End With

如果用户填写了所有值,这将正常工作。但是,如果有任何内容留空,则会发生以下错误。

Run-time error:'3708':
Parameter object is improperly defined. Inconsistent or incomplete information was provided.

我认为这是因为CreateParameter函数中传递的Size参数为零。有什么方法可以解决这个问题吗?如果输入的字符串长度为零个字符,那么它是否不接受零作为有效大小?

提前致谢。

2 个答案:

答案 0 :(得分:1)

Alex K和Tom H在这里帮助了我。

我将类型更改为adVarChar,并将大小更改为列允许的最大大小,从而解决了问题。

答案 1 :(得分:0)

您可以在存储过程中将size设置为可选参数。然后添加逻辑以将其从null更改为0.如果设置了大小,它将保留您传递的值。

CREATE PROCEDURE usp_SQL_Procedure
     @size INT = null,

AS Begin 
--if @size comes over as null make it 0
   set @size=ISNULL(@size,0)
rest of you SP

END