12

当我将 SQL 参数添加p到集合中时,我会收到InvalidCastException来自帖子标题的消息。

parentId是一个可以为空的整数和数据库中的一个可以为空的整数。

为什么会出现此异常,我该如何解决?

我不使用存储过程,并且我已经阅读了类似的线程,但它们对我没有帮助。

var p = new SqlParameter("ParentId", SqlDbType.Int).Value = parentId ?? (object) DBNull.Value;
cmd.Parameters.Add(p);  
4

2 回答 2

18

你没有添加你的new SqlParameter. p是 的结果new SqlParameter("ParentId", SqlDbType.Int).Value = parentId ?? (object) DBNull.Value。换句话说,p它本身就是DBNull.Value

将语句一分为二,如下所示:

var p = new SqlParameter("ParentId", SqlDbType.Int);
p.Value = parentId ?? (object) DBNull.Value;
cmd.Parameters.Add(p);

或者,

var p = new SqlParameter("ParentId", SqlDbType.Int) { Value = parentId ?? (object) DBNull.Value };
cmd.Parameters.Add(p);

要么确保p是参数,而不是参数的值。

于 2012-11-30T21:41:58.353 回答
-2

你需要使用:

System.Data.SqlTypes.SqlInt32.Null
于 2012-11-30T21:42:30.053 回答