C# 从SQL server中批量检索数据

C# 从SQL server中批量检索数据,c#,sql-server,silverlight,wcf,linq,C#,Sql Server,Silverlight,Wcf,Linq,我有一个Silverlight web应用程序 我将记录插入从csv文件加载的表(SQL数据库)。 我尝试加载+-15000条记录,但它抛出了以下错误: 远程服务器返回错误:NotFound 我收集它是因为一次插入的数据太多,因为当我将它分成“批”时,比如说一次插入100个,它插入到表中没有问题。一次500块也太多了 在我将数据插入表中之后,我所做的是从同一个表中读取数据并将其放入数据网格。这样,用户可以看到它已成功插入,并在处理插入的记录时进行监视 现在很明显,我在尝试将15000+条记录加载

我有一个Silverlight web应用程序

我将记录插入从csv文件加载的表(SQL数据库)。 我尝试加载+-15000条记录,但它抛出了以下错误: 远程服务器返回错误:NotFound

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

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

现在很明显,我在尝试将15000+条记录加载回数据网格时遇到了相同的错误

我的问题是,我怎样才能批量读取表中的记录

希望有人能帮忙

非常感谢,

尼尔

编辑

为了测试,我更改了操作合同:

本来

[OperationContract]
public List<send_box> GetSendingItems()
{
    return (from a in smsData.send_boxes
            orderby a.sb_log descending
            select a).ToList();
}
[运营合同]
公共列表GetSendingItems()
{
返回(从smsData.send_框中的a)
orderby a.sb_日志降序
选择一个.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;
}
[运营合同]
公共列表GetSendingItems()
{
List sendBoxList=(从smsData.send_框中的a开始)
orderby a.sb_日志降序
选择一个.ToList();
返回sendBoxList;
}
结果从数据库返回,但当我尝试将其返回到应用程序时: -->返回sendBoxList

然后抛出“远程服务器返回错误:NotFound.”错误。希望这些额外的信息能有所帮助

问候


Neill

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

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


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

我不确定您的确切业务要求是什么。但是根据你的一个回复,你说用户需要查看所有记录。我不确定如果15000条记录全部失败,用户能做什么。也许展示一种总结会是一个好主意,比如说15000个,10000个通过,5000个失败。并提供向下钻取或导航链接,以浏览成功或失败记录


第二,即使用户希望查看所有记录,但我认为在网格中显示超过100条记录并不友好。100对我来说也是非常好的。您可以实现分页功能来限制网格中显示的记录数。

是,我正在使用WCF服务,但已尝试增加邮件大小配额,但没有效果。不过有一件事不太确定。我在Web.config中添加了basicHttpBinding,但是已经有了customBinding。自定义绑定是否也应该保留?用户需要查看数据库中触发器处理的所有记录。我已经将它设置为一次插入100,这很好,但是我如何读取100,返回那些100,读取下一个100,返回那些等等etc@Neill-据我所知,您需要首先在客户端读取数据,即.net端,并在数据网格中显示您在数据集(XML)中获得的数据,然后才能轻松地处理数据集中的数据。我面临这个问题,我得到了这种类型的解决方案,所以试试这个。这会减少你的db呼叫。检查此链接这是我自己的尝试-如果我理解正确,则分页功能将意味着显示一定数量的记录,如果用户向下滚动,则获取下一个“记录数”并显示这些记录。如果我理解正确的话,这将是绝对好的。你能告诉我如何实施这种解决方案的正确方向吗。这里谢谢:您可以看看这篇文章,它提供了有关Silverlight数据网格中分页排序等的深入知识