【问题标题】:Don't understand why DbProviderFactories.GetFactory is returning NULL不明白为什么 DbProviderFactories.GetFactory 返回 NULL
【发布时间】:2015-09-12 11:02:20
【问题描述】:

在我的 C# 应用程序中,我大致有以下代码:

在 App.Config 中:

<connectionStrings>
  <add name="Con1" connectionString="..." providerName="System.Data.Odbc"/>
</connectionStrings>

在我的代码中:

static DbConnection createConnection(ConnectionStringSettings conn_str)
{
    DbProviderFactory factory = DbProviderFactories.GetFactory(conn_str.ProviderName);
    var retval = factory.CreateConnection();
    retval.ConnectionString = conn_str.ConnectionString;
    return retval;
}

这为我创建了一个连接变量 conn 并且效果很好(我可以打开连接、查询它等),所以我知道我引用了正确的库。

但是,以后,我需要再次获得工厂并使用:

DbProviderFactory factory = DbProviderFactories.GetFactory(conn);

但是,无论出于何种原因,我都收回了factory = null

我做错了什么吗?

【问题讨论】:

    标签: c# odbc dbproviderfactories


    【解决方案1】:

    我不知道它是否有帮助,但我一直面临同样的问题。我试图使用 OleDbConnection 来获得工厂,但没有成功。我使用了相同的数据库,但通过 SqlConnection 并且工作正常。也许它与连接的类型有关,但文档并没有提供有关这一点的见解。如果 DbProviderFactories.GetFactory 不适用于某些类型的 DbConnection,它至少应该抛出一个异常。尝试更改为另一种连接类型。问候和好运。

    【讨论】:

    • 如果您没有有效的答案,请发表评论。
    【解决方案2】:

    我刚刚尝试了以下代码:

    DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.Odbc");
    var retval = factory.CreateConnection();
    

    工厂返回不为空。因为这段代码应该可以正常工作,所以还有其他事情发生。

    【讨论】:

    • 我不确定我是否理解 - 正如我在问题中所述,连接字符串具有提供程序名称 providerName="System.Data.Odbc" 并且该字符串能够创建连接(我可以打开 /查询)...我只是无法使用连接来恢复工厂...您说的是不同的东西吗?
    • 我更新了我的答案。我不确定你现在的问题到底是什么。上面的代码在我的机器上运行良好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-18
    • 2023-03-15
    • 2023-02-05
    • 2016-12-28
    • 2011-09-14
    • 2019-06-21
    • 1970-01-01
    相关资源
    最近更新 更多