C#的Web服务和静态DB连接

如果我箱子一个static DB ConnectionC# Web serviceC#的Web服务和静态DB连接

连接的此实例上的Web服务的所有istance共享?那么,这样我可以解决一些问题吗?

不允许改变 '的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
与此相反,迟早会出现问题。
Connection Pooling机制已被研究。
池将帮助你避免这种不良习惯,以保持一个对象这么贵像一个数据库连接打开不可预见的时间

public static OleDbConnection GetDatabaseConnection(string aConnectionString) 

{

OleDbConnection odb = new OleDbConnection(aConnectionString);

odb.Open();

Log.Logger.log("Aperta connessione al DB");

return odb;

}

那么你的客户端代码中使用using statement关闭和破坏连接

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;

}

以上是 C#的Web服务和静态DB连接 的全部内容, 来源链接: utcz.com/qa/261477.html

回到顶部