SqlParameter在C#中强制转换

时间:2014-08-28 16:28:25

标签: c# sql casting

我有一个包含在从存储过程返回的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)

但它给了我一个无效的施法错误。

2 个答案:

答案 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.
}

因此,标量返回的值应包含实际的intnull

因此,为了解决为什么你收到(int)的错误,我们需要看看你如何实现标量并知道它在演员之前实际返回的object类型。