2012-03-09 112 views
2

是否可以将DBNull.Value作为可选参数传递? 我试过C#DBNull.Value作为可选参数

private void CallSP(string param0, string param2 = DBNull.Value) 
{ 
} 

它给错误了。我需要在这个方法中调用一个存储过程,所以我传递了DBNull.Value。 Is'DBNull.Value'和'null'在SQL Server中被视为相同吗?我应该通过'空'而不是'DBNull.Value'?

+0

@ 1ntello“从不使用空”相反 - 但绝对没有理由不使用'null',和它与SQL中的null不是非常不同 - 只有null-equality才是不同的,并且使得一致性是微不足道的。 – 2012-03-09 09:29:47

+0

也许还会看到:http://stackoverflow.com/a/9632050/23354 – 2012-03-09 09:57:02

回答

8

DBNull.Value一个字符串,并且是不恒定(可选参数值必须是常量)。做到这一点的方法是将其默认为普通null,并添加参数时处理null

private void CallSP(string param0, string param2 = null) 
{ 
    ... 
    object value = (object)param2 ?? DBNull.Value; 
    // ^^^ use value in the parameter 
    ... 
} 
+2

+1,只是为了明确声明OP,因为它经常让人们绊倒 - 将参数值设置为空将导致该参数不被传递你最终会遇到一个SqlException。 null!= DBNull.Value – AdaTheDev 2012-03-09 09:29:15

+0

这是一个美丽的解决方案.. – 2012-03-09 09:30:20

+2

@AdaTheDev个人而言,我还没有为** DBNull **的存在**找到**引人注目的原因。我见过很多争论 - 没有一个引人注目。 – 2012-03-09 09:30:58