2013-05-09 79 views
2

我正在使用.NET 4.0。我試圖將具有相同模式的許多數據集合到一個數據集中。每個源數據集應包含與所有其他數據集相同的三個表名。目前,我可能會假設數據將全部是唯一的,即使在表和數據集中也是如此。我試圖使用.Load()函數,但我卡在第三個參數。我可能會誤解.Load()實際上的目的,如果這不是完成此任務的最佳方式,那麼請儘量讓我知道。這是我到目前爲止有:聚合C#數據集時,如何將DataSet轉換爲.Load()的DataTable數組?

private AccessFileCollection accessFileCollection; 
private DataSet allAccessData; 

public void AggregateCollection() 
{ 
    foreach (AccessFile accessFile in accessFileCollection.Files.Values) 
    { 
     foreach (DataTable dt in accessFile.Dataset.Tables) 
     { 
      if (allAccessData.Tables[dt.TableName] == null) 
      { allAccessData.Tables.Add(new DataTable(dt.TableName)); } 
     } 
     allAccessData.Load(accessFile.Dataset.CreateDataReader(), 
      LoadOption.PreserveChanges, 
      accessFile.Dataset.Tables); 
    } 
} 

//AccessFileCollection is a custom class which implements .GetEnumerator() and also contains: 
private Dictionary<int, AccessFile> accessFileCollection; //With a get/set called ".Files" 

//AccessFile is a custom class that contains: 
private DataSet ds; //With a get/set called ".Dataset" 

MSDN給我們.Load()的方法簽名:

public void Load(
    IDataReader reader, 
    LoadOption loadOption, 
    params DataTable[] tables // <-- How do I satisfy this? What do I provide out of accessFile? 
) 

所以,我的問題再次有: - 是.Load()適當嗎? - 滿足DataTable []需求的最佳方式是什麼? - 爲什麼微軟不讓我把整個數據集放入第三個參數?一個數據集已經包含一個數據表列表!

+0

您是否嘗試過提供數據集的'表屬性?類似'dataSet.Tables.OfType ().ToArray()'。 – 2013-05-09 14:26:34

+0

它似乎......一旦我通過了這個下一個錯誤,我就會知道更多:「Table myTable不屬於這個DataSet。」我認爲這是因爲我沒有正確地初始化我的目標數據集,否則.Tables.OfType ().ToArray()可能會創建與我預期不同的數組。更新上面的代碼。 – averyoo7 2013-05-09 14:33:41

+0

它可能試圖將一個未關聯的'DataTable'添加到'DataSet'。這些表格將與源數據集相關聯。 – 2013-05-09 14:35:39

回答

0
  • 什麼是滿足DataTable []要求的最佳方法?

DataSet已包含DataTables。您可以嘗試從波紋管(具有DataSet訪問文件)的表ArrayArray

DataTableCollection tableCollection = accessFile.Tables; 
DataTable[] tablesArray = null; 
tableCollection.CopyTo(tablesArray, 0);