2012-05-10 23 views
0

我有一個問題,這不是問題。 我的數據庫有一些限制,如唯一的名稱(列存儲的東西,必須是唯一的名稱) 當插入或更新,數據庫驗證,如果我們不重寫一些名稱,如果是,則返回一個錯誤,是可轉換與代碼2627SqlException ErrorCodes

我的問題的SQLException ...如果存在一些表或東西,我可以諮詢以指示最終用戶做什麼?

在這種情況下..這存在具有相同名稱的用戶....

回答

0

注意假設某個錯誤代碼指的是特定的事物。

select * from master.dbo.sysmessages where description like '%timeout%' 

這會給你:

規定的超時值無效。超時值必須是0到2147483647之間的有效整數。1033

等待鎖定時發生超時:class'%ls',id%p,type%d,Task 0x%p:%d,waittime%d seconds,標誌0x%I64x,擁有任務0x%p。繼續等待。 1033

通信到遠程服務器實例「%1!」失敗,其超時前完成。 ALTER DATABASE命令可能尚未完成。重試該命令。 1033

數據庫鏡像超時值%d超過最大值32767 1033 元數據的高速緩存條目%d:在數據庫ID(%d)%d不檢查由於鎖定超時的一致性。 1033

標記的事務「%。* ls」失敗。試圖通過提交標記的事務在日誌中放置標記時發生超時。這可以通過與爭Microsoft分佈式事務處理協調器(MS DTC)事務或引起其他1033

的SQL Server目標的大容量插入操作已經超時。請考慮增加數據流中SQL Server目標上Timeout屬性的值。 1033級

...和許多許多的錯誤在所有的語言。

所以你可能會認爲'1033意味着超時'。不幸的是,這不是真的:

select description from master.dbo.sysmessages where msglangid=1033 

警告:致命錯誤%d發生在%S_DATE。記下錯誤和時間,並聯系您的系統管理員。

Waitfor中不允許查詢。

「%。* ls」附近的語法不正確。

的%S_MSG是開頭「%1!」太長。最大長度是%d。 如果語句包含UNION,INTERSECT或EXCEPT運算符,那麼ORDER BY項目必須出現在選擇列表中。

ORDER BY位置編號%ld超出了選擇列表中項目數的範圍。

和許多更多的非超時相關的錯誤。

所以我堅持用:

IsSqlTimeout = ((ex as SqlException).Message.ToUpper().Contains("TIMEOUT"); 

所以真正回答你的問題 - 這取決於你的用戶實際上能夠理解還是應該被告知。

我建議你在一段時間內記錄所有的錯誤,將他們分組,看看哪些是最常見的,並逐一處理。