Codesmith:在*中出错。Ex:System.InvalidopeException:ExecuteReader需要一个开放且可用的Con。con';s的当前状态为关闭(C#,SQL)

Codesmith:在*中出错。Ex:System.InvalidopeException:ExecuteReader需要一个开放且可用的Con。con';s的当前状态为关闭(C#,SQL),c#,sql,.net,sql-server,codesmith,C#,Sql,.net,Sql Server,Codesmith,我使用Codesmith进行数据库连接,它时不时抛出下面的异常。这个班也有单身汉 我假设codesmith会自动打开和关闭与数据库的连接 *中的错误。Ex:System.InvalidOperationException:ExecuteReader 需要开放且可用的连接。连接的电流 该州已关闭。在 System.Data.SqlClient.SqlCommand.ValidateCommand(字符串方法, 布尔异步)at System.Data.SqlClient.SqlCommand.Run

我使用Codesmith进行数据库连接,它时不时抛出下面的异常。这个班也有单身汉

我假设codesmith会自动打开和关闭与数据库的连接

*中的错误。Ex:System.InvalidOperationException:ExecuteReader 需要开放且可用的连接。连接的电流 该州已关闭。在 System.Data.SqlClient.SqlCommand.ValidateCommand(字符串方法, 布尔异步)at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior、RunBehavior、布尔返回流、字符串 方法,TaskCompletionSource 1完成,Int32超时,任务和任务, Boolean&在 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior、RunBehavior、布尔返回流、字符串 方法)在 System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior 行为,字符串方法)在 System.Data.Linq.SqlClient.SqlProvider.Execute(表达式查询, QueryInfo QueryInfo,IObjectReaderFactory工厂,对象[] parentArgs,对象[]用户Args,ICompiledSubQuery[]子查询,对象 最后结果)在 System.Data.Linq.SqlClient.SqlProvider.ExecuteAll(表达式查询, QueryInfo[]QueryInfo,IObjectReaderFactory工厂,对象[] userArguments,ICompiledSubQuery[]子查询)位于 System.Data.Linq.SqlClient.SqlProvider.CompiledQuery.Execute(IProvider 提供程序,对象[]参数)位于 System.Data.Linq.CommonDataServices.DeferredSourceFactory 1.ExecuteKeyQuery(对象[]) 关键字值)在 System.Data.Linq.CommonDataServices.DeferredSourceFactory 1.Execute(对象 (例如)在 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.getDelimiteRofAnalyzer() C:*\DBManager.cs:第537行

代码:

//
///返回分隔符分析器
/// 
/// 
公共字典getDelimiteRofAnalyzer()
{
字典分隔符=新字典();
尝试
{
foreach(dataContext.DataSource.Where(a=>a.TypeId==1.ToList()中的var分隔符)
{
if(!delimiters.ContainsKey(delimiter.Name))
{
delimiters.Add(delimiter.Name、delimiter.delimiter.Value);
}
}
}
捕获(例外情况除外)
{
logger.Error(“getAnalyzer.Ex中的错误:“+Ex”);
}
返回分隔符;
}
公共静态DBManager GetInstance()
{
尝试
{
if(dbMgr==null)
{
dbMgr=新的DBManager();
}
dataContext=新的dataContext();
}
捕获(例外情况除外)
{
记录器错误(ex);
}
返回dbMgr;
}

错误非常具体。看来你的假设是错误的。有没有密码匠可以避免这种情况?
/// <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;
        }