2012-06-26 2 views
1

Мое приложение работает с IBM DB2 через своего поставщика .net (FP5). Когда я оставил заявку в течение длительного времени, и после этого попытаться получить что-нибудь от database- я получаю следующее сообщение об ошибке:IBM.Data.DB2.DB2Exception: ERROR [08001] [IBM] SQL30081N Обнаружена ошибка связи.

---> IBM.Data.DB2.DB2Exception: ERROR [08001] [IBM] SQL30081N A communication error has been detected. Communication protocol being used: "TCP/IP". Communication API being used: "SOCKETS". Location where the error was detected: "SERVER_IP". Communication function detecting the error: "recv". Protocol specific error code(s): "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; 
      } 
     } 

так что я думаю, что со следующими строками я всегда подключаюсь, если соединение было прекращено.
Может возникнуть проблема с пулом или продолжительностью подключения? ..

ответ

2

Эта ошибка обычно означает, что ваше соединение было убито администратором баз данных, или что произошла ошибка сети, которая нарушила соединение с вашим приложением.

Если вы получили эту ошибку, просто подключитесь к базе данных.

+0

Но как подключиться? .. Если я позвоню с помощью (EEntities db = EntitiesFactory.CreateEEntity()), разве это не значит, что он повторно подключается? – 0x49D1

+0

Казалось бы, кто-то EntitesFactory создает объект EntityConnection - вы можете проверить свойство State для этого объекта, чтобы увидеть, все ли соединение открыто, и при необходимости вызвать метод Open для повторного подключения. –

+0

Хорошо, я попробую, спасибо. – 0x49D1

Смежные вопросы