2011-08-29 35 views
2

我有一个Silverlight Web应用程序。从SQL服务器批量检索数据

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

我认为这是因为它太多的数据一次插入,因为当我把它分成'批',一次说100,它插入到表没有probs。每次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; 
} 

结果被从数据库返回的,但是当我尝试将其返回到应用程序: - >返回sendBoxList

然后抛出的“远程服务器返回错误:NOTFOUND “。错误。希望这个额外的信息将有助于

问候

奥尼尔

回答

2

我不确定您的具体业务需求是什么。但通过你的回应之一,你说用户可以看到所有的记录。如果所有15,000条记录都失败,我不确定用户能够做什么。可能会是一个好主意,显示一种总结说可以说15000,10000通过,5000失败。并提供向下钻取或导航链接以探索成功或失败记录。其次,即使用户想要查看所有记录,但我不认为用户友好可以在网格中显示100多条记录。 100对我来说也是极端的。您可以实施分页功能来限制显示在网格中的记录数量。

+0

如果我理解正确,那么分页功能意味着显示一定数量的记录,并且如果用户向下滚动,则获取下一个“记录数”并显示这些记录。如果我正确理解这一点,那么这将是绝对好的。你能否指出我如何实施这种解决方案的正确方向?谢谢 – Neill

+0

看这里:http://stackoverflow.com/questions/4578781/customized-paging-with-repeater-and-sql – Dalex

+0

你可以看看这篇文章提供深入的知识关于分页排序等在Silverlight数据网格http: //www.codeproject.com/Articles/83906/Silverlight-4-Dagagrid-Sorting-Grouping-Filtering –

4

我不知道这是根据您发布的有限的错误消息,您的具体问题(堆栈跟踪将有助于诊断这种更好),但我假设您正在使用WCF服务将数据传递到数据库并返回,并且服务的最大消息大小已设置,您需要增加以允许传递更大量的数据。下面是谈论这个wcf-how-to-increase-message-size-quota

+0

是的,我正在使用WCF服务,但已经尝试增加消息大小配额无济于事。虽然不是很确定一件事。我在Web.config中添加了basicHttpBinding,但已经有了一个customBinding。该自定义绑定还应该保留吗? – Neill

2

这看起来像一个工作与批量插入机构像SqlBulkCopy(工作流程执行的一篇文章:csv文件传输到服务器,建立一个数据表或东西,一气呵成插入)。无论如何使用批次都是一个好主意,例如一次1000个项目应该不成问题。

备注:为什么你要在网格中显示15000条记录?没有意义......例如它会不会比较好显示最近插入的10条记录,以及总数?

+0

我完全同意你在这两点上 –

+0

用户需要查看数据库中由触发器处理的所有记录。我已经设置它一次插入100,这是工作正常,但我怎么读100,返回这100,读下100,返回等等等 – Neill

+0

@Neill - 按照我,你需要先阅读客户端意味着.net端并显示在数据集(XML)中的数据网格中,然后您可以轻松地从数据集中处理该数据网格。我面临这个概率,我得到这种类型的解决方案,所以只是试试这个。这件事会减少你的数据库调用。检查这个链接,这是我自己的打击尝试它 - http://sqlmca.wordpress.com/2009/07/29/how-to-get-data-from-dataset-into-sqlserver-table-by-using-openxml-方法/ – KuldipMCA