2011-08-29 76 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