我繼承了與做DB以下的操作方式散落數百次相當大的C#代碼庫:乾淨的方法來重試失敗System.Data.SqlClient的操作
using (SqlConnection connection = new SqlConnection(connectionString)) {
SqlCommand command = new SqlCommand(queryString, connection);
command.Connection.Open();
command.ExecuteNonQuery();
}
然而,由於外界因素我的控制,數據庫服務器非常殘酷,特別容易出現故障,所以這些查詢中很大一部分失敗。鑑於這種訪問數據庫的特殊方式遍佈在代碼中,我怎樣才能在一個地方編碼重試,並且在任何地方都可以使用SqlCommand
?
的幾點思考:
- 我試圖重寫
SqlConnection
/SqlCommand
ExecuteNonQuery
這樣我就可以創建一個包裝版本。不好。SqlConnection
和SqlCommand
是密封的C#對象。 - 我可以創建一個名爲
MySqlConnection
的容器類,其中包含一個.NETSqlConnection
對象,然後創建我自己的ExecuteNonQuery
,然後再重試SqlCommand.ExecuteNonQuery()
幾次。然而,這是不好的,因爲我將不得不實施每一個SqlCommand
函數並且訓練其他人直接使用我的包裝類而不是SqlCommand
。不幸的是,用戶教育在這種情況下不是可接受的解決方案。我與其他被外包的開發人員卡住,經常有人離職,並且不會聽我的請求使用新的SQL類。 - 正如我之前提到的,我只是無法訪問(政治和技術上)使用數據庫層。這個問題的根本原因只是一個糟糕的SQL服務器設置,但我無法解決這個級別的問題。
我還有其他的選擇嗎?
順便說一句,你還需要在你的'SqlCommand'周圍使用''。此外,FYI,'SqlClient'與C#無關 - 它是.NET的一部分。 – 2010-10-06 21:22:36
實際上並不需要處理SqlCommand。它來自IDisposable的唯一原因是因爲它來自Componant。 Dispose for Componant的功能是從其父站點中刪除組件。所有這一切都是爲了*將n下的所有東西拖放到Form *人羣(即VB類型)上。 – Tergiver 2010-10-06 23:04:50