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