日期:2014-05-17  浏览次数:20444 次

构建DataTable报错。。。
C# code

            DataTable dt = new DataTable();
            DataColumn can_use = new DataColumn();
            can_use.DataType = System.Type.GetType("System.Int32");
            can_use.ColumnName = "can_use";
            dt.Columns.Add(can_use);

            DataColumn start_date = new DataColumn();
            start_date.DataType = System.Type.GetType("System.DateTime");
            start_date.ColumnName = "start_date";
            dt.Columns.Add(start_date);
            
            DataColumn end_date = new DataColumn();
            end_date.DataType = System.Type.GetType("System.DateTime");
            end_date.ColumnName = "end_date";
            dt.Columns.Add(end_date);

            DataColumn des = new DataColumn();
            des.DataType = System.Type.GetType("System.String");
            des.ColumnName = "des";
            dt.Columns.Add(des);

            DataColumn gps_date = new DataColumn();
            gps_date.DataType = System.Type.GetType("System.Boolean");
            gps_date.ColumnName = "gps_date";
            dt.Columns.Add(gps_date);

            dt = SQLHelper.ExecuteDateSet(conStr, CommandType.Text, sqlStr, null).Tables[0];

            OracleDataReader dr = SQLHelper.ExecuteReader(conStr, CommandType.Text, sqlStr, null);
            DataRow dataRow;
            if (dr.HasRows)
            {    
                while (dr.Read())
                {
                    string temp_canUse = dr["can_use"].ToString();//是否可用。1:可用,0:不可用
                    string temp_startDate = dr["start_date"].ToString();//空闲时间段开始时间
                    string temp_endDate = dr["end_date"].ToString();//空闲时间段结束时间
                    string temp_des = dr["des"].ToString();//描述
                    bool temp_gpsIsFree = IsEmpty(sim, DateTime.Parse(temp_startDate), DateTime.Parse(temp_endDate));//该段时间内是否有gps数据


                    dataRow = dt.NewRow();
                    dataRow["can_use"] = temp_canUse;
                    dataRow["start_date"] = DateTime.Parse(temp_startDate);
                    dataRow["end_date"] = DateTime.Parse(temp_endDate);
                    dataRow["des"] = temp_des;
                    dataRow["gps_date"] = true;
                    dt.Rows.Add(dataRow);
                }
            }



错误行:dataRow["gps_date"] = true;

错误原因:列“gps_date”不属于表 Table。


没做过winform,晕!!!

------解决方案--------------------
前面给dt加了这么些个列。
完事又dt = SQLHelper.ExecuteDateSet(conStr, CommandType.Text, sqlStr, null).Tables[0];
那dt的列岂不是由Tables[0]决定的了。。。
------解决方案--------------------
好像是dataRow[0]["gps_date"]
------解决方案--------------------
你为什么不用ado.net的dataadpter来直接获取datatable呢?
你这样折腾,把用ado.net的一点点优势全搞没了。
------解决方案--------------------
当进入Read方法体时。你断点下在这“ dataRow = dt.NewRow();

看下此时dt的结构!包含了哪些列?