C# 将String.Empty发送到存储过程
考虑到这个例子:C# 将String.Empty发送到存储过程,c#,sql,sql-server,string,stored-procedures,C#,Sql,Sql Server,String,Stored Procedures,考虑到这个例子: MyParameters.Name = "Paul"; MyParameters.Nickname = String.Empty; ExecuteStoredProcedure(MyStoredProcedure, MyParameters); 当我的存储过程执行时,它会运行类似这样的东西吗 MyStoredProcedure 'Paul','' 所以,我的问题是:C#String.Empty等于数据库“” 注:我正在使用SQL Server是的,空字符串作为空字符串发送
MyParameters.Name = "Paul";
MyParameters.Nickname = String.Empty;
ExecuteStoredProcedure(MyStoredProcedure, MyParameters);
当我的存储过程执行时,它会运行类似这样的东西吗
MyStoredProcedure 'Paul',''
所以,我的问题是:C#String.Empty
等于数据库“”
注:我正在使用SQL Server是的,空字符串作为空字符串发送。请参阅,这些值将按预期进行转换和发送。例如,如果您需要发送
null
,那么您应该设置昵称
,如下所示:
MyParameters.Nickname = null;
您的代码也相当于:
MyParameters.Nickname = "";
String.Empty
在语义上与C#中的“
相同,这是一个长度为零的非空字符串(是否完全相同比较复杂,具体取决于您使用的运行时版本)。在SQL中,'
是长度为零的非空字符串。所以是的,string.Empty
,string.Empty
和“
在逻辑上都等同于”
,,如上所述,string.Empty是相同的”
另一个选项是在存储过程中将参数声明为null或“”,如
create procedure spname
{
parameter1 int = null, parameter2 varchar(50) = null, parameter3 varchar(50) = ""
}
as
begin
.....
end
从c#传递参数时,如果不传递,则当您在参数右侧声明时,它将自动为空(“”)或null
null
的行为是否相同完全取决于数据访问工具is@MarcGravell,我明白你的意思了。因此,有时您可能不得不使用DbNull.Value
对吗?如果是这样的话,你知道什么时候会这样吗?那很简单:只要你想传递一个逻辑null
,而你的数据库工具(本例中未指定)并不为你做这件事;p尤其是,这对存储过程(问题中的场景)很重要,因为可选参数可能有一个默认值,因此不传递该参数可能与将其作为null传递非常不同。实际上,很难“考虑”这个示例,因为我们看不到内部使用的是什么ExecuteStoredProcedure
。这可能很重要;P