2013-07-16 25 views
0

我有一個使用OleDB連接到Access數據庫的應用程序。我想創建一些錯誤處理插入重複記錄,其中有一個唯一的索引。在OLEDBException下捕獲特定異常-2147467259

當這個錯誤被拋出時,我得到異常的錯誤代碼-2147467259。但是其他錯誤也會給出相同的錯誤代碼;數據庫已滿,或列缺失例如。

有沒有一種方法可以在不使用錯誤信息本身的情況下確定這些不同的錯誤,而我自己說的每一部分都是不可靠的。

我看過.innerexception,在插入重複的情況下沒有內部異常。

我也看過.SQLState屬性,看起來這是一個在4.0框架中沒有真正使用的舊方法。我可以申請這個,但我可能會錯誤地使用,而不是我想要的嘗試。

我此刻代碼:

  Try 
       Sender.cmdOLEDB.ExecuteNonQuery() 
      Catch ex As OleDbException 

      End Try 
+1

**捕獲通用錯誤**然後執行**查詢**以檢查是否存在另一個具有相同ID的記錄**。 –

+0

@Adriano好的,我會研究這一點。它仍然覺得我可以在這個代碼下的其他一些錯誤的問題。 – Pezzzz

回答

0

在被那個傢伙誰堅持認爲,你的根本問題是這裏真正的問題的風險...數據庫是這裏真正的問題。

我假設你有某種自然鍵會去(否則你不會得到重複的鍵例外)而不是生成的鍵。我建議更改表格,這樣您就不必擔心嘗試解決爲什麼插入由於不良PK而失敗的問題。

我見過類似的邏輯,其中一個同事實施的保存方法的東西:

try 
{ 
    insertCommand.ExecuteNonQuery(); 
} 
catch(Exception ex) 
{ 
    updateCommand.ExecuteNonQuery(); 
} 

這是......不好。

+1

歡迎來到SO :)。該表保存測試數據,唯一的關鍵是日期/時間。捕獲重複密鑰的嘗試是爲了避免用戶輸入重複數據。我不覺得這是一個根本問題。 – Pezzzz

+0

謝謝:)基於其他字段或基於日期時間的數據是否重複?我不是指DBMS的意思,但從邏輯上講,它是什麼使它成爲重複的? –

+0

重複是基於日期的時間,每次只能有一個記錄。這些重複項將由兩次導入相同數據的人創建。 – Pezzzz