Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.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# cmd.Parameters.AddWithValue可为Null int_C#_Asp.net_Tsql - Fatal编程技术网

C# cmd.Parameters.AddWithValue可为Null int

C# cmd.Parameters.AddWithValue可为Null int,c#,asp.net,tsql,C#,Asp.net,Tsql,在我的数据层类中,我初始化了如下参数: private int? _DependencyID; public int? DependencyID { get {return _DependencyID;} set {_DependencyID = value;} } public ConstructorMethod() { _DependencyID = (int?)null; } 在类Insert方法中,我正在尝试 cmd.AddWithValue("@DependencyID"

在我的数据层类中,我初始化了如下参数:

private int? _DependencyID;

public int? DependencyID
{ get {return _DependencyID;} set {_DependencyID = value;} }

public ConstructorMethod()
{
    _DependencyID = (int?)null;
}
在类Insert方法中,我正在尝试

cmd.AddWithValue("@DependencyID", _DependencyID);
如果_DependencyID有一个值,则一切正常。 如果_DependencyID为null,则我得到错误:

参数化查询 “@param1nvarchar10, @param2nvarchar255,应为 参数'@dependcyid,它是 未提供

我找到了这篇[文章][1],所以我试着像这样调整代码:

cmd.AddWithValue("@DependencyID", _DependencyID == null? DBNull.Value : _DependencyID); 

                           and
cmd.AddWithValue("@DependencyID", _DependencyID == null? (int?) DBNull.Value : _DependencyID); 
不管怎样,都有问题。我该怎么处理


提前感谢您提供的任何帮助

AFAIC,ADO.NET/SQL不支持这种方式的可空类型

最后一个例子对我来说似乎最正确。你有什么问题?如果您刚刚遇到与类型相关的编译错误,请键入将值强制转换为对象:

(object)DependencyID.Value;

由于:两侧的两个值必须是同一类型。

AFAIC,ADO.NET/SQL不支持这种可为空的类型

最后一个例子对我来说似乎最正确。你有什么问题?如果您刚刚遇到与类型相关的编译错误,请键入将值强制转换为对象:

(object)DependencyID.Value;
因为:两侧的两个值必须是同一类型。

您需要添加一个对象:

你可以把它缩短为

cmd.AddWithValue("@DependencyID", (object)_DependencyID ?? DBNull.Value); 
您需要添加一个对象:

你可以把它缩短为

cmd.AddWithValue("@DependencyID", (object)_DependencyID ?? DBNull.Value); 

我创建了一个扩展来简化代码

public static class SQLExtension
{
    public static SqlParameter AddWithNullable<T>(
        this SqlParameterCollection collection, 
        string parameterName, 
        Nullable<T> value) where T : struct, IComparable
    {
        return collection.AddWithValue(
            parameterName, (value.HasValue ? value.Value : (object)DBNull.Value)
        );
    }
}

我创建了一个扩展来简化代码

public static class SQLExtension
{
    public static SqlParameter AddWithNullable<T>(
        this SqlParameterCollection collection, 
        string parameterName, 
        Nullable<T> value) where T : struct, IComparable
    {
        return collection.AddWithValue(
            parameterName, (value.HasValue ? value.Value : (object)DBNull.Value)
        );
    }
}

正如我所理解的,是不是因为DBNull.Value是一个对象,将_DependencyID强制转换为一个对象就可以实现这一点?所以cmd负责装箱和拆箱?顺便说一句,谢谢大家的快速回复。。。。斯莱克的回答突然向我袭来,我比其他人理解得更快。非常感谢。all@Bengal:不需要。您只需要强制转换来告诉编译器表达式是什么类型。就我所知,是不是因为DBNull.Value是一个对象,将_DependencyID强制转换为一个对象就可以工作?所以cmd负责装箱和拆箱?顺便说一句,谢谢大家的快速回复。。。。斯莱克的回答突然向我袭来,我比其他人理解得更快。非常感谢。all@Bengal:否。您只需要强制转换来告诉编译器表达式是什么类型。