【问题标题】:Incorrect syntax near 'S' when passing string parameter传递字符串参数时,“S”附近的语法不正确
【发布时间】:2020-05-29 08:38:39
【问题描述】:

在 c# 中,我有以下代码行:

 string mySqlStmt = "SELECT CASE WHEN (SELECT COUNT(*)  FROM tlGenericName WHERE ( UPPER(ltrim(rtrim(genericName_str))) = '" + this.cmbGenericName.Text.Trim().ToUpper() + "' ) ) > 0 THEN"
   + " ( SELECT top(1) isnull(genericNameCode_str, '') FROM tlGenericName "
       + " WHERE ( UPPER(ltrim(rtrim(genericName_str))) = '" + this.cmbGenericName.Text.Trim().ToUpper() + "' )  ) ELSE '' END";

然后我使用 SqlCommand(在 c# 中)来执行 Scalar。 但是,我收到以下错误:

Incorrect syntax near 'S'

我注意到某些记录会发生这种情况(参数值中断);例如:

'BANDAGE P.O.P.ROLL TYPE 1;200MMX2.7M 12's'

如何在设计器(c#)中安全地传递Sql中的字符串参数?

【问题讨论】:

  • 字符串文字中的引号必须加倍,IIRC。
  • 您必须使用 SqlParameter 才能对查询进行参数化。这是一个简单的walkthrough

标签: c# syntax-error sqlcmd


【解决方案1】:

转义single quotes,如下所示:

this.cmbGenericName.Text.Trim().ToUpper().Replace("'", "''")

正如彼得在评论中提到的建议,避免使用内联 SQL 语句来避免 SQL injection attacks 使用 SqlCommand 及其 parameters

【讨论】:

  • 感谢您的正确答案:这正是我不想使用 SqlParameter 在查询中进行参数化时所需要的。我已标记为答案。
  • 很高兴知道:)
【解决方案2】:

尝试使用字符串插值:

var number = 2;
var exampleString = $"Number is : {number}";

【讨论】:

    猜你喜欢
    • 2021-04-23
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多