如何通过ADO VBA提供更新存储过程的十进制输入参数(可以为null)

时间:2016-04-15 21:17:27

标签: sql-server excel vba stored-procedures

我正在尝试在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

有关正确设置输入参数的建议吗?感谢。

1 个答案:

答案 0 :(得分:0)

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

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