使用 ADO.NET 时如何最好地显示进度信息?

2023-12-21

我想在执行可能很长的数据库操作时向用户显示详细的进度信息。具体来说,当插入/更新可能约为数百 KB 或 MB 的数据时。

目前,我使用内存中的 DataTables 和 DataRows,然后通过 TableAdapter.Update 调用与数据库同步。这工作得很好,但单个调用几乎没有机会收集任何类型的进度信息以显示给用户。我不知道有多少数据通过网络传递到远程数据库或其进度。基本上,我所知道的是更新何时返回并且假定已完成(除非有任何错误或异常)。但这意味着我只能显示 0%,然后暂停,然后是 100%。

我可以计算行数,甚至可以计算出实际修改或添加的行数,我什至可以根据每列的数据类型计算每个 DataRow 的估计大小,使用 sizeof 作为 int 等值类型并检查字符串或字节数组等内容的长度。这样,我可能可以在更新之前确定估计的总传输大小,但是一旦在 TableAdapter 上调用 Update,我仍然没有任何进度信息。

我是否只是使用不确定的进度条或鼠标等待光标而陷入困境?我是否需要从根本上改变我们的数据访问层才能连接到此类信息?即使我无法将其精确到传输的 KB(如 Web 浏览器文件下载进度条),我至少可以知道每个 DataRow/DataTable 何时完成或其他什么吗?

如何使用 ADO.NET 最好地显示此类进度信息?


有一个半解决方案SELECT部分,即发出COUNT首先查询以获取您期望收到的行数。这仅在以下情况下才实用COUNT查询可以非常快地返回结果(即不到一秒) - 另一方面,如果运行需要几秒钟,则查询执行本身(与结果枚举相反)可能比数据传输花费更长的时间,在这种情况下,根本不值得尝试显示离散的进度条。

As for UPDATE and INSERT- 不,实际上没有任何简单的解决方案,特别是使用 TableAdapters。如果您有大量数据要发送,您可能需要考虑使用SQL批量复制 http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy_members%28v=VS.90%29.aspx类上传到临时表,然后在服务器上执行实际更新。该课程提供之后通知 http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.notifyafter%28v=VS.90%29.aspx财产连同SqlRows已复制 http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.sqlrowscopied%28v=VS.90%29.aspx事件可以为您提供当前进度的合理近似值(在这种情况下您已经知道行总数,因为它们在内存中)。

当然,这需要对当前的 TableAdapter 实现进行重大更改,但 .NET 中的类型化数据集系统实际上并不是为了通过 LAN 连接以外的任何方式处理该大小的记录集而设计的。

我认为大多数人只会选择使用字幕进度条。如今,用户期望这一点;即使您可以准确地预测行数和数据传输速率,您仍然不知道查询实际执行需要多长时间,特别是在服务器负载很重的情况下,并且可以说提供更糟糕的情况错误的估计 http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.sqlrowscopied%28v=VS.90%29.aspx比没有估计。

如果查询(或更新)本身很可能需要很长时间在服务器本身上运行,而不计算上传/下载记录的任何时间,那么我肯定会使用选取框进度条。否则……祝你好运。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 ADO.NET 时如何最好地显示进度信息? 的相关文章

  • 等待异步TaskEx

    What is TaskEx In http www i programmer info programming c 1514 async await and the ui problem html start 1 http www i p
  • Web API 帮助页面显示每个方法的两个版本

    如何避免帮助页面显示我的方法的两个版本 正如你所看到的 我已经设置了一条自定义路线 api property search finnId 但我不希望使用查询参数的那个出现在 帮助 页面中 有办法解决这个问题吗 我正在使用 ASP NET F
  • 寻找系统、全面、完整的VB.NET和C#语法比较

    我是一名经验丰富的 VB NET 开发人员 想从 C 开始 我正在寻找两种语言语法之间基于网络的比较作为快速参考 我发现自己正在整理 VB NET 语法模板 例如 Public MustInherit Class BaseClass Pub
  • IoC比较[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 开发 ASP NET Web 应用程
  • 为什么 BLToolkit 没有更流行? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 获取 SSRS 的报告列表?

    我刚刚开始使用 SSRS 到目前为止 我已经能够通过对报告路径进行硬编码 使用 ReportViewer 在我的 Winforms 应用程序中显示报告 我想从 SSRS 获取一份报告列表 以便我可以显示它们并让用户选择他们想要查看的报告 有
  • 是否有理由为什么用 XmlInclude 修饰的基类在序列化时仍然会抛出类型未知的异常?

    我将简化代码以节省空间 但所提供的内容确实说明了核心问题 我有一个类 它的属性是基类型 有 3 个派生类可以分配给该属性 如果我将任何派生类分配给容器并尝试序列化容器 XmlSerializer 会抛出可怕的错误 类型 x 不是预期的 使用
  • 实体框架中的导航属性是什么

    我是实体框架的新手 当Visual Studio创建模型图时我们主要可以看到Entities Propertie和Navigation Properties这两个东西 那么这些Navigation Properties是什么 如何使用它们
  • 如何从另一个线程阻止 UI 线程或强制表单在 UI 线程内运行

    我的应用程序的一个要求是 如果它失去数据库连接 那么它必须弹出一个大模式 无连接 稍后重试 对话框 阻止所有用户交互 直到重新获得连接为止 我通过在应用程序启动时启动 DeviceMonitor 类的实例来实现此目的 该类创建一个 Syst
  • 有没有办法强制“任何 CPU”编译的应用程序在 64 位操作系统上以 32 位模式运行?

    如果我有一个 任何 CPU 编译的 NET 应用程序 它将在 64 位操作系统上以 64 位模式运行 但是 如果我出于某种原因想要强制此应用程序以 32 位模式运行 就好像它是使用 x86 编译的 重新编译不是一个选项 那么这可以在运行时配
  • 本地化 Win7 版本上的 UI 截断

    我有两个分别用 C NET 3 和 Wise Installer 开发的 UI UI 是向导页面 这在 Win 7 英文操作系统上完美运行 但是当我在Win7韩语或中文上部署该应用程序时 我看到了截断 即使我对字体进行硬编码 我也会看到这个
  • 如何在 Application.Run(form1) 执行时隐藏 form1?

    我有一个运行的 form1Application Run 我想隐藏这个表单 我需要它隐藏 因为我在后台运行一些东西 所以它们必须执行 并打开另一个表单进行登录 我尝试的方法是在我的 form1 构造函数中执行命令this Hide 如果登录
  • 这是 Visual Studio 2010 编译器中的错误吗?

    DateTime date null string tmp a date blablabla Console WriteLine tmp 这将打印一些接近于 a 这是一个错误吗null coalescing operator 如果我把dat
  • 如何通过在 FlowDocument 中单击鼠标来获取 TextPointer

    我想获取用户在 FlowDocument 中单击的单词 我当前正在向文档中的每个 Run 添加一个事件处理程序 并迭代单击的 Run 中的 TextPointers 对每个 Run 调用 GetCharacterRect 并检查矩形是否包含
  • FtpWebRequest 关闭上传流挂在大文件上

    我正在尝试使用 FtpWebRequest 上传一些文件 这适用于小文件 例如 我可以a 不关闭它 b 不费心从服务器获取响应 但这似乎不对 请参阅下面的代码 无论是否使用 SSL 都会出现同样的问题 output Close 是挂起的行
  • 从内存加载程序集

    我正在移植一个 Java 应用程序 其中类在运行时从内存 字节数组 加载并 执行 我试图在 C 中实现同样的目标 但遇到问题 System IO FileNotFoundException异常 当尝试从字节数组加载程序集时 使用AppDom
  • 这种 ASP.NET 会话访问多用户安全技术吗?

    我正在研究一种在我公司的很多项目中都出现过的设计模式 它在历史上一直运行正常 但是我听到其他一些开发人员认为使用这种模式可能会导致会话损坏 我正在 Stack Overflow 上寻找其他 NET 开发人员的见解 基本上 有一个类 通常是s
  • 使用 C# 将文件列表从 ftp 下载到本地文件夹? [复制]

    这个问题在这里已经有答案了 我希望将 ftp 中的所有文件下载到本地文件夹 下载到本地驱动器后 所有文件都应在 ftp 中删除 从下面的代码 我只能从 ftp 下载一个我不期望的文件 我需要将所有文件放在一个文件夹中 但不放在本地文件名的名
  • 在 UserControl C# .NET 中添加/停靠控件

    我正在编写一个 UserControl 它以编程方式添加子控件 目前我正在添加新的控件 如下所示 this Controls Add new Control Height 16 Dock DockStyle Top 我遇到的问题是新控件添加
  • 查询 XmlDocument 而不会出现“命名空间前缀未定义”问题

    我有一个 Xml 文档 它定义并引用了一些命名空间 我将其加载到 XmlDocument 对象中 据我所知 我创建了一个 XmlNamespaceManager 对象 用于查询 Xpath 问题是我收到命名空间 my 未定义的 XPath

随机推荐