簡體   English   中英

處理錯誤時如何獲取數據

[英]How to get data when there is handled errors

我有一個過程,該過程列出一堆發票,然后為每個發票調用另一個過程來處理它們。 如果存在配置問題,則處理過程可能會失敗。 為了解決這個問題,處理過程在事務中運行,如果有錯誤,則回滾。 查看完所有發票后,列表過程將返回發票ID和標志的列表,以顯示哪些失敗和哪些可以。

我的問題是,當我在C#程序中調用此列表過程,而其中一個處理過程失敗時,錯誤消息就會通過,並且我無法訪問包含發票ID和錯誤標志列表的記錄集。 該過程在Management Studio中起作用:錯誤顯示在消息選項卡中,但是結果選項卡還顯示返回的發票列表。 但是在代碼中,DataAdapter.Fill()方法失敗了,僅此而已。 在這種情況下,如何檢索發票清單? 還是可以某種方式清除錯誤消息?

注意:它必須在SQL 2000和2008中工作。

我認為這是您需要牢記的最重要的一點:處理發票時出錯時,過程不應返回錯誤:由於發票是程序中的商務元素,因此應將其視為“預期的”或“可解釋”錯誤,應正確處理。 換句話說,在這種情況下,您應該使用返回參數將錯誤號和可能的錯誤描述返回給調用者,同時仍然允許您獲得結果集。 甚至更好的是,結果集中存在“失敗的發票”應該足以使您的調用方法確定出了問題。...要回答您的問題,是的,我確實相信DataAdapter會盡快刷新結果流因為它檢測到錯誤(雖然不確定!)。...我也相信您在使用ADO命令和連接進行調用時也會遇到同樣的問題。

始終牢記這一點:如果可以預測某個過程(無論是SQL還是任何編程語言)中都可能發生錯誤,則不應讓該錯誤發生,而應在此處進行處理並使用返回參數來告知調用出問題的方法。

因此,我將您的SQL proc重寫為:1)將結果集存儲在表變量中2)捕獲錯誤3)將錯誤信息存儲在返回參數中4)回滾proc 5)從變量表生成結果集

然后,您將能夠從輸出參數中獲取一條錯誤消息和#號,再加上您的結果集。 但是同樣,包含錯誤的結果集應該足以讓您的調用方法檢測到發生了“ EXPECTED”錯誤。

我知道這不是一個完美的解決方案,但作為一個總體思路,它應該可以工作!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM