今天因为这个问题纠结了很久,其实这已不是第一次犯这样的错误了,今天特别记录下来,以防再犯。
总的来说,是因为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不是很了解,也许你就很难找出这个错误。