Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# IDataReader与DataTable;利弊_C#_Datatable_Sqlbulkcopy_Idatareader - Fatal编程技术网

C# IDataReader与DataTable;利弊

C# IDataReader与DataTable;利弊,c#,datatable,sqlbulkcopy,idatareader,C#,Datatable,Sqlbulkcopy,Idatareader,我正在进行大规模的插入/更新操作 所以我使用的是SqlBulkCopy SqlConnection myConnection = new SqlConnection(myConnectionString); try { myConnection.Open(); SqlBulkCopy myCommand = new SqlBulkCopy(myConnection); myCommand.DestinationTableName = "myDestinationTab

我正在进行大规模的插入/更新操作

所以我使用的是
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
方法


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

    在默认情况下,两者的性能应该相似

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


    请记住,
    IDataReader
    提供了一种只读/仅向前的机制,因此有一个当前位置/行索引的概念,而对于
    DataTable
    则没有这样的概念。随着
    IDataReader
    上的每个
    Read
    行索引移动到下一行

    使用
    DataTable
    重载适用于应用程序中已有合适的
    DT
    的情况

    而使用
    IDataReader
    重载则适用于存在某些查询的情况(无论是原始查询文本还是构造的命令,都无所谓)。在这种情况下,不需要创建中间数据容器,例如
    DT
    。因此,此重载允许您直接从读取器获取数据

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