我不仅想用参数替换存储在列中的值,还想用表名、列名等替换,所以我尝试了这个:
// 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
?