今天因爲這個問題糾結了很久,其實這已不是第一次犯這樣的錯誤了,今天特別記錄下來,以防再犯。
總的來說,是因爲oracleclient類型轉換產生的錯誤,同樣一條正確的sql語句,今天不出錯誤,或許明天就會出錯,結合個人的錯誤經歷,錯誤的來源主要來源於聚集函數,一下示範錯誤是如何產生的:
首先,給出獲取數據源的函數
public DataTable ORselect(string str)
{
DataTable dt = new DataTable();
OracleConnection conn = new OracleConnection();
conn.ConnectionString = ConnectionString;
OracleDataAdapter adapter = new OracleDataAdapter(str, conn);
try
{
conn.Open();
adapter.Fill(dt);
}
catch(OracleException ee)
{
ErrorString = ee.ToString();
}
finally
{
conn.Close(); //關閉連接
}
return dt;
}
然後有調用函數語句:
string selectsql = "select clusterid,avg(age) from v_physics_storeaction group by clusterid";
DataTable dt = conn.ORselect(selectsql);
咋一看,這有錯嗎??沒錯啊,但結果卻出人意料,在PL/sql下可得到三條記錄,但在上述的dt中卻只有一條語句,難道這是bug??
那如果把selectsql改一下,改成“select 1/3 from dual” ,這該沒錯了吧??但是,它還是報錯啊,現在你也許知道它錯在哪了!這麼解決這個問題呢??
其實很簡單,你只需要將“select 1/3 from dual”改成“select to_char(1/3) from dual”就可以了,問題很簡單,但你如果對oracleclient不是很瞭解,也許你就很難找出這個錯誤。