2013-07-09 37 views
2

我正在使用sql server,有時我的數據庫出現故障以進行維護。我有錯誤處理代碼,所以用戶看不到錯誤頁面,而是看到一個友好的錯誤消息。我的問題是:數據庫關閉時,頁面加載並顯示錯誤消息花費很長時間。我認爲它有一些東西需要與超時屬性,但使用如何超時「與SQL Server建立連接時發生網絡相關或特定於實例的錯誤」錯誤

command.CommandTimeout = 5; 

在web.config中connectionStringConnect Timeout=5;似乎並沒有幫助改變它,它仍然需要很長的時間加載頁面(大約40秒)。有沒有辦法縮短這個時間?

獲取引發和記錄的例外是

A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: TCP Provider, error: 0 - A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.)

+0

最小化哪個時間?連接嘗試失敗或連接嘗試失敗所需的時間更快? –

+1

代碼拋出異常的時間。 – user1

+0

當存儲的proc調用行被命中時,需要大約35-40秒纔會拋出異常。 – user1

回答

0

那麼好。

我會爲你所有的「數據訪問層」類創建一個基類。

public class DataBaseLayer() 
{ 

public DataBaseLayer() 
{ /* check for appSetting here and throw a SqlServerMaintenanceModeException exception (custom exception) */} 

} 


public class EmployeeDataLayer : DataBaseLayer() 
    { 
public EmployeeDataLayer() : base() 
} 

在構造函數中,我會檢查的appSetting ......爲 「真」 或 「假」 .........並拋出一個CustomException

public class SqlServerMaintenanceModeException : ApplicationException 

{}

把它扔到DataBaseLayer的構造函數中......然後讓其他東西處理它。

這樣......只有「數據庫驅動」頁面受到影響。

小的原因,我不喜歡檢查「超時」是的..

  1. 它是一點點難以預測。
  2. 有時候,這是一個正常的例外.............就像網絡上的交換機一樣。你會如何分辨?

我很不喜歡模棱兩可的例外。

+0

我不知道我是否沒有得到你的解決方案,或者你不明白我的問題,但怎麼做這有助於數據庫驅動頁面加載速度更快? – user1

0

如果您的服務器連接超時的時間太長,請檢查:

  • 類型的連接字符串(.NET提供,OLEDB或其他方式)的,他們可能有不同的名稱相同的事情
  • 如果你真的使用有問題的連接字符串;你可能實際上使用完全不同的連接字符串
  • 隔離你的try/catch超時塊來包裝conn.Open() - 這樣你就知道打開連接需要很長時間;我並不是說你的例外不是指示性的,只是我不能100%確定所有的時間都花在conn上。打開()
+0

因爲我只有一個數據庫,所以我確信我沒有使用不同的連接字符串,因爲我總是使用'ConfigurationManager'類來取出連接字符串,所以我肯定我沒有使用不同的連接字符串。我使用了斷點,並且看到它只是conn.open(),它佔用了大部分時間。所以這就排除了你的第二和第三個要點。但不知道如何檢查連接字符串的類型。你能解釋一下嗎? – user1

相關問題