gpt4 book ai didi

c# - SqlDataAdapter 内部是如何工作的?

转载 作者:太空狗 更新时间:2023-10-30 00:54:07 28 4
gpt4 key购买 nike

我想知道 SqlDataAdapter 是如何在内部工作的,尤其是当使用 UpdateCommand 来更新一个巨大的 DataTable 时(因为它通常比仅发送要快得多来自循环的 sql 语句)。

这是我的一些想法:

  • 它创建一个准备好的 sql 语句(使用 SqlCommand.Prepare()),其中填充了 CommandText 并使用正确的 sql 类型初始化了 sql 参数。然后,它在需要更新的数据行上循环,并为每条记录更新参数值,并调用 SqlCommand.ExecuteNonQuery()
  • 它创建了一堆 SqlCommand 对象,其中填充了所有内容(CommandText 和 sql 参数)。然后将多个 SqlCommand 一次批处理到服务器(取决于 UpdateBatchSize)。
  • 它使用一些特殊的、低级的或未记录的 sql 驱动程序指令,允许以有效的方式对多行执行更新(需要使用特殊数据格式和相同的 sql 查询提供要更新的行(UpdateCommand here) 将针对这些行中的每一行执行)。

最佳答案

它使用 SQL Server 客户端类的内部工具,称为命令集。您可以使用单个命令将多个批处理发送到 SQL Server。这减少了每次调用的开销。您的服务器往返次数较少等。

每个语句更新一行,每个批处理发送一个语句,但每次往返发送多个批处理。此列表中的最后一点是魔术酱

很遗憾,此设施未公开展示Ayende took a hack on this and built a private-reflection bases API for it.

如果您想了解更多信息,我建议您查看内部 SqlCommandSet 类。

也就是说,您自己可以比这更快:使用 TVP 传输更新数据并发出单个 UPDATE 来更新许多行。这样您就可以节省所有每批处理、每次往返和每条语句的开销。

这样的查询看起来像这样:

update T set T.x = @src.x from T join @src on T.ID = @src.ID

关于c# - SqlDataAdapter 内部是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13962704/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com