Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SQLC中的参数转换#_C#_Sql_Casting - Fatal编程技术网

C# SQLC中的参数转换#

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) { ... }

我有一个SqlParameter,包含在从存储过程返回的var中,该值为Null、int或-1。如何强制转换var以检查它在C#中是否为-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.
}