我需要从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参数为零。有什么方法可以解决这个问题吗?如果输入的字符串长度为零个字符,那么它是否不接受零作为有效大小?
提前致谢。
答案 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