Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#web服务和静态数据库连接_C#_Web Services_Oracle_Oledbconnection - Fatal编程技术网

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

C#web服务和静态数据库连接,c#,web-services,oracle,oledbconnection,C#,Web Services,Oracle,Oledbconnection,如果我将静态数据库连接装入C#Web服务 此连接实例在所有远程web服务上共享?那么,这样的话,我会有一些问题吗 不允许更改“ConnectionString”属性,同时 连接(状态=连接) 我以这种方式获取实例: public static OleDbConnection GetDatabaseConnection(string aConnectionString) { if (_dbConnection == null) { _dbConnection = n

如果我将
静态数据库连接装入
C#Web服务

此连接实例在所有远程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;
  }

是的,您在多线程web服务中的代码将出现问题

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

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

是的,您在多线程web服务中的代码将出现问题

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

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

保持全局连接实例始终是一种不好的做法。您应该遵循标准模式:
创建、打开、使用、关闭和销毁

与此相反的工作迟早会导致问题。
正是为了这一点,我们对其机理进行了研究。
该池将帮助您避免这种坏习惯,即在不可预见的时间内保持像数据库连接这样的昂贵对象的打开状态

public static OleDbConnection GetDatabaseConnection(string aConnectionString) 
{
    OleDbConnection odb = new OleDbConnection(aConnectionString);
    odb.Open();
    Log.Logger.log("Aperta connessione al DB");
    return odb;
}
然后,您的客户端代码使用关闭和销毁连接

using(OleDbConnection cn = SqlClassHelper.GetDatabaseConnection(constring))
{

    // define here your OleDbCommand, OleDbDataReader etc...
    // use the objects

} // <- here the closing brace close and destroy the connection
使用(OleDbConnection cn=SqlClassHelper.GetDatabaseConnection(constring))
{
//在此定义您的OleDbCommand、OleDbDataReader等。。。
//使用对象

}//保持全局连接实例始终是一种不好的做法。您应该遵循标准模式:
创建、打开、使用、关闭和销毁

与此相反的工作迟早会导致问题。
正是为了这一点,我们对其机理进行了研究。
该池将帮助您避免这种坏习惯,即在不可预见的时间内保持像数据库连接这样的昂贵对象的打开状态

public static OleDbConnection GetDatabaseConnection(string aConnectionString) 
{
    OleDbConnection odb = new OleDbConnection(aConnectionString);
    odb.Open();
    Log.Logger.log("Aperta connessione al DB");
    return odb;
}
然后,您的客户端代码使用关闭和销毁连接

using(OleDbConnection cn = SqlClassHelper.GetDatabaseConnection(constring))
{

    // define here your OleDbCommand, OleDbDataReader etc...
    // use the objects

} // <- here the closing brace close and destroy the connection
使用(OleDbConnection cn=SqlClassHelper.GetDatabaseConnection(constring))
{
//在此定义您的OleDbCommand、OleDbDataReader等。。。
//使用对象

}//哪一行引发此异常。顺便问一下:如果发生两个并发服务调用怎么办?当其中一个执行一些db操作时,另一个请求似乎将关闭其连接。哪一行引发此异常。顺便问一下:如果发生两个并发服务调用怎么办?当其中一个执行一些db操作时,另一个请求似乎将关闭其连接。