Я хотел заменить не только значения, хранящиеся в столбцах, параметрами, но и имена таблиц, имена столбцов и т. Д., Поэтому я попытался это сделать:
// Can get any string value based on any string key with this function
public string GetValForKeyVal(string ATable, string AKeyVal, string AColumnToQuery, string AColumnToReturn) {
String qry = "SELECT :ColOfInterest FROM :TableToQuery WHERE :KeyValColumn = :KeyVal";
OracleCommand cmd = new OracleCommand(qry, con);
cmd.CommandType = CommandType.Text;
OracleParameter opColOfInterest = cmd.Parameters.Add("ColOfInterest", OracleDbType.Varchar2,
AColumnToReturn, ParameterDirection.Input);
OracleParameter opTableToQuery = cmd.Parameters.Add("TableToQuery", OracleDbType.Varchar2,
ATable, ParameterDirection.Input);
OracleParameter opKeyValColumn = cmd.Parameters.Add("KeyValColumn", OracleDbType.Varchar2,
AColumnToQuery, ParameterDirection.Input);
OracleParameter opKeyVal = cmd.Parameters.Add("KeyVal", OracleDbType.Varchar2,
AKeyVal, ParameterDirection.Input);
return cmd.ExecuteScalar().ToString();
}
... но получите, "ORA-00903 invalid table name"
Итак, я попытался сделать это на C #:
public string GetValForKeyVal(string ATable, string AKeyVal, string AColumnToQuery, string AColumnToReturn) {
String qry = String.Format("SELECT {0} FROM {1} WHERE {2} = {3}", AColumnToReturn, ATable, AColumnToQuery, AKeyVal);
OracleCommand cmd = new OracleCommand(qry, con);
cmd.CommandType = CommandType.Text;
return cmd.ExecuteScalar().ToString();
}
... но это тоже не удалось, на самом деле, с "ORA-00904 "WHYAMINOTQUOTINGTHEDOT"."EXE": invalid identifier"
Я лаю не на том дереве или просто использую неправильный способ подать кошку?
В старые времена (Delphi)
вы могли сделать строку безопасной для передачи в механизм БД, заключив ее в нечто вроде QueryStr()
. Есть ли аналогичная вспомогательная функция для C#/Oracle
?