批量从 SQL Server 检索数据

Posted

技术标签:

【中文标题】批量从 SQL Server 检索数据【英文标题】:Retrieving data from SQL server in batches 【发布时间】:2011-11-05 22:03:45 【问题描述】:

我有一个 Silverlight Web 应用程序。

我正在将记录插入到从 csv 文件加载的表(SQL 数据库)中。 我尝试加载 +- 15 000 条记录,但出现以下错误: 远程服务器返回错误:NotFound。

我认为这是因为一次插入的数据太多,因为当我将它分成“批次”时,比如一次 100 个,它没有问题地插入到表中。一次500个也太多了。

将数据插入表后,我会从同一个表中读取数据并将其放入数据网格中。这样用户就可以看到它已成功插入,并在处理插入的记录时进行监控。

现在显然我在尝试将 15000 +- 记录加载回数据网格时遇到了同样的错误。

我的问题是如何分批读取表中的记录?

希望有人能提供帮助。

非常感谢,

尼尔

编辑

为了测试我对 OperationContract 进行了更改:

原来

[OperationContract]
public List<send_box> GetSendingItems()

    return (from a in smsData.send_boxes
            orderby a.sb_log descending
            select a).ToList();

改成

[OperationContract]
public List<send_box> GetSendingItems()

    List<send_box> sendBoxList = (from a in smsData.send_boxes
            orderby a.sb_log descending
            select a).ToList();

    return sendBoxList;

结果是从数据库返回的,但是当我尝试将它返回给应用程序时: --> 返回发送框列表

然后它抛出“远程服务器返回错误:未找到。”错误。希望这些额外的信息会有所帮助

问候

尼尔

【问题讨论】:

【参考方案1】:

根据您发布的有限错误消息,我不确定这是否是您的确切问题(堆栈跟踪有助于更好地诊断此问题),但我假设您正在使用 WCF 服务将数据传递给数据库并返回,并且该服务设置了最大消息大小,您需要增加该最大消息大小以允许传递更大量的数据。这是一篇讨论这个的文章wcf-how-to-increase-message-size-quota

【讨论】:

是的,我正在使用 WCF 服务,但已经尝试增加邮件大小配额但无济于事。虽然不太确定一件事。我在Web.config 中添加了basicHttpBinding,但是已经有了customBinding。那个自定义绑定也应该保留吗?【参考方案2】:

我不确定您的确切业务需求是什么。但是根据您的一个回复,您说用户 wnats 可以查看所有记录。如果所有 15,000 条记录都失败,我不确定用户能做什么。可能最好显示一种总结,比如说 15000、10000 通过和 5000 失败。并提供向下钻取或导航链接以探索成功或失败记录。

其次,即使用户想要查看所有记录,我认为在网格中显示超过 100 条记录对用户来说并不友好。 100对我来说也太高了。您可以实现分页功能来限制网格中显示的记录数。

【讨论】:

如果我理解正确,那么分页功能将意味着显示一定数量的记录,如果用户向下滚动,则获取下一个“记录数”并显示这些记录。如果我理解正确,那么这绝对没问题。您能否为我指出如何实施这种解决方案的正确方向。谢谢 看这里:***.com/questions/4578781/… 你可以看看这篇文章,它提供了关于 Silverlight 数据网格中分页排序等的深入知识codeproject.com/Articles/83906/…【参考方案3】:

这看起来像是使用SqlBulkCopy 之类的批量插入机制执行的工作(工作流程:将 csv 文件传输到服务器,建立数据表或其他东西并一次性插入)。无论如何,使用批处理是一个好主意,例如一次 1000 个项目应该不是问题。

旁注:你到底为什么要在一个网格中显示 15000 条记录?没有意义...例如不是更好吗?显示最后插入的 10 条记录以及总数?

【讨论】:

用户需要查看数据库中的触发器正在处理的所有记录。我已将其设置为一次插入 100 个,这工作正常,但我如何读取 100,返回那些 100,读取下一个 100,返回那些等 @Neill - 根据我的说法,您需要先在客户端阅读意味着 .net 端并显示在您在数据集(XML)中获得的数据网格中,然后您就可以从数据集中处理它容易。我遇到了这个问题,我得到了这种类型的解决方案,所以试试这个。这件事会减少你的数据库调用。检查此链接这是我自己的尝试 - sqlmca.wordpress.com/2009/07/29/…

以上是关于批量从 SQL Server 检索数据的主要内容,如果未能解决你的问题,请参考以下文章

从 MS Access 批量导入并插入 Sql Server [关闭]

从 csv 文件批量插入 - 忽略有错误的行 - SQL Server

将数据批量加载到使用 BCP 从 SQL Server 导出的 Snowflake 时出现 UTF-8 错误

Sqoop 导出到 Sql Server VS 批量插入到 SQL Server

尝试将数据表批量插入 SQL Server 时出现 InvalidOperationException

如何从SQL Server迁移大批量数据到Oracle