Я хотел бы сделать то же самое, что и oracle sqldeveloper, сделать с параметризованными запросами (но из c#, а не java). Допустим, существует произвольный пользовательский запрос, например
select * from dual where 1 = :parameter
Моя задача - безопасно проанализировать похожие строки, определить параметры, запросить их у пользователя и выполнить запрос. Какой подход правильный / безопасный? Я предполагаю, что для этого есть какой-то oracle клиентский API. Или правильно использовать какой-нибудь материал pl / sql (например, из DBMS_ SQL)? Я еще не мог найти такую вещь ...
Обновление / уточнение: см. Пример кода ниже:
// user enters the query string with parameters somehow:
string sql = AskUserForSelectString();
// now the value of sql is:
// "select column0 from tablename where column1 = :param1 and column2 = :param2 ;"
// this is my original question: HOW TO DO THIS?
List<string> param_names = OracleParseQueryAndGiveMyParameters(sql);
// param_names is now a list of ":param1",":param2"
// ask user again for parameter values:
var param_values = new List<string>();
foreach (var param_name in param_names)
{
string param_value = AskUserForParameterValue(param_name);
param_values.Add(param_value);
}
// give the parameter values for the query in safe way:
using (var cmd = new SqlCommand(sql, myDbConnection))
{
for (int i=0; i< param_names.Count; i++)
cmd.Parameters.AddWithValue(param_names[i], param_values[i]);
var result = cmd.ExecuteReader();
// process result...
}
Ключевым моментом является то, что я не знаю параметры заранее. Это именно то, что может сделать SqlDeveloper. (Это не проблема, если EF ожидает @ перед именем параметра вместо двоеточия, это можно легко решить.)