我在一个很长的运行服务中有一个非常小的数据抽象类。它是一个静态类,作为一个跨类实用程序被称为无状态(就像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