簡體   English   中英

使用數據庫最佳實踐?

[英]working with database Best practise?

我有一個C#數據庫層,該層具有靜態讀取方法,該方法在后台計時器中每秒被調用一次。

目前,我曾經作為類成員創建SqlCommand,SqlConnection。

在每個方法調用中,我都會執行命令來獲取結果,這樣做是為了避免每秒創建連接和命令,但是我擔心這種方法會因異常而中斷連接或使對象處於無效狀態。

這是我當前的實現(計時器處理程序)

    static void GetBarTime(object state)
    {
        lock (_staticConnection)
        {
            SqlDataReader dataReader = null;
            try
            {
                dataReader = _getMaxTimeCommand.ExecuteReader();
                dataReader.Read();
                _currentTick = dataReader.GetInt32(0);
            }
            catch (Exception ex)
            {
                //Log the error
            }
            finally
            {
                dataReader.Dispose();
            }
        }
    }

最佳實踐是什么?

更多細節:

我在計時器中執行此操作,因為每秒都有另一個過程更新我的表,並且有另一組公開方法供客戶端使用,並每秒調用一次以獲取最新值。

因此,我不是在每個計時器中每秒執行一次select語句,而是在計時器中執行此操作,並更新客戶端使用的全局變量。

SqlConnection具有內置的池; 如果使用以下命令,您幾乎看不到任何區別:

using(SqlConnection conn = new SqlConnection(connectionString)) {
    conn.Open();
    // your code
}

每一次。 這樣就可以自動響應無效(底層)的連接。

目前,您有一個錯誤,順便說一句; 如果命令失敗,則讀取器仍為null ...在調用Dispose()之前檢查null是否:

if(dataReader !=null) {dataReader.Dispose();}

或僅使用using

 try
 {
     using(SqlDataReader dataReader = _getMaxTimeCommand.ExecuteReader())
     {
         dataReader.Read();
         _currentTick = dataReader.GetInt32(0);
     }
 }
 catch (Exception ex)
 {
    //Log the error
 }

要確定執行是否意味着該連接是死鴨,可能非常困難。 為了安全起見,您可以在遇到異常時關閉並重新打開SqlConnection和SqlCommand,以防萬一。 一切正常時,這不會造成任何開銷。

暫無
暫無

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

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