【发布时间】:2019-11-07 16:34:29
【问题描述】:
我想保留空值(将它们插入数据库),同时将它们作为字符串传递给我的 C# 代码中的 sql 变量。
var valString = new StringBuilder();
//somevalue is null at this point
valString.Append($"({id}, " +$"'{SomeValue}')");
字符串插值返回 SomeValue => '' 的空字符串,而不是 null。 我想在字符串插值中保留该空值并将其传递给查询字符串。 有可能吗?
【问题讨论】:
-
我强烈建议您开始使用参数化 SQL,而不是完全以字符串格式传递值。这样做的最大优势是防止 SQL 注入攻击。
-
这看起来很适合 SQL 注入。您应该从不使用字符串插值构造 SQL 语句。每个库中都有用于进行参数插值的工具,您应该使用这些工具。
-
@SumnerEvans:有时使用字符串插值构造 SQL 是合适的,例如对于可变数量的列。它对有风险的 values 使用字符串插值。 (还有一些奇怪的方法可以使用 FormattableString 安全地完成这些操作,但这是另一回事。)
-
确定此要求的人是否知道他们正在打开一个重大安全漏洞?我强烈敦促您反对这一点。请注意,即使您确实想要这样做,您也不会想要
'NULL',而是想要NULL。使用普通的条件运算符或if语句而不是试图将行为塞进字符串插值本身是最简单的。 -
@VahRun:您正在构建字符串。这就是整个问题。字符串不包含引用等 - 它们只是文本。这正是我们一直建议您避免的,通过使用参数化 SQL。
标签: c# asp.net asp.net-mvc string-interpolation