我想知道SqlDataAdapter
内部是如何工作的,特别是在UpdateCommand
用于更新一个巨大的DataTable
(因为它通常比从循环中发送 sql 语句要快得多)。
这是我的一些想法:
- 它创建一个准备好的 sql 语句(使用
SqlCommand.Prepare()
),其中CommandText
填充和 sql 参数使用正确的 sql 类型初始化。然后,它在需要更新的数据行上循环,并为每条记录更新参数值,并调用SqlCommand.ExecuteNonQuery()
. - 它创建了一堆
SqlCommand
对象,里面填满了所有东西(CommandText
和 sql 参数)。然后一次将几个 SqlCommand 批处理到服务器(取决于UpdateBatchSize
)。 - 它使用一些特殊的、低级的或未记录的 sql 驱动程序指令,这些指令允许以有效的方式对多行执行更新(需要使用特殊数据格式提供要更新的行,并且相同的 sql 查询(
UpdateCommand
此处)将是对每一行执行)。