2013-06-13 16 views
3

我試圖加入2 DataTables但我收到此錯誤:對象引用不設置到對象的實例,當我嘗試加入2個數據表

Object reference not set to an instance of an object 

這是我在做什麼:

DataTable NodeDataTable = new DataTable(); 
DataTable sdosDataTable = new DataTable(); 
private DataTable NodedataTable() 
    { 
     XmlTextReader xmlreader = new XmlTextReader(Server.MapPath("stuff.xml")); 
     DataSet ds = new DataSet(); 
     ds.ReadXml(xmlreader); 
     xmlreader.Close(); 
     if (ds.Tables.Count != 0) 
     { 
      NodeDataTable = ds.Tables[22]; 
     } 
     return NodeDataTable; 
    } 
    private DataTable SdosDataTable() 
    { 
     XmlTextReader xmlreader = new XmlTextReader(Server.MapPath("stuff.xml")); 
     DataSet ds = new DataSet(); 
     ds.ReadXml(xmlreader); 
     xmlreader.Close(); 
     if (ds.Tables.Count != 0) 
     { 
      sdosDataTable = ds.Tables[10]; 
     } 
     return sdosDataTable; 
    } 

並加入兩個數據表:

private void JoinNodeSdosDT() 
    { 
     DataColumn obj_NodeID, obj_SdosID; 
     DataSet ds1 = new DataSet();  
     NodeDataTable = NodeDataTable.Copy(); 
     sdosDataTable = sdosDataTable.Copy(); 
     ds1.Tables.Add(NodeDataTable); 
     ds1.Tables.Add(sdosDataTable); 
     obj_NodeID = ds1.Tables["node"].Columns["node_Id"]; 
     obj_SdosID = ds1.Tables["sdos"].Columns["node_Id"];  
     sdosDataTable.Columns.Add("typeCodee");   
     DataRelation obj_NodeandSdosRelation = new DataRelation("dept_reln", obj_NodeID, obj_SdosID); 
     ds1.Relations.Add(obj_NodeandSdosRelation); 
     foreach (DataRow dr_NodeSods in ds1.Tables["sdos"].Rows) 
     { 
      DataRow dr_NondeeeR = dr_NodeSods.GetParentRow("dept_reln"); 
      dr_NodeSods["typeCodee"] = dr_NondeeeR["typeCode"]; 
     } 
     DataTable dtResult = ds1.Tables["sdos"].DefaultView.ToTable(false, "node_Id", "typeCode", "sdos_Id"); 
     GridView1.DataSource = dtResult;   
    } 

有一些任何匹配的ID我能做些什麼在這裏解決 我的問題。

我刪除了datatable圖像沒有使用它們。

+0

哪一行引發異常? –

+0

dr_NodeSods [「typeCodee」] = dr_NondeeeR [「typeCode」]; – Clement

+0

請發佈完整的堆棧跟蹤。 編輯:檢查dr_NondeeeR [「typeCode」]是否有值。 – Oscar

回答

1

貌似dr_NondeeeRnull:無論何種原因GetParentRow正在恢復null,因爲

DataRow dr_NondeeeR = dr_NodeSods.GetParentRow("dept_reln"); 
dr_NodeSods["typeCodee"] = dr_NondeeeR["typeCode"]; 

+2

你確定嗎? DataRow.Item屬性的文檔聲明,當他訪問一個不存在的列時,它應該拋出一個'ArgumentException',而不是'NullReferenceException'。 –

+0

@JanDoerrenhaus,奇妙的捕獲。看看我的編輯。 –

+0

剛發佈那個答案我自己。看起來我們得出了相同的結論,然後:) –

1

DataRow.Item (String)所述,訪問不存在的列應該給出ArgumentException。你得到的是一個NullReferenceException。如果在你所行實際發生的話,我只能假設,

DataRow dr_NondeeeR = dr_NodeSods.GetParentRow("dept_reln"); 

給出了一個空引用。

相關問題