2012-09-28 81 views
0

我正在從內部系統批量添加一堆記錄到我們的Web數據庫服務器(電子賬單類型數據)。我有一個問題,如果有數據錯誤(單獨問題),每個錯誤後添加錯誤。當出現錯誤時從Entity Framework中刪除一批記錄

 foreach (InvoiceHeader invoiceHeader in invoiceHeaders) 
     { 
      rrn++; 
      db.AddToInvoiceHeaders(invoiceHeader); 
      if (rrn >= RECORDS_AT_A_TIME) 
      { 
       try 
       { 
        db.SaveChanges(); 
        rrn = 0; 
       } 
       catch (Exception e) 
       { 
        string errorText = "Error in blah blah blah \n\n"; 
        errorText += "Error: " + e.ToString(); 
        Log.Error(errorText); 
        // Delete out bad record or entire set of records here. 
       } 
      } 
     } 

因此,第一個500可能會很好,那麼我可能會得到一個無效的日期。沒有其他東西會被添加到服務器中,並且日誌會因錯誤和崩潰而受到抨擊。

如何清除出錯的記錄或清除那批記錄?所以它可以正常完成,我們可以回去修復錯誤,從而加回丟失的數據。

更新:我希望能夠記錄錯誤,刪除問題記錄並繼續前進。在這種情況下,它恰好是一個日期問題,我不是在尋找解決這個一個實例,但所有未來未知的問題。我該怎麼做// Delete out bad record or entire set of records here.

+1

在添加它們之前進行驗證。你說「我們的數據庫」,這意味着你知道驗證約束。 – Marius

+0

什麼是無效日期?它出了還是SQL最小/最大日期範圍?什麼是確切的錯誤信息? – cadrell0

+0

我確實......並且我處理了所有日期問題(或者我認爲),而且我仍然遇到了錯誤。這是關於不堵塞我們的日誌和崩潰的服務器。不是如何解決數據問題。我只想在記錄錯誤時完成此過程,以便稍後解決。 –

回答

0

這可能是一個不太理想的解決方案,但似乎工作的東西我需要繼續前進。

 foreach (InvoiceHeader invoiceHeader in invoiceHeaders) 
     { 
      rrn++; 
      if (rrn >= RECORDS_AT_A_TIME) 
      { 
       try 
       { 
        db.SaveChanges(); 
        rrn = 0; 
       } 
       catch (Exception e) 
       { 
        string errorText = "Error in blah blah\n\n"; 
        errorText += "Error: " + e.ToString(); 
        Log.Error(errorText); 
      // Throw out all of these records so we can move on. 
      // Probably not the best solution, but it works. 
        db.Dispose(); 
        db = new db_Entities(); 
       } 
      } 
     } 
0

隨着您當前的實施,您已經在逐一處理每個項目,因此,如果其中一個發生錯誤,您可以處理,那麼只需執行此操作並繼續處理。此外,不要抓住一般Exception,更具體的例外是你的代碼應該期望例如

try 
{ 
    ... 
} 
catch (SqlTypeException) 
{ 
    ... 
} 
+0

不,我一次增加100個。 'RECORDS_AT_A_TIME'我沒有包含它,但設置爲100. –

+0

@MikeWills您一次處理100條記錄,但是您*保存*每條記錄。你沒有進行批量保存。 – James

+0

錯誤發生在.Save不.Add。所以有100條記錄可能是罪魁禍首。我想刪除所有100個,然後繼續前進。 –

相關問題