Как передать строку с одинарными кавычками в хранимую процедуру Sql - PullRequest
0 голосов
/ 26 апреля 2019

Я использую хранимую процедуру - как я могу передать строку вроде:

'White','Black','Green'

Я пытаюсь выполнить процедуру следующим образом:

 var data = new List<dynamic>();
 string colorstr = "'White','Black','Green'";
 using (SqlConnection connection = new SqlConnection(connectionString))
 {
     connection.Open();
     string sql = $"exec GetData '{colorstr }'";
     data = connection.Query(sql).AsList();
     connection.Close();
 }

Это даетошибка:

неправильный синтаксис рядом с 'White'

Итак, вопрос в том, как передать строку с запятыми с одинарными кавычками в хранимую процедуру?

Ответы [ 2 ]

3 голосов
/ 26 апреля 2019

Вы создаете проблему SQL-инъекции. Вместо этого используйте команду SQL, как показано ниже. Вы избежите проблемы и внедрения SQL


    using (SqlCommand cmd = new SqlCommand("connectionString", con)) {
      cmd.CommandType = CommandType.StoredProcedure;

      cmd.Parameters.Add("@colorstr", SqlDbType.VarChar).Value = "'White','Black','Green'";

      con.Open();
      cmd.ExecuteNonQuery();
    }

Я не знаю вашего имени параметра, поэтому я использовал colorstr и тип параметра, поэтому я использовал SqlDbType.VarChar. Проверьте это в БД и исправьте.

0 голосов
/ 26 апреля 2019

Вы на самом деле ищете, как передать массив в качестве параметра хранимой процедуре. SQL Server не поддерживает расширенные массивы в качестве параметра, но есть способы заставить его работать, используя XML или тип переменной List.

Подробнее см. Как передать массив в хранимую процедуру SQL Server

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...