DGKumar Ответов: 2

Как подготовить параметризованный запрос в oracle с помощью предложения in


Я использую приведенный ниже запрос с предложением In
strign courceids = разделенные запятыми идентификаторы ex "123,456,567,678";
выберите * from student where studentID= stdId и courseid in ("+ courceids +")
Он работает, но я хочу предотвратить sql-инъекцию для этого запроса
поэтому не могли бы вы помочь в этом вопросе как использовать предложение for IN в oracle

Что я уже пробовал:

Я уже пробовал
OracleCommand oraCommand = new OracleCommand("select * from student where studentID= stdId and courseid in = :courceids ", con);
oraCommand.Parameters.Add(new OracleParameter("courceids ", courceids ));

2 Ответов

Рейтинг:
0

DGKumar

Привет Джерри Шмтиц,
мы используем прямые команды select с предложением in (Oracle db ), но у нас нет доступа к модификациям БД, просто мы извлекаем данные с помощью команды select
Для этого нам нужно передать предложение in в БД с cmd.parameters.

Gerry Schmitz

Если бы вы проверили код, то увидели бы, что он создает Пармы для каждого значения предложения in. Другими словами, грубая сила вместо какого-то магического выражения.

№2 говорит то же самое.

Рейтинг:
0

Richard Deeming

Вам нужно передать несколько параметров, по одному для каждого элемента в вашем списке.

using (var oraCommand = new OracleCommand(null, con))
{
    oraCommand.Parameters.AddWithValue("@studentID", studentID);
    
    var parameterNames = new List<string>(courseIDs.Count);
    for (int index = 0; index < courseIDs.Count; index++)
    {
        string name = "@courseId" + index;
        oraCommand.Parameters.AddWithValue(name, courseIDs[index]);
        parameterNames.Add(name);
    }
    
    oraCommand.CommandText = string.Format("SELECT ... FROM student WHERE studentID = @studentID And courseId In ({0})", string.Join(", ", parameterNames));
    
    ...
}

Это может быть проще использовать Dapper:
IEnumerable<Student> students = connection.Query<Student>("SELECT ... FROM student WHERE studentID = @studentID And courseId In (@courseIDs)", new { studentID = 42, courseIDs = new[] { 1, 2, 3 } });
GitHub - StackExchange/Dapper: Dapper - простой картограф объектов для .Net[^]