是否可以将DBNull.Value作为可选参数传递? 我试过C#DBNull.Value作为可选参数
private void CallSP(string param0, string param2 = DBNull.Value)
{
}
它给错误了。我需要在这个方法中调用一个存储过程,所以我传递了DBNull.Value。 Is'DBNull.Value'和'null'在SQL Server中被视为相同吗?我应该通过'空'而不是'DBNull.Value'?
是否可以将DBNull.Value作为可选参数传递? 我试过C#DBNull.Value作为可选参数
private void CallSP(string param0, string param2 = DBNull.Value)
{
}
它给错误了。我需要在这个方法中调用一个存储过程,所以我传递了DBNull.Value。 Is'DBNull.Value'和'null'在SQL Server中被视为相同吗?我应该通过'空'而不是'DBNull.Value'?
DBNull.Value
是不一个字符串,并且是不恒定(可选参数值必须是常量)。做到这一点的方法是将其默认为普通null
,并添加参数时处理null
:
private void CallSP(string param0, string param2 = null)
{
...
object value = (object)param2 ?? DBNull.Value;
// ^^^ use value in the parameter
...
}
+1,只是为了明确声明OP,因为它经常让人们绊倒 - 将参数值设置为空将导致该参数不被传递你最终会遇到一个SqlException。 null!= DBNull.Value – AdaTheDev 2012-03-09 09:29:15
这是一个美丽的解决方案.. – 2012-03-09 09:30:20
@AdaTheDev个人而言,我还没有为** DBNull **的存在**找到**引人注目的原因。我见过很多争论 - 没有一个引人注目。 – 2012-03-09 09:30:58
@ 1ntello“从不使用空”相反 - 但绝对没有理由不使用'null',和它与SQL中的null不是非常不同 - 只有null-equality才是不同的,并且使得一致性是微不足道的。 – 2012-03-09 09:29:47
也许还会看到:http://stackoverflow.com/a/9632050/23354 – 2012-03-09 09:57:02