我在一個很長的運行服務中有一個非常小的數據抽象類。它是一個靜態類,作爲一個跨類實用程序被稱爲無狀態(就像DataTable someResults = Data.SelectFooFromBar()
) - 我不想在幾個離散和無關的類中實例化它。該服務在出現時會提供Data.Initialize(connectionString)
。該Initialize
樣子:長時間維護.NET OdbcConnection對象
private static string connectionString;
private static OdbcConnection connection;
public static void Initialize(string mySqlConnectionString)
{
/*mySqlConnectionString would look something like this:
"Provider=MSDASQL;
Driver={MySQL ODBC 3.51 Driver};
UID=some_db_user;
PWD=some_db_pass;
Server=db-host;
Port=3306;
Database=some_db;
Protocol=TCP;
Compress=false;
Pooling=true;
Min Pool Size=0;
Max Pool Size=100;
Connection Lifetime=0;
OPTION=16386;"*/
//Ensure only one connection exists to prevent leaks, and also
// only modify the connection if the connection string has changed:
if (connection == null || connectionString != mySqlConnectionString)
{
connectionString = mySqlConnectionString;
connection = new OdbcConnection(connectionString);
}
}
這裏是實際進行消毒和執行查詢面向公衆的方法所使用的方法:
private static DataTable Select(string query)
{
try
{
query = Sanitize(query);
connection.Open();
DataTable dt = new DataTable();
OdbcDataAdapter da = new OdbcDataAdapter(query, connection);
da.Fill(dt);
connection.Close();
return dt;
}
catch (Exception ex)
{
connection.Close();
ExceptionHandler(ex, query);
return null;
}
}
最後一個實際的面向公衆的數據的方法:
public static DataTable SelectFooFromBar()
{
return Select("SELECT foo FROM bar");
}
我的問題是確保我的connection
對象總是好的最好方法是什麼?
- 是否有可以處理的事件或連接不良時發生了什麼?
- 每次查詢運行時打開/關閉
connection
對象也有好還是壞的? 我應該有多個
catches
,所以我可以說,做一個connection.Close()
就當它是一個查詢級別的錯誤移動,但到connection = new OdbcConnection(connectionString)
時,我異常指示給我,我是斷開的(不知道這是哪個異常)它離開它似乎不好打開所有的時間,但我想獲得第二個意見。
使用'using'語句。 – SLaks
進行靜態連接是一個非常糟糕的主意。 – SLaks
使用參數。 – SLaks