Как разделить текстовое поле в Winforms

#c# #sql-server #winforms

Вопрос:

Я пытаюсь сделать запрос к базе данных для этого я использую текстовое поле, в котором я должен размещать значения, которые всегда больше 1, поэтому in есть, но мне нужно иметь возможность добавлять кавычки » в начале и в конце каждой строки, также добавляя запятую в каждой строке или как я мог бы это сделать, так как в настоящее время я могу добавлять кавычки только в начале и конце, но всего текста и запятую, если также в конце

     SELECT TOP(500)  [contenido]
                FROM[Clientes].[dbo].[web]
      where sitios in ('https://www.google.com','https://www.youtube.com')
 

В базе данных он генерирует следующее

 contenido   - sitios
multimedia  - https://www.youtube.com
informacion - https://www.google.com
 

но в запросе приложения за отсутствие кавычек » и запятая выдает ошибку

 SELECT TOP(500)  [contenido]
                FROM[Clientes].[dbo].[web]
      where sitios in ('https://www.google.comhttps://www.youtube.com')

error 
 

это мой код

      new SqlDataAdapter(new SqlCommand(@"
SELECT TOP(500)  [contenido]
            FROM[Clientes].[dbo].[web]
  where sitios in ('" textBox1.Text "')", conexion.conectado())).Fill(dataTable);
 

отлаживать

Комментарии:

1. Используйте параметры SQL, чтобы избежать внедрения SQL и проблем с форматированием.

2. я новичок в этом и не получаю доступа для изменения только поиска bd, как это ?

Ответ №1:

Ты можешь попробовать это ?

         var urlList = textBox1.Text.Split(
             new[] { "rn", "r", "n" },
            StringSplitOptions.None);

        string query = "SELECT TOP(500) FROM[Clientes].[dbo].[web] WHERE sitios in ({0})";
        SqlCommand cmd = new SqlCommand(query, conexion.conectado());

        int index = 0;

        List<string> paramList = new List<string>();
        foreach (var url in urlList)
        {
            if (!String.IsNullOrEmpty(url))
            {
                cmd.Parameters.AddWithValue("@param"   index, url);
                paramList.Add("@param"   index);
                index  ;
            }
        }

        cmd.CommandText = String.Format(query, String.Join(",", paramList));
        cmd.CommandTimeout = 99999;
        new SqlDataAdapter(cmd).Fill(dataTable);
 

Этот метод решит вашу проблему и будет безопаснее, чем ваш код.

Комментарии:

1. кто использует @param1? я пытаюсь получить это в отладочном коде (» google.comhttps://www.youtube.com» ) @param1 = » не могу получить (» google.com’,’https://www.youtube.com’ )

2. @ryuzdev Для этого вам понадобятся два параметра