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
方法。
问题:两者的优缺点是什么?哪个更快?
在默认情况下,两者应该具有相似的性能,否则 horses..
但是有一个区别,WriteToServer
以 DataTable
作为参数将插入来自 DataTable
的所有行,但是以 IDataReader
复制从下一个可用行开始reader (在默认情况下将设置为第一行)。
请记住,IDataReader
提供了一种仅 read-only/forward 的机制,因此有当前 position/row 索引的概念,而 DataTable
则没有这样的东西。 IDataReader
行上的每个 Read
索引移动到下一行。
Overload with DataTable
适用于以下情况,当您在应用程序的某处已经有合适的 DT
时。
使用 IDataReader
重载,反过来,适用于有查询的情况(无论是原始查询文本,还是构造的命令,都无关紧要)。在这种情况下,不需要创建中间数据容器,例如 DT
。因此,此重载允许您直接从 reader 获取数据。
假设,你既没有DT
,也没有IDataReader
,第二个至少应该消耗更少的资源。
我正在做一个大规模的 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
方法。
问题:两者的优缺点是什么?哪个更快?
在默认情况下,两者应该具有相似的性能,否则 horses..
但是有一个区别,WriteToServer
以 DataTable
作为参数将插入来自 DataTable
的所有行,但是以 IDataReader
复制从下一个可用行开始reader (在默认情况下将设置为第一行)。
请记住,IDataReader
提供了一种仅 read-only/forward 的机制,因此有当前 position/row 索引的概念,而 DataTable
则没有这样的东西。 IDataReader
行上的每个 Read
索引移动到下一行。
Overload with DataTable
适用于以下情况,当您在应用程序的某处已经有合适的 DT
时。
使用 IDataReader
重载,反过来,适用于有查询的情况(无论是原始查询文本,还是构造的命令,都无关紧要)。在这种情况下,不需要创建中间数据容器,例如 DT
。因此,此重载允许您直接从 reader 获取数据。
假设,你既没有DT
,也没有IDataReader
,第二个至少应该消耗更少的资源。