2

在我的 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

我做错了什么吗?

4

2 回答 2

0

我刚刚尝试了以下代码:

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

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

于 2015-06-25T17:54:02.663 回答
0

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

于 2017-10-27T17:18:46.563 回答