Смотрите живое демо на rextester

у в основном использовать несколько iD в предложении In моего SQL-запроса. Теперь у меня есть два варианта, один - получить идентификаторы, разделенные запятыми, из текстового поля, или я могу поместить представление списка или сетки, чтобы вставить туда идентификаторы, а затем получить идентификаторы для использования в выражении sql. Можете ли вы помочь мне с кодом, как это сделать?

 Kris02 окт. 2017 г., 08:30
зацикливатьсяidгенерирует параметры с именем и значением,string.Join имена параметров для создания в предложении для оператора. Но на самом деле, что вы спрашиваете именно?
 Bilal02 окт. 2017 г., 08:36
видите, предположим, у меня есть текстовое поле, которое получит в качестве входного идентификатора, разделенного на '', ". Теперь то, что я хочу, это если я пишу select * from table, где id in (ID); я получаю результат всех переданных id в текстовом поле с, отделены
 Deepak02 окт. 2017 г., 08:42
Я думаю, это то, что вы ищете: - "выбрать * из таблицы, где идентификатор в (" + textbox1.text + ")";
 Bilal02 окт. 2017 г., 08:47
@Deepak большое спасибо, человек работает
 Deepak02 окт. 2017 г., 08:48
Это решает вашу проблему?

Ответы на вопрос(2)

ользование параметров.IN Оператор часто сбивает с толку неопытных разработчиков, поскольку многие из них пытаются использовать его с одним параметром, который содержит значения, разделенные запятыми, и ожидают, что он вернет результаты. Однако это ошибка, так какIN Оператор ожидает список значений, а не одно значение, содержащее список.

Итак, для параметризации запроса дляIN оператор, что вам нужно сделать, это разбить запятую строку в вашем коде и предоставить запрос с параметром для каждого значения.

Вот основной пример:

var userInput = "1,2,3,4,5,6";
var values = userInput.Split(',');

using(var command = new OdbcCommand())
{
    var sql = "SELECT * FROM table where id IN(";

    for(int i=0; i < values.Length; i++) {
        sql = $"{sql} @{i},";
        command.Parameters.Add($"@{i}", OdbcType.Int).Value = values[i];
    }

    command.CommandText = sql.TrimEnd(',') +");";
    command.Connection = con;
    using(var reader = Command.ExecuteReader())
    {
        while(reader.Read())
        {
            // do your stuff with the data
        }
    }
}
 Ashley Pillay02 окт. 2017 г., 09:36
Не приведет ли это к запросуSELECT * FROM table where id IN(@1, SELECT * FROM table where id IN(@1, @2, SELECT * FROM table where id IN(@1, @2, @3...?
 Zohar Peled02 окт. 2017 г., 09:42
@AshleyPillay Нет, это приведет к такому запросуSELECT * FROM table where id IN( @0, @1, @2, @3, @4, @5);. Смотрите живое демо на rextester
Решение Вопроса

чтобы получить значение текстового поля, вы должны написать так:

"select * from table where id in ( "+textbox1.text+")";

Но это приведет вас к проблеме впрыска Sql. Поэтому лучшим подходом будет:

var command = new SqlCommand("SELECT * FROM table WHERE id = @value")
{
  Connection = connection();
};

command.Parameters.AddWithValue("value", textbox1.text);
var dataReader = command.ExecuteReader();
 Zohar Peled02 окт. 2017 г., 08:51
 Kris03 окт. 2017 г., 07:57
Это худшая вещь для обучения нового программиста, и, вероятно, ее следует считать преступлением.
 Ashley Pillay02 окт. 2017 г., 12:13
Это отвечает на вопрос ОП слишком строго. В прошлый раз, когда я читал, SQL-инъекция все еще оставалась уязвимостью номер 1 в базах кода. Мы не должны предлагать решения, которые увековечивают эту проблему.
 SeM02 окт. 2017 г., 10:42
Понизьте голос, или замените свой ответ правильным.
 webnoob02 окт. 2017 г., 09:52
Это ужасное решение.

Ваш ответ на вопрос