IDataReader 与数据表;优点和缺点

IDataReader vs DataTable; pros and cons

我正在做一个大规模的 insert/update 操作。

所以我正在使用 SqlBulkCopy

SqlConnection myConnection = new SqlConnection(myConnectionString);

try
{
    myConnection.Open();
    SqlBulkCopy myCommand = new SqlBulkCopy(myConnection);

    myCommand.DestinationTableName = "myDestinationTableName";

    //Below method has four overloads; 
    //of which I am interested in the two mentioned below.
    myCommand.WriteToServer();

    myCommand.Close();
}
finally
{
    myConnection.Close();
}

但我偶然发现了这两个版本的 WriteToServer 方法。

  1. SqlBulkCopy.WriteToServer Method (IDataReader)

  2. SqlBulkCopy.WriteToServer Method (DataTable)

问题:两者的优缺点是什么?哪个更快?

在默认情况下,两者应该具有相似的性能,否则 horses..

但是有一个区别,WriteToServerDataTable 作为参数将插入来自 DataTable 的所有行,但是以 IDataReader 复制从下一个可用行开始reader (在默认情况下将设置为第一行)

请记住,IDataReader 提供了一种仅 read-only/forward 的机制,因此有当前 position/row 索引的概念,而 DataTable 则没有这样的东西。 IDataReader 行上的每个 Read 索引移动到下一行。

Overload with DataTable 适用于以下情况,当您在应用程序的某处已经有合适的 DT 时。

使用 IDataReader 重载,反过来,适用于有查询的情况(无论是原始查询文本,还是构造的命令,都无关紧要)。在这种情况下,不需要创建中间数据容器,例如 DT。因此,此重载允许您直接从 reader 获取数据。

假设,你既没有DT,也没有IDataReader,第二个至少应该消耗更少的资源。