向存储过程发送String.Empty

4
考虑以下例子:
MyParameters.Name = "Paul";
MyParameters.Nickname = String.Empty;

ExecuteStoredProcedure(MyStoredProcedure, MyParameters);

当我的存储过程执行时,它会运行类似于这样的内容?
MyStoredProcedure 'Paul',''

那么,我的问题是:C# String.Empty 是否等同于 数据库 ''
PS:我正在使用SQL Server。

“考虑这个例子”实际上相当困难,因为我们无法看到ExecuteStoredProcedure在内部使用了什么。这可能很重要; p - Marc Gravell
3个回答

4

是的,空字符串将被发送为空字符串。看到了吗,这些值就像期望的那样被翻译并发送了出去。例如,如果你需要发送null,那么你可以像这样设置Nickname

MyParameters.Nickname = null;

你的代码等同于:

MyParameters.Nickname = "";

2
null的行为是否相同完全取决于数据访问工具。 - Marc Gravell
@MarcGravell,我明白你的意思。所以有时候你可能需要使用DbNull.Value,对吗?如果是这样,你知道什么时候需要用它吗? - Mike Perrenoud
这就很简单了:每当你想要传递一个逻辑上的“null”,而你的数据库工具(在此情况下没有具体指定)却不会自动处理;p 尤其是对于存储过程(问题中的场景),这一点可能很重要,因为可选参数可以有默认值,而不传递参数将其作为null传递是非常不同的。 - Marc Gravell

4

String.Empty在C#中与""语义上相同,它是一个零长度的非空字符串(是否完全相同更为复杂,取决于运行时版本)。在SQL中,''是一个零长度的非空字符串。因此,是的,string.EmptyString.Empty""都逻辑上等同于''


0
如上所述,String.Empty与""相同。
另一个选项是,在存储过程中将参数声明为null或"",例如...
    create procedure spname 
{  
      parameter1 int = null, parameter2 varchar(50) = null, parameter3 varchar(50) = ""   
} 

as

begin

.....

end

在从C#传递参数时,如果您没有传递任何值,则会自动将空白("")或null作为您在参数右侧声明的值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接