據我所知,你可以從另一個數據集通過的IDataReader加載一個數據集即ADO.NET DataSet.Load()似乎並沒有處理空表正確
new DataSet().Load(existingDataSet.CreateDataReader());
// should now have two DataSets with the same contents
我一直沒能找到任何說明文件暗示這是不可能的。那麼,誰能解釋一下,爲什麼下面的NUnit測試失敗了?
[Test]
public void Should_be_able_to_load_one_dataset_from_another()
{
var tableA = new DataTable("A");
//tableA.Columns.Add("ColumnA", typeof(int));
var tableB = new DataTable("B");
tableB.Columns.Add("ColumnB", typeof(int));
var tableC = new DataTable("C");
using (var original = new DataSet())
{
original.Tables.Add(tableA);
original.Tables.Add(tableB);
original.Tables.Add(tableC);
using (var expectedReader = original.CreateDataReader())
using (var actual = new DataSet())
{
actual.Load(expectedReader, LoadOption.OverwriteChanges, "A", "B", "C");
Assert.That(actual.HasErrors, Is.False);
for (var i = 0; i < original.Tables.Count; i++)
Assert.That(actual.Tables[i].Columns.Count, Is.EqualTo(original.Tables[i].Columns.Count),
"Table {0} had the wrong number of columns.", i); // fails here
}
}
}
如果您取消註釋ColumnA,則測試通過。所以看起來DataSet.Load()中可能存在一個錯誤,那就是在遇到一個沒有列的表之後,下一個表將被導入而沒有列。請注意,空表不會受到影響,只會緊隨其後的表,因此如果只有最後一個空表,測試纔會通過。
我在BCL中發現了一個錯誤嗎?或者有沒有解釋這種行爲?
好的發現 - 那肯定會解釋它。我將在Connect上提出一張票。 –
更新:https://connect.microsoft.com/VisualStudio/feedback/details/695262/bug-in-ado-net-dataset-load-empty-table-handling#details –