DbDataReader collireader = cmd.ExecuteReader();
               while (collireader.Read())
               {                   try {
                   string collivluesql = "select " + collireader[0] + "  from dip_data_cwbb where ehid=" + ehid;//通过EHID以及指标 来取得指标对应的值
                   cmd.CommandText = collivluesql;
                   
                  
                   
                   datavalue = System.Convert.ToString(cmd.ExecuteScalar());
 }                   catch(DbException ex) {                       continue;
                   
}                   Operasql = "insert into DOM_SRC_REPORT(COMPANYID,USENO,DATANO,DATAVALUE,datetiem)values('" + companyid + "','" + System.Convert.ToString(n_useno) + "','" + collireader[0] + "','" + datavalue + "',to_date('" + System.DateTime.Now + "','yyyy-mm-dd hh24:mi:ss'))";//插入数据
                
                   
                   cmd.CommandText = Operasql;
                   cmd.ExecuteNonQuery();
                   status = 1;               }               collireader.Close();
           }
 DbDataReader 当处理的是OracleDataReader的时候 程序没有错,也没有异常
但是 当处理的是ODBCDataReader时

 datavalue = System.Convert.ToString(cmd.ExecuteScalar());
发出异常
已有打开的与此命令相关联的 DataReader,必须首先将它关闭
请问怎么修改

解决方案 »

  1.   

    你可以先把collireader读取到DataTable里,collireader.Close();
    之后再进行while循环。
      

  2.   

    问题是 ORACLE可以成功,为啥ODBC不行呢
      

  3.   

    在 
    datavalue = System.Convert.ToString(cmd.ExecuteScalar()); 
    发出异常 
    已有打开的与此命令相关联的 DataReader,必须首先将它关闭 
    这里的cmd命令已与下面的代码关联:
    DbDataReader collireader = cmd.ExecuteReader();
    解决方法是,你可以用另外一个cmd,代码见下参考
    datavalue = System.Convert.ToString(cmd1.ExecuteScalar()); 
      

  4.   

    using(DbDataReader collireader = cmd.ExecuteReader())
    {
          //在这里写你的代码试试
    }