IBM.Data.DB2.DB2Exception:ERROR [08] [IBM] SQL30081N已检测到通信错误。

时间:2012-06-26 07:21:12

标签: .net connection db2

我的应用程序通过其.net提供程序(FP5)与IBM DB2一起使用。当我离开应用程序很长一段时间后,尝试从数据库获取任何东西 - 我得到以下错误:

  

---> IBM.Data.DB2.DB2Exception:ERROR [08] [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;
            }
        }

所以我认为如果连接被终止,我总是会重新连接 池化或连接生命周期是否有问题?..

1 个答案:

答案 0 :(得分:2)

此错误通常表示您的连接已被DBA终止,或者存在破坏应用程序连接的网络blip。

如果出现此错误,只需重新连接到数据库即可。