c# web服务和静态数据库连接



如果我将static DB Connection放入C# Web service

此连接实例在web服务的所有实例上共享?那么,这样我就有问题了吗?

不允许更改'ConnectionString'属性连接(状态=连接)

我是这样得到实例的:

  public static OleDbConnection GetDatabaseConnection(string aConnectionString) 
  {
   if (_dbConnection == null) 
   {
    _dbConnection = new OleDbConnection(aConnectionString);
    _dbConnection.Open();
   }
   else 
   {
    _dbConnection.Close();
    _dbConnection = new OleDbConnection(aConnectionString);
    _dbConnection.Open();
   }
   Log.Logger.log("Aperta connessione al DB");
   return _dbConnection;
  }

保持一个全局连接实例总是一个不好的做法。您应该遵循标准模式:create, open, use, close and destroy
违背这一点迟早会导致问题。
连接池机制就是为此研究的。
Pool将帮助您避免这种坏习惯,即使对象(如数据库连接)在不可预见的时间内保持打开状态。

public static OleDbConnection GetDatabaseConnection(string aConnectionString) 
{
    OleDbConnection odb = new OleDbConnection(aConnectionString);
    odb.Open();
    Log.Logger.log("Aperta connessione al DB");
    return odb;
}

那么你的客户端代码使用using语句来关闭和销毁连接

using(OleDbConnection cn = SqlClassHelper.GetDatabaseConnection(constring))
{
    // define here your OleDbCommand, OleDbDataReader etc...
    // use the objects
} // <- here the closing brace close and destroy the connection

是的,你的代码在多线程web服务中会遇到问题。

你的函数GetDatabaseConnection像一个工厂一样工作,每个调用它的人都得到一个新的连接实例。您不需要静态_dbConnection类成员,只需将其设置为局部变量:

  public static OleDbConnection GetDatabaseConnection(string aConnectionString) 
  {
    OleDbConnection _dbConnection  = new OleDbConnection(aConnectionString);
    _dbConnection.Open();
    Log.Logger.log("Aperta connessione al DB");
    return _dbConnection;
  }

相关内容

  • 没有找到相关文章

最新更新