【问题标题】:How to feed an update stored procedure's decimal input parameter (could be null) by ADO VBA如何通过 ADO VBA 提供更新存储过程的十进制输入参数(可能为空)
【发布时间】:2016-04-15 21:17:27
【问题描述】:

我正在尝试在 Excel 中创建一个模板,以便客户批量更新 SQL Server 数据库。

棘手的部分是几个数字列,例如,我正在测试的是Estimated_Amt。该值可能为null,我尝试过但仍然无法确定它是否为null,如何传递该值以收取更新存储过程的费用。

这是我设置参数的方式:

Estimated_Amt  = .Cells(iRowNo,8)

If (.Cells(iRowNo, 8) = "") Then
    cmd.Parameters.Append cmd.CreateParameter("@Estimated_Amt", adVarChar, adParamInput, DBNULL.Value)
Else
    cmd.Parameters.Append cmd.CreateParameter("@Estimated_Amt", adVarChar, adParamInput, CStr(Estimated_Amt))
End If

我分别尝试了AdDoubleAdDecimal,但从来没有成功捕捉到空值或空值,而AdVarchar 仍然无法正常工作

调用过程部分是这样的:

cmd.CommandText = "SP_RIBulkyUpdate @CaseNumber = " &     CaseNumber & ", " & _
"@Estimated_Amt = " & Estimated_Amt

关于正确设置输入参数有什么建议吗?谢谢。

【问题讨论】:

    标签: sql-server excel vba stored-procedures


    【解决方案1】:

    您可以尝试vbNullStringNull (https://msdn.microsoft.com/en-us/library/microsoft.visualbasic.constants.vbnullstring(v=vs.110).aspx) 而不是DBNULL.Value

    ...
    cmd.Parameters.Append cmd.CreateParameter("@Estimated_Amt", adVarChar, adParamInput, Null)
    ...
    

    【讨论】:

    • 谢谢。我猜 vbNullString 可以工作,但仍然出现类型不匹配错误
    • 看看here,其中CommandType设置为cmd.CommandType = adCmdStoredProcCommandText设置为存储过程名称,即cmd.CommandText = "SP_RIBulkyUpdate"
    • 我明白你的意思了,我只是尝试指定 cmd.CommandType = adCmdStoreProc,但有些 CreateParameter 部分没有成功,参数没有正确输入。你有一些关于调用更新存储过程的例子吗?
    • 你试过模仿这个例子吗? stackoverflow.com/a/24249331/5251960
    猜你喜欢
    • 2013-11-24
    • 1970-01-01
    • 1970-01-01
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多