我的应用程序通过他们的 .net 提供程序 (FP5) 与 IBM DB2 一起工作。当我离开应用程序很长一段时间后,尝试从数据库中获取任何东西 - 我收到以下错误:
---> IBM.Data.DB2.DB2Exception: ERROR [08001] [IBM] SQL30081N 检测到通信错误。正在使用的通信协议:“TCP/IP”。正在使用的通信 API:“SOCKETS”。检测到错误的位置:“SERVER_IP”。检测错误的通信功能:“recv”。协议特定错误代码:“10054”、“*”、“0”。SQLSTATE=08001
我使用实体框架与数据库进行通信,在崩溃操作之前我总是有以下代码:
using (EEntities db = EntitiesFactory.CreateEEntity())
{
// ..some operations
}
在哪里:
public static EEntities CreateEEntity()
{
if (!string.IsNullOrEmpty(GlobalCommon.DBConnectionString))
return CreateEEntity(GlobalCommon.DBConnectionString);
return new EEntities();
}
public static EEntities CreateEEntity(string connectionString)
{
return new EEntities(connectionString);
}
和:
public static string DBConnectionString
{
get
{
if (!string.IsNullOrWhiteSpace(_DBConnectionString))
return _DBConnectionString;
string providerConnectionString = "Database=" +
Settings.Default.DBDatabase + ";User ID=" +
DBUserID + ";Password=" +
DBPassword + ";Server=" +
DBServer + ";Max Pool Size=150;Min Pool Size=15;Connection Lifetime=80;Pooling=true;";
// Initialize the EntityConnectionStringBuilder.
EntityConnectionStringBuilder entityBuilder =
new EntityConnectionStringBuilder();
//Set the provider name.
entityBuilder.Provider = "IBM.Data.DB2";
// Set the provider-specific connection string.
entityBuilder.ProviderConnectionString = providerConnectionString;
// Set the Metadata location.
entityBuilder.Metadata = @"res://*/DAL.DBModel.csdl|
res://*/DAL.DBModel.ssdl|
res://*/DAL.DBModel.msl";
_DBConnectionString = entityBuilder.ToString();
return _DBConnectionString;
}
set
{
_DBConnectionString = value;
}
}
所以我认为如果连接终止,我总是会重新连接。
池化或连接生存期会不会有问题?...