Неправильный синтаксис рядом с буквой S при передаче строкового параметра - PullRequest
0 голосов
/ 29 мая 2020

В 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#) для executeScalar. Однако я получаю следующую ошибку:

Incorrect syntax near 'S'

Я заметил, что это происходит для некоторых записей (разрыв значения параметра); например:

'BANDAGE POPROLL TYPE 1; 200MMX2.7M 12's'

Как я могу безопасно передать строковый параметр в Sql в конструкторе (c#)?

Ответы [ 2 ]

1 голос
/ 29 мая 2020

Экранируйте single quotes примерно так:

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

Также в качестве предложения, упомянутого Питером в комментарии, избегайте использования встроенных операторов SQL, чтобы избежать SQL injection attacks с помощью SqlCommand и его parameters!

0 голосов
/ 29 мая 2020

Попробуйте использовать строковую интерполяцию:

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