C#的Web服务和静态DB连接
如果我箱子一个static DB Connection
为C# Web service
C#的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