列に格納されている値だけでなく、テーブル名、列名などを置き換えたいので、これを試しました。
// 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)
のようなもので囲むことにより、DBエンジンに渡すのに安全な文字列を作成できましたQueryStr()
。に類似したヘルパー関数はありC#/Oracle
ますか?