Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.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# 如何在字符串插值C中保留空值#_C#_Asp.net_Asp.net Mvc_String Interpolation - Fatal编程技术网

C# 如何在字符串插值C中保留空值#

C# 如何在字符串插值C中保留空值#,c#,asp.net,asp.net-mvc,string-interpolation,C#,Asp.net,Asp.net Mvc,String Interpolation,我希望在将空值作为字符串传递给C#代码中的sql变量时保留它们(将它们插入DB) 字符串插值正在为SomeValue=>''返回一个emptyString,而不是null。 我希望在字符串插值中保留该空值,并将其传递给查询字符串。 可能吗?如果SomeValue不为null,则使用它;如果为null,则使用null var valString = new StringBuilder(); //somevalue is null at this point valString.Append($"(

我希望在将空值作为字符串传递给C#代码中的sql变量时保留它们(将它们插入DB)

字符串插值正在为SomeValue=>''返回一个emptyString,而不是null。 我希望在字符串插值中保留该空值,并将其传递给查询字符串。
可能吗?

如果SomeValue不为null,则使用它;如果为null,则使用null

var valString = new StringBuilder();
//somevalue is null at this point
valString.Append($"({id}," + (SomeValue == null ? "NULL" : $"'{SomeValue}'"));

您可以按如下方式执行此操作:

var valString = new StringBuilder();
valString.Append($"({id}, " +$"'{SomeValue ?? "null"}')");

我强烈建议您开始使用参数化SQL,而不是以字符串格式传递值。这样做的最大优点是防止SQL注入攻击。这对于SQL注入来说似乎已经成熟了。永远不要使用字符串插值构造SQL语句。每个库中都有用于进行参数插值的工具,您应该使用这些工具。@Sumneevans:有时使用字符串插值构造SQL是合适的,例如,对于可变数量的列。它使用字符串插值来计算有风险的值。(甚至使用FormattableString也有一些奇怪的方法可以安全地完成这些操作,但这是另一回事。)确定此需求的人是否意识到他们正在打开一个主要的安全漏洞?我强烈要求你在这件事上后退。请注意,即使您确实想这样做,您也不会想要
'NULL'
,而是
NULL
。使用普通的条件运算符或
if
语句,而不是试图将行为塞进字符串插值本身,这将是最简单的方法。@VahRun:您正在构建一个字符串。这就是问题所在。字符串不包含引用等-它们只是文本。这正是我们建议您通过使用参数化SQL来避免的。但是,是否可以将该Null保留为Null对象,而不是将其设置为字符串?否。SQL的Null被转换为
DBNull.Value
,而不是C#的
Null
。不同的对象。@VahRun不使用字符串连接。就这样。没有要保留的空值,您要求在输入值为空时生成
NULL
字符串(四个字符)。不要这样做。由于本地化问题,很容易导致糟糕的SQL、SQL注入攻击或无效文本。我同意,尽管这可能是一种不好的做法,而且这样做非常危险。还有其他更安全的查询选项。
var valString = new StringBuilder();
valString.Append($"({id}, " +$"'{SomeValue ?? "null"}')");