【问题标题】:Using CreateParameters with a variable size parameter使用带有可变大小参数的 CreateParameters
【发布时间】:2016-05-21 03:19:49
【问题描述】:

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

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 参数为零。有什么办法可以解决这个问题吗?如果输入的字符串长度为零字符,它不应该接受零作为有效大小吗?

提前致谢。

【问题讨论】:

  • 所以表中的列是 char 而不是 varchar?
  • 长度应该是参数的最大大小,所以它是存储过程中声明的参数的长度,而不是传递给它的字符串的长度。
  • Alex K 和 Tom H,大声呼喊,谢谢。我已经尝试使用列的最大大小,但随后它在字符串的末尾添加了空格。我将其更改为 adVarChar 并再次将列的最大大小添加为 Size 并删除了空格。感谢您的帮助!

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


【解决方案1】:

您可以在存储过程中将大小设为可选参数。然后添加逻辑以将其从 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

结束

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多