public static DataSet ds = new DataSet();
        public string errMsg = "";
             /// <summary>
        /// 根据林总要求,动态生成语句,并且最加到一个DataSet内  第一个方法
        /// </summary>
        /// <param name="list">测点数组</param>
        /// <param name="bTime">开始时间</param>
        /// <param name="eTime">结束时间</param>
        /// <param name="errMsg"></param>
        /// <returns>DataSet</returns>
        public static DataTable retrunManyDS(ArrayList list, string bTime, string eTime, out string errMsg)
        {            DB2Connection con = new DB2Connection();
            DB2Command cmd = new DB2Command();
            DB2DataReader dr = null;
                       ArrayList ls = new ArrayList();            Model.valuePP pp = new valuePP();            //动态的加载一个DataTable
             DataTable dt = new DataTable();
            dt.Columns.Add("POINTID", typeof(string));
            dt.Columns.Add("DT", typeof(string));
            dt.Columns.Add("VALUE", typeof(string));
            dt.Columns.Add("STATE", typeof(string));
            dt.Columns.Add("INPUTTYPE", typeof(string));            try
            {
                string tbName = "";
                con = GetConn();                for (int i = 0; i < list.Count; i++)
                {                    string sql = "select d.存储表名字 from administrator.T_DAM_DAMPOINT as d  where d.测点名 ='" + list[i].ToString() + "'";
                    cmd.Connection = con;
                    cmd.CommandText = sql;
                    dr = cmd.ExecuteReader();                    while (dr.Read())
                    {
                        tbName = dr[0].ToString();
                        #region       原来方法
                        //select * from administrator.VALUE_CG1 as v where  v.POINTID='WXJP:DAM-HN11CG1H001' and  char(v.DT) > '2000-01-01 ' and  char(v.DT)<'2009-02-15 '
                        //ds= DB_RunDataSet(sqlInfo, out errMsg);
                        //cmd1.Connection = con;
                        //cmd.CommandText = sqlInfo;                        //dr1 = cmd.ExecuteReader();                        //while (dr1.Read())
                        //{
                        //    pp.POINTID = dr1[0].ToString();
                        //    pp.DT = dr1[1].ToString();
                        //    pp.value = dr1[2].ToString();
                        //    pp.state = dr1[3].ToString();
                        //    pp.inputtype = dr[4].ToString();
                        //}                        //ls.Add(pp);
                        #endregion 
                    }                    ls = returnArrayList(tbName, list[i].ToString(), bTime, eTime);                    for (int j = 0; j < ls.Count;j++)
                    {
                        pp =(Model.valuePP)ls[i];                        DataRow dw = dt.NewRow();                        dw[0] = pp.POINTID;
                        dw[1] = pp.DT;
                        dw[2] = pp.value;
                        dw[3] = pp.state;
                        dw[4] = pp.inputtype;                        dt.Rows.Add(dw);
                    }                    cmd.Dispose();
                }
               
            }
            catch (Exception ce)
            {
                errMsg = ce.Message;
            }
            finally
            {
                CloseConn(con);
            }
            errMsg = "测试";
            return dt;
        }
        /// <summary>
        /// 第二个方法
        /// </summary>
        /// <param name="tName"></param>
        /// <param name="pid"></param>
        /// <param name="bTime"></param>
        /// <param name="eTime"></param>
        /// <returns></returns>
        public static ArrayList returnArrayList(string tName, string pid, string bTime, string eTime)
        {
            DB2Connection con = new DB2Connection();
            DB2Command cmd = new DB2Command();
            DB2DataReader dr = null;            ArrayList list = new ArrayList();
            Model.valuePP pp = new valuePP();
            try
            {
                con = GetConn();                string sqlInfo = "select * from administrator." + tName + " as v where v.POINTID='" + pid + "' and char(v.DT)> '" + bTime + "' and char(v.DT)<'" + eTime + "'";                cmd.Connection = con;
                cmd.CommandText = sqlInfo;                dr = cmd.ExecuteReader();                while(dr.Read())
                {
                    pp.POINTID = dr[0].ToString();
                    pp.DT = dr[1].ToString();
                    pp.value = dr[2].ToString();
                    pp.state = dr[3].ToString();
                    pp.inputtype = dr[4].ToString();                    list.Add(pp);
                }
                //list.Add(pp);
            }
            catch (Exception e)
            {
                
            }
            finally {
                CloseConn(con);
            }            return list;
        }
说我的DB2Command 当前正忙 Fetching。就是这段代码,怎么回事!高手支教~~~怎么改啊~~~~~我已经Dispose了啊?怎么还不可以呢?

解决方案 »

  1.   

    while(dr.Read())
                    {
                        pp.POINTID = dr[0].ToString();
                        pp.DT = dr[1].ToString();
                        pp.value = dr[2].ToString();
                        pp.state = dr[3].ToString();
                        pp.inputtype = dr[4].ToString();                    list.Add(pp);
                    }这段代码后面加dr.Close();
      

  2.   

      while (dr.Read())
        {  }
    dr.dispose();
    dr.Close();