C# SQLC中的参数转换#
我有一个SqlParameter,包含在从存储过程返回的var中,该值为Null、int或-1。如何强制转换var以检查它在C#中是否为-1 我试过:C# SQLC中的参数转换#,c#,sql,casting,C#,Sql,Casting,我有一个SqlParameter,包含在从存储过程返回的var中,该值为Null、int或-1。如何强制转换var以检查它在C#中是否为-1 我试过: if ((int?)eventID.Value == -1) 但是它给了我一个无效的强制转换错误。SQL请求通过对象向C#报告NULLs,强制转换失败 您可以对int?执行其他类型的强制转换,而不会触发错误: var eventIdInt = eventId as int?; if (eventIdInt == -1) { ... }
if ((int?)eventID.Value == -1)
但是它给了我一个无效的强制转换错误。SQL请求通过对象向C#报告
NULL
s,强制转换失败
您可以对int?
执行其他类型的强制转换,而不会触发错误:
var eventIdInt = eventId as int?;
if (eventIdInt == -1) {
...
}
当强制转换失败时,
x as type
类型的强制转换将产生null
值,而不是引发异常。当发生错误时,您的方法将引发无效强制转换异常。但是,如果将用作int
,如果失败,它将返回null。这会更优雅,更宽容
因此,您可以执行以下操作:
if(eventId != null)
{
// Do Stuff.
}
因此,标量返回的值应该包含实际的int
或null
因此,为了解决您收到
(int)
错误的原因,我们需要了解您是如何实现标量的,并了解在强制转换之前实际返回的对象的类型。请显示从SqlParameter提取的代码。事件ID的类型是什么?您的过程在哪个数据库中?不同的数据库返回不同的类型。您是在用SqlParameter赋值编辑问题吗?您的意思是不是如果(eventint.HasValue&&eventint.Value=-1)
?在编写时,它仍然可能在if语句上引发NullReferenceException。@ErikPhilips否,您不需要检查HasValue
:如果值为-1
,比较将成功,并且当值为null
时它不会引发异常。真是不可思议!你说得对,我总是检查null是否抛出错误,所以这段代码对我来说是反向的:)
if(eventId != null)
{
// Do Stuff.
}