Firebird и Visual Studio 2010 Не удалось найти поставщика данных

У меня виндовс 7 64бит. Я пытаюсь использовать Firebird с VS 2010.

Я получаю следующую ошибку:

Не удалось найти или загрузить зарегистрированный поставщик данных .Net Framework.

Я сделал следующее

  1. Установлен "NETProvider-2.6.5.msi"
  2. Извлеченный "FirebirdDDEXProvider-2.0.5.zip"

Я скопировал .dll из zip-файла DDEX в каталог C:\Program Files (x86)\FirebirdClient, содержимое которого:

FirebirdSql.Data.FirebirdClient.dll
FirebirdSql.Data.UnitTests.dll
FirebirdSql.VisualStudio.DataTools.dll
FirebirdSql.VisualStudio.DataToolsUI.dll

Я отредактировал 2 reg-файла из DDEX, заменив «%path%» на «C:\Program Files (x86)\FirebirdClient».

Из каталога «C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools» я запустил Gacutil следующим образом.

cd "C:\Program Files (x86)\FirebirdClient"
"C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\NETFX 4.0 Tools\gacutil.exe" /i FirebirdSql.VisualStudio.DataTools.dll

"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\NETFX 4.0 Tools\gacutil.exe" /i FirebirdSql.Data.FirebirdClient.dll

Я не мог использовать другой Gacutil, так как он сказал, что он создан для предыдущей версии.

я тоже побежал

"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\NETFX 4.0 Tools\gacutil.exe" /l Firebirdsql.data.firebirdclient

Что дало мне:

The Global Assembly Cache contains the following assemblies:
Firebirdsql.data.firebirdclient, Version=2.6.5.0, Culture=neutral, PublicKeyToken=3750abcc3150b00c, processorArchitecture=MSIL

Из каталога C:\Windows\Microsoft.NET я изменил следующие 4 файла:

\Framework\v4.0.30319\Config\machine.config
\Framework\v2.0.50727\Config\machine.config

\Framework64\v2.0.50727\Config\machine.config
\Framework64\v4.0.30319\Config\machine.config

В каждый из этих файлов я добавил следующие 2 записи

<configuration>
    <configSections>
        <section name="FirebirdSql.Data.FirebirdClient" type="System.Data.Common.DbProviderConfigurationHandler, System.Data, Version=2.6.5.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
    </configSections>
</configuration>

<system.data>
    <DbProviderFactories>
       <add name="Firebird Client Data Provider" invariant="FirebirdSql.Data.FirebirdClient" description=".Net Framework Data Provider for Firebird" type="FirebirdSql.Data.FirebirdClient.FirebirdClientFactory, FirebirdSql.Data.FirebirdClient, Version=2.6.5.0, Culture=neutral, PublicKeyToken=3750abcc3150b00c" />
    </DbProviderFactories>
</system.data>

После всего этого я все еще не могу заставить firebird работать с Visual Studio. Я могу просматривать базу данных и таблицы из обозревателя серверов, однако я не могу добавить источник данных, на завершающем этапе выдает ошибку:

«Произошла ошибка при создании нового источника данных: не удалось получить информацию о типе для «WinFormsApp.DataSet1».

В качестве лучшего примера, используя DbProviderFactory, Firebird является 5-м индексом, я запускаю следующий код:

try
   {
      DataTable dt = DbProviderFactories.GetFactoryClasses();
      // Use this for loop to see what row holds FirebirdClient
      for (int i = 0; i < dt.Rows.Count; i++)
          Console.WriteLine("{0}: {1}", i.ToString(), dt.Rows[i][2].ToString());

      // For me, FirebirdClient is at row 5
      DbProviderFactory dataFactory = DbProviderFactories.GetFactory(dt.Rows[5]);

Появляется следующее исключение:

Не удалось найти или загрузить зарегистрированный поставщик данных .Net Framework.

Исключение:

System.Configuration.ConfigurationErrorsException was caught
  Message=Failed to find or load the registered .Net Framework Data Provider.
  Source=System.Data
  BareMessage=Failed to find or load the registered .Net Framework Data Provider.
  Line=0
  StackTrace:
       at System.Data.Common.DbProviderFactories.GetFactory(DataRow providerRow)
       at Forms.TestForm.TestConn() in C:\Data\Projects\Dev\FirebirdTest\Forms\TestForm.cs:line 113
  InnerException: null

Может ли кто-нибудь помочь.


person Craig    schedule 18.11.2011    source источник


Ответы (2)


Эта строка в machine.config:

<configSections>
    <section name="FirebirdSql.Data.FirebirdClient" type="System.Data.Common.DbProviderConfigurationHandler, System.Data, Version=2.6.5.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</configSections>

должно читаться так:

<configSections>
    <section name="firebirdsql.data.firebirdclient" type="System.Data.Common.DbProviderConfigurationHandler, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</configSections>

Обратите внимание, что версия отличается, предполагается, что это версия среды выполнения, а не версия клиента firebird. Также я считаю, что вам нужно отредактировать только 32-битную версию machine.config, поскольку VS — это 32-битное приложение.

person Farawin    schedule 21.11.2011
comment
Спасибо!!! Я долго искал ответ, и это сработало. Я считаю, что моя ошибка заключалась в неправильном прочтении инструкций по установке DDEX. Это работает для .NET 4.0, но, используя 3.5, я меняю версию среды выполнения на 2.0.0.0 в соответствии с инструкциями DDEX, и это все еще не работает, однако я думаю, что могу с этим смириться. - person Craig; 06.12.2011
comment
Клиент firebird будет работать только с .NET 4.0, это как-то связано с различными версиями GAC, так как я установил библиотеку firebird только в GAC .NET 4.0, а не в предыдущий GAC, что, кстати, я не могу' не запускается, что-то связанное с тем, что это предыдущая версия. - person Craig; 06.12.2011
comment
Насколько я знаю, версия 4.0 не будет работать в режиме 3.5, так как она скомпилирована в 4.0. Также я думаю, что для 3.5 вам следует использовать версию 3.5.0.0. Кстати, отметьте это как принятый ответ, если он решил вашу проблему. Спасибо. - person Farawin; 13.12.2011

Когда вы меняете %path%, вам нужно сделать это следующим образом:

C:\\Program Files (x86)\\FirebirdClient

person UltimateVenom    schedule 19.11.2011
comment
Я пробовал это, и это не решение. Я также посмотрел, как другие пути использовались в реестре, и все они используют одинарную обратную косую черту. Ваш вклад приветствуется. - person Craig; 19.11.2011
comment
Когда я устанавливаю Firebird в первый раз, это была моя проблема, когда я меняю сигле на двойную обратную косую черту, все работает: D - person UltimateVenom; 19.11.2011