在我的数据层阶级,我初始化参数,像这样:cmd.Parameters.AddWithValue可空INT
private int? _DependencyID;
public int? DependencyID
{ get {return _DependencyID;} set {_DependencyID = value;} }
public ConstructorMethod()
{
_DependencyID = (int?)null;
}
在类insert()方法,我试图
cmd.AddWithValue("@DependencyID", _DependencyID);
如果_DependencyID有一个价值,一切都很好。 如果_DependencyID是空的,我得到错误:
The parameterized query '(@param1(nvarchar(10), @param2(nvarchar(255), expects the parameter '@DependecyID", which was not supplied
我发现这个[文章] [1],所以我试图调整,像这样的代码:
cmd.AddWithValue("@DependencyID", _DependencyID == null? DBNull.Value : _DependencyID);
and
cmd.AddWithValue("@DependencyID", _DependencyID == null? (int?) DBNull.Value : _DependencyID);
无论哪种方式,有问题。我该如何处理?
在此先感谢您的帮助
只是所以我明白,是因为DBNull.Value是一个对象,它将_DependencyID投射到一个对象使得这项工作?所以cmd负责拳击和拆箱? – Bengal
顺便说一句,谢谢大家的快速回复.... SLak的答案刚刚跳出来,我比其他人更快地理解它。谢谢大家 – Bengal
@孟加拉语:不,你只需要投射就可以告诉编译器表达式是什么类型。 – SLaks