首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DbProviderFactories.GetFactory(providerClass)看不到仅安装的提供程序

DbProviderFactories.GetFactory(providerClass)看不到仅安装的提供程序
EN

Stack Overflow用户
提问于 2012-10-16 00:39:41
回答 1查看 616关注 0票数 0

如果我在我的应用程序运行时安装了一个提供者。然后调用DbProviderFactories.GetFactory(providerClass)查看是否安装了它,调用它时出现异常。但如果我退出我的应用程序并重新启动它,它就会看到它。

我必须调用什么才能让DbProviderFactories.GetFactory(providerClass)重新读取machine.config?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-16 00:39:41

提供程序信息在第一次使用时从静态数据表中读取,然后总是返回该值,直到应用程序重新启动,当然也会重新创建该数据表。

以下代码(首次发布于Windward Wrocks)将刷新内部缓存并强制重新读取:

代码语言:javascript
复制
/// <summary>
/// Force DbProviderFactories to re-read machine.config on the next call to
/// DbProviderFactories.GetFactoryClasses().
/// </summary>
static public void FlushDbProviderFactoriesCache()
{
  try
    {
    FieldInfo initStateFieldInfo = typeof(DbProviderFactories).GetField("_initState",
                                  BindingFlags.Static | BindingFlags.NonPublic);
    if (initStateFieldInfo != null)
      {
        ConnectionState state = ConnectionState.Closed;
        object initState = initStateFieldInfo.GetValue(state);
        if (initState is ConnectionState)
        {
          state = (ConnectionState)initState;
          if (state != ConnectionState.Closed)
            initStateFieldInfo.SetValue(state, ConnectionState.Closed);
          ConfigurationManager.RefreshSection("system.data");
        }
      }
    }
  catch (Exception)
    {
    // nada
    }
  }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12900107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档