繁体   English   中英

C#Web服务和静态数据库连接

[英]C# web service and static DB Connection

如果我将static DB ConnectionC# 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
迟早这样做会导致问题。
为此已研究了连接池机制。
池将帮助您避免这种不良习惯,使一个对象如此昂贵,例如在无法预料的时间内打开数据库连接

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;
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM