我有一个在某些情况下返回 null 的存储过程。当我ToString()
返回 null 时,它会以字符串而不是空字符串的形式返回“null”,但是如果我不使用该.ToString()
方法,则会导致错误。
Public Function ReturnValue(ByVal lngId As Long) As String
Dim adoCmd As New OracleCommand
Dim strReturn As String = ""
With adoCmd
.CommandText = "BUS_TEST.ReturnValue"
.CommandType = CommandType.StoredProcedure
.Parameters.Add("return", OracleDbType.Char, 256, strReturn, ParameterDirection.ReturnValue)
.Parameters.Add("lngId", OracleDbType.Double, lngId, ParameterDirection.Input)
End With
objSalUtil.ExecFunc(ocEWBConnection, adoCmd, "ReturnValue")
Return adoCmd.Parameters(0).Value.ToString
End Function
上面的代码返回“null”
Public Function ReturnValue(ByVal lngId As Long) As String
Dim adoCmd As New OracleCommand
Dim strReturn As String = ""
With adoCmd
.CommandText = "BUS_TEST.ReturnValue"
.CommandType = CommandType.StoredProcedure
.Parameters.Add("return", OracleDbType.Char, 256, strReturn, ParameterDirection.ReturnValue)
.Parameters.Add("lngId", OracleDbType.Double, lngId, ParameterDirection.Input)
End With
objSalUtil.ExecFunc(ocEWBConnection, adoCmd, "ReturnValue")
Return adoCmd.Parameters(0).Value
End Function
上面的代码会导致 InvalidCastException:从“OracleString”类型到“String”类型的转换无效。
Public Function ReturnValue(ByVal lngId As Long) As String
Dim adoCmd As New OracleCommand
Dim strReturn As String = ""
With adoCmd
.CommandText = "BUS_TEST.ReturnValue"
.CommandType = CommandType.StoredProcedure
.Parameters.Add("return", OracleDbType.Char, 256, strReturn, ParameterDirection.ReturnValue)
.Parameters.Add("lngId", OracleDbType.Double, lngId, ParameterDirection.Input)
End With
objSalUtil.ExecFunc(ocEWBConnection, adoCmd, "ReturnValue")
Return strReturn
End Function
最后,上面的代码返回一个正确的空字符串,但是它在所有情况下都会这样做,无论是否应该返回一些东西。
我过去经常使用这样的存储过程,但是它们总是在所有情况下都返回一个值。我不太确定如何处理这个空值。我不想先检查包含“null”的字符串,因为这有点hacky,我想知道将来我做错了什么。