1

我正在做一个大规模的插入/更新操作。

所以我正在使用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 方法 (IDataReader)

  2. SqlBulkCopy.WriteToServer 方法 (DataTable)

问题:一个比另一个有什么优点和缺点?哪个更快?

4

2 回答 2

2

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

但是有一个区别,WriteToServer使用DataTableas 参数将从中插入所有行DataTable,但使用IDataReader复制从阅读器中的下一个可用行开始(默认情况下将设置为第一行)

请记住,IDataReader提供了只读/仅转发机制,因此有一个当前位置/行索引的概念,而DataTable没有这样的东西。随着每ReadIDataReader索引移动到下一行。

于 2015-05-25T15:02:32.413 回答
1

当您的应用程序中已经有合适的地方 时,重载DataTable适用于这种情况。DT

反过来,重载IDataReader是针对有一些查询(原始查询文本或构造的命令,都没有关系)的情况。DT在这种情况下,不需要创建中间数据容器,例如。因此,此重载允许您直接从阅读器获取数据。

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

于 2015-05-25T15:10:44.123 回答