2

私のアプリケーションは、.netプロバイダー(FP5)を介してIBMDB2で動作します。アプリケーションを長期間離れた後、データベースから何かを取得しようとすると、次のエラーが発生します。

---> 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;
            }
        }

次の行で、接続が終了した場合は常に再接続すると思います。
プーリングまたは接続の有効期間に問題がありますか?..

4

1 に答える 1

2

このエラーは通常、接続がDBAによって切断されたか、アプリケーションからの接続を切断したネットワークブリップがあったことを意味します。

このエラーが発生した場合は、データベースに再接続してください。

于 2012-06-26T21:25:05.847 に答える