2015-06-25 4 views
1

В моем приложении C#, у меня есть примерно следующий код:Не понимаю, почему DbProviderFactories.GetFactory возвращается NULL

В 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.

Я делаю что-то совершенно неправильно?

ответ

0

Я просто попытался следующий код:

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

завод вернулся не нулевой. Есть что-то еще, так как этот код должен работать нормально.

+0

Я не уверен, что понимаю. Как я уже сказал в вопросе, строка подключения имеет имя поставщика 'providerName =" System.Data.Odbc "и эта строка может создать соединение (которое я может открыть/запросить) ... Я просто не могу использовать соединение, чтобы вернуть фабрику ... Вы говорите что-то другое? –

+0

Я обновил свой ответ. Я не знаю, какова ваша проблема на самом деле. Этот код работает отлично на моей машине. –

0

Я не знаю, помогает ли она, но я столкнулся с той же проблемой. Я попытался использовать OleDbConnection, чтобы получить завод без везения. Я использовал ту же базу данных, но через SqlConnection, и она работала нормально. Возможно, это связано с типом соединения, но документация не дает понимания об этом. Если DbProviderFactories.GetFactory не работает с некоторыми типами DbConnection, он должен по крайней мере вызвать исключение. Попробуйте перейти на другой тип подключения. Приветствия и удачи.

+0

Пожалуйста, сделайте комментарий, если у вас нет рабочего ответа. – Bobface