将整数变量分配给从有时可能包含NULL的SQL存储过程返回的值时出现此错误。
System.InvalidCastException: Specified cast is not valid.
代码段:
Dim iUserId As Nullable(Of Integer)
' Get the UserId associated to the server.
.CommandType = Data.CommandType.StoredProcedure
.CommandText = "SelectUserIdByServerId"
.Parameters.Clear()
.Parameters.AddWithValue("@ServerId", Request("serverid"))
' Returns back 1 column.
iUserId = .ExecuteScalar()
我虽然如果我有:Dim iUserId As Nullable(Of Integer)
,它应该没有问题。
答案 0 :(得分:3)
ExecuteScalar()
会返回Object
或integer
值DbNull
。
所以你需要这样写:
Dim tmp As Object = .ExecuteScalar()
iUserId = if(Convert.IsDbNull(tmp), new integer?(), directcast(tmp, integer))