据我所知,你可以从另一个数据集通过的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 –