Кодсмит: Ошибка в *. Пример: System.InvalidOpException: ExecuteReader требует открытого и доступного Con. Текущее состояние con закрыто (C #, SQL) - PullRequest
0 голосов
/ 05 июля 2018

Я использую Codesmith для подключения к базе данных, время от времени выдает следующее исключение. Также в этом классе есть синглтон

То, что я полагаю, это то, что codemith автоматически открывает и закрывает соединение с базой данных.

Ошибка в *. Пример: System.InvalidOperationException: ExecuteReader требуется открытое и доступное соединение. Ток соединения состояние закрыто. в System.Data.SqlClient.SqlCommand.ValidateCommand (метод String, Логическое асинхронное) в System.Data.SqlClient.SqlCommand.RunExecuteReader (CommandBehavior cmdBehavior, RunBehavior runBehavior, логическое returnStream, строка метод, завершение TaskCompletionSource 1, время ожидания Int32, Task & task, Boolean & usedCache, Boolean asyncWrite, Boolean inRetry) в System.Data.SqlClient.SqlCommand.RunExecuteReader (CommandBehavior cmdBehavior, RunBehavior runBehavior, логическое returnStream, строка метод) в System.Data.SqlClient.SqlCommand.ExecuteReader (CommandBehavior поведение, метод String) в System.Data.Linq.SqlClient.SqlProvider.Execute (запрос выражения, QueryInfo queryInfo, IObjectReaderFactory factory, Object [] parentArgs, Object [] userArgs, ICompiledSubQuery [] subQueries, Object lastResult) в System.Data.Linq.SqlClient.SqlProvider.ExecuteAll (запрос выражения, QueryInfo [] queryInfos, фабрика IObjectReaderFactory, Object [] userArguments, ICompiledSubQuery [] subQueries) в System.Data.Linq.SqlClient.SqlProvider.CompiledQuery.Execute (IProvider провайдер, Object [] arguments) в System.Data.Linq.CommonDataServices.DeferredSourceFactory 1.ExecuteKeyQuery (Object [] keyValues) в System.Data.Linq.CommonDataServices.DeferredSourceFactory 1.Execute (Object экземпляр) в System.Linq.Enumerable.SingleOrDefault [TSource] (источник IEnumerable 1) в System.Data.Linq.EntityRef`1.get_Entity () в Datacontext.Data.DataSource.get_Delimiter () в C: * \ DataSource.Generated.cs: строка 407 в Datacontext.Data.Managers.DBManager.GetDelimiterOfAnalyser () в C: * \ DBManager.cs: строка 537

Код:

/// <summary>
        /// Returns DelimiterOfAnalyser
        /// </summary>
        /// <returns></returns>
        public Dictionary<string, string> GetDelimiterOfAnalyser()
        {
            Dictionary<string, string> delimiters = new Dictionary<string, string>();
            try
            {
                foreach (var delimiter in dataContext.DataSource.Where(a => a.TypeId == 1).ToList())
                {
                    if (!delimiters.ContainsKey(delimiter.Name))
                    {
                        delimiters.Add(delimiter.Name, delimiter.Delimiter.Value);
                    }
                }
            }
            catch (Exception ex)
            {
                logger.Error("Error in GetDelimiterOfAnalyser. Ex: " + ex);
            }
            return delimiters;
        }




public static DBManager GetInstance()
        {
            try
            {
                if (dbMgr == null)
                {
                    dbMgr = new DBManager();
                }
                dataContext = new DataContext();
            }
            catch (Exception ex)
            {
                logger.Error(ex);
            }

            return dbMgr;
        }
...