C#6中的空和字符串插值
我正在使用新的C#6.0特性字符串插值来生成SQL语句C#6中的空和字符串插值,c#,c#-6.0,C#,C# 6.0,我正在使用新的C#6.0特性字符串插值来生成SQL语句 $@"INSERT INTO [dbo].[TableName]([Column1], [Column2]) Values({item.property1}, {item.property2})"; 如果属性为null,则生成的SQL如下 INSERT INTO [dbo].[TableName]([Column1], [Column2]) Values(,) 这会导致一个错误。(不正确的SQL)。 我需要Null而不是空的空格。我能
$@"INSERT INTO [dbo].[TableName]([Column1], [Column2]) Values({item.property1}, {item.property2})";
如果属性为null,则生成的SQL如下
INSERT INTO [dbo].[TableName]([Column1], [Column2]) Values(,)
这会导致一个错误。(不正确的SQL)。
我需要Null而不是空的空格。我能以某种方式实现这一点吗?
{Convert.ToString(item.property1)?“NULL”}
应该可以做到。这仍然是错误的,因为您需要非常特定的格式才能正确地生成SQL。您可以自己解决格式化问题
注释中已经给出了常见的SQL注入免责声明。这种方法是无法解决的。您需要扔掉它。{Convert.ToString(item.property1)?“NULL”}
应该这样做。这仍然是错误的,因为您需要非常特定的格式才能正确地生成SQL。您可以自己解决格式化问题
注释中已经给出了常见的SQL注入免责声明。这种方法是无法解决的。您需要扔掉它。不要介意错误的语法,使用SQL连接是一个非常糟糕的主意,它会让您面临注入攻击。改为使用参数化查询,例如
值(@param1,@param2)
{item.property1???“Null”}目前,请务必注意安全性,因为这样做非常简单,而且可以解决启动--SqlParameter.Value=(object)对象的问题??DBNull.Value
将做正确的事情。@失望。这不仅仅是SQL注入。它还涉及对空值的适当处理。或日期。或字符串。或者在字符串中加上撇号。或切换到参数,这些问题就更容易解决。参数化的问题不仅仅是安全问题。它们解决了您试图解决的问题,比您在短期内遇到的问题要好得多。不要介意错误的语法,使用SQL串联是一个非常糟糕的主意,它会让您面临注入攻击。改为使用参数化查询,例如值(@param1,@param2)
{item.property1???“Null”}目前,请务必注意安全性,因为这样做非常简单,而且可以解决启动--SqlParameter.Value=(object)对象的问题??DBNull.Value
将做正确的事情。@失望。这不仅仅是SQL注入。它还涉及对空值的适当处理。或日期。或字符串。或者在字符串中加上撇号。或切换到参数,这些问题就更容易解决。参数化的问题不仅仅是安全问题。它们解决了您试图解决的问题,比您在短期内遇到的问题要好得多。是的,只要属性中没有一个是字符串或DateTime
或bool
,就可以正常工作。解决所有这些问题的同时仍然顽固地拒绝使用SqlParameter
,这是留给读者的一个练习……是的,只要没有任何属性是字符串或DateTime
或bool
,就可以了。在顽固拒绝使用SqlParameter
的情况下修复所有这些问题,留给读者作为练习。。。