我就想換成不僅僅是值存儲在參數列,但表名,字段名等,所以我想這:試圖建立一個有些通用的查詢方法
// 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
有類似的幫手功能嗎?
重新訪問數據庫結構不是一個選項。在過去,我寫了「通用」查詢,我可以傳遞一個int並獲得一個字符串,反之亦然;它削減了不得不寫十一萬個查詢只有一堆。古怪,認可,但符合我的滿意。 – 2012-03-28 03:53:11