我有一个包含在从存储过程返回的var中的SqlParameter,其值为Null,int或-1。如何转换var以检查C#中是否为-1?
var p_eventID = new SqlParameter()
{
ParameterName = "@EventID",
Value = (eventID.HasValue
? (object)eventID.Value
: (object)System.Data.SqlTypes.SqlInt32.Null),
Direction = ParameterDirection.InputOutput
};
我试过了:
if ((int?)eventID.Value == -1)
但它给了我一个无效的施法错误。
答案 0 :(得分:3)
SQL请求将NULL
报告给C#到DBNull
个对象,强制转换失败。
您可以在不触发错误的情况下对int?
执行其他类型的转换:
var eventIdInt = eventId as int?;
if (eventIdInt == -1) {
...
}
当投射失败时,x as type
样式的强制转换会产生null
值,而不是抛出异常。
答案 1 :(得分:0)
发生错误时,您的方法会抛出无效的强制转换。但是,如果您使用as int
如果失败,则会返回 null 。哪个会更优雅,更宽容。
所以你可以做到以下几点:
if(eventId != null)
{
// Do Stuff.
}
因此,标量返回的值应包含实际的int
或null
。
因此,为了解决为什么你收到(int)
的错误,我们需要看看你如何实现标量并知道它在演员之前实际返回的object
类型。