首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SqlDataAdapter是如何内部工作的?

SqlDataAdapter是如何内部工作的?
EN

Stack Overflow用户
提问于 2012-12-19 23:02:05
回答 1查看 1.2K关注 0票数 5

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

以下是我想到的一些想法:

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

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-19 23:05:30

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

每条语句更新一行,每批发送一条语句,但每次往返发送多个批次。这份名单上的最后一点是神奇的酱汁。

不幸的是,这个工具是,没有公开公开的Ayende对此进行了黑客攻击,并为此构建了一个私有的反射基API。

如果您需要更多信息,我鼓励您查看内部SqlCommandSet类。

也就是说,可以比这更快--:使用TVP传输更新数据,并发出一个更新多行的UPDATE。这样,您就可以节省每批、每次往返和每次报表的所有间接费用.

这样的查询如下所示:

代码语言:javascript
运行
复制
update T set T.x = @src.x from T join @src on T.ID = @src.ID
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13962704

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档