2014-03-27 275 views
1

我试图将NULL值插入列类型'int'。我正在使用以下函数,但仍然收到InvalidOperationException。这是我的代码。请建议。将字符串空值转换为int

p.type_id值为“null”。

cmd.Parameters.AddWithValue("@type_id", ToNullableInt32(p.type_id)) 

    public static int ToNullableInt32(string s) 
    { 
     int i; 
     if (Int32.TryParse(s, out i)) return i; 
     return null; 
    } 
+10

你的返回类型应该是一个可为空的int:'int?'。 –

+2

你的'ToNullableInt32'方法甚至不应该编译,所以我对你如何进入'InvalidOperationException'有点困惑。 –

+0

我试过int?但仍然收到错误消息。它只适用于我使用DBNull.value。 cmd.Parameters.AddWithValue(“@ type_id”,DBNull.Value) – nav100

回答

3

尝试:

public static int? ToNullableInt32(string s) 
{ 
    int i; 
    return (Int32.TryParse(s, out i)) ? i : null; 
} 

编辑:我注意到您的评论对你原来的问题有关,只与DBNull的值工作。在这种情况下,请尝试添加...

cmd.Parameters.AddWithValue("@type_id", ToNullableInt32(p.type_id) ?? DBNull.Value) 

...除了ToNullableInt32方法更新。

2

它应该是一个可空INT

public static int? ToNullableInt32(string s) 
{ 
    ... 
}