DbProviderFactories
Одна из больших новых особенностей ADO.NET 2.0 это использование отражения как средства экземплирования поставщиков БД программно. Информация, используемая .NET, чтобы перечислить доступных провайдеров данных в системе относительно проста. Это просто смотрит в machine.config и в вашем собственном файле app.config некоторые данные XML, чтобы сказать, какие поставщики устанавливаются и в каких assemblies те поставщики находятся.
Сценарий 1: Независимая версия (не использует Global Assembly Cache)
Этот метод позволяет вам пропускать любую новую версию System.Data.SQLite.DLL в папку вашего приложения и использовать без любых кодовых модификаций или перекомпилирования. Добавьте следующий код к своему файлу app.config:
<configuration> <system.data> <DbProviderFactories> <remove invariant="System.Data.SQLite"/> <add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".NET Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" /> </DbProviderFactories> </system.data> </configuration>
Сценарий 2: Зависит от версии, используя DLL, расположенный в той же самой папке, где приложение, или Global Assembly Cache
Этот метод подробно останавливается на вышеупомянутом XML, чтобы обеспечить номер версии и ключевой символ SQLite DLL, таким образом, это может находиться в той же самой папке, как приложение, или в GAC. Оборотная сторона в том, что DbProviderFactories будет использовать эту информацию о версии, чтобы загрузить только определенную версию. Это означает, что если вы обновляете DLL, необходимо также обновить этот XML.
<configuration> <system.data> <DbProviderFactories> <remove invariant="System.Data.SQLite"/> <add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".NET Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite, Version=1.0.118.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139"/> </DbProviderFactories> </system.data> </configuration>
Следующий код C# демонстрирует SQLite через DbProviderFactories:
DbProviderFactory fact = DbProviderFactories.GetFactory("System.Data.SQLite"); using (DbConnection cnn = fact.CreateConnection()) { cnn.ConnectionString = "Data Source=test.db3"; cnn.Open(); }