当前位置: 代码迷 >> ASP.NET >> 构建DataTable报错。该怎么处理
  详细解决方案

构建DataTable报错。该怎么处理

热度:7989   发布时间:2013-02-25 00:00:00.0
构建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的结构!包含了哪些列?
  相关解决方案