[英]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.