Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.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/4/jquery-ui/2.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# 将String.Empty发送到存储过程_C#_Sql_Sql Server_String_Stored Procedures - Fatal编程技术网

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