Obtención de un SqlClientFactory
Se aplica a: .NET Framework .NET .NET Standard
El proceso de obtención de DbProviderFactory implica pasar información sobre un proveedor de datos a la clase DbProviderFactories. En función de esta información, el método GetFactory crea un generador del proveedor fuertemente tipado. Por ejemplo, para crear un SqlClientFactory, puede pasar GetFactory
una cadena con el nombre de proveedor especificado como "Microsoft.Data.SqlClient".
La otra sobrecarga de GetFactory
toma DataRow. Una vez creado el generador del proveedor, se pueden utilizar sus métodos para crear objetos adicionales. Entre los métodos de SqlClientFactory
se incluyen CreateConnection, CreateCommand y CreateDataAdapter.
Register SqlClientFactory
Para recuperar el objeto SqlClientFactory por la clase DbProviderFactories en .NET Framework, es necesario registrarlo en un archivo App.config o web.config. El siguiente fragmento del archivo de configuración muestra la sintaxis y formato de Microsoft.Data.SqlClient.
<system.data>
<DbProviderFactories>
<add name="Microsoft SqlClient Data Provider"
invariant="Microsoft.Data.SqlClient"
description="Microsoft SqlClient Data Provider for SQL Server"
type="Microsoft.Data.SqlClient.SqlClientFactory, Microsoft.Data.SqlClient, Version=2.0.20168.4, Culture=neutral, PublicKeyToken=23ec7fc2d6eaa4a5"/>
</DbProviderFactories>
</system.data>
El atributo invariant identifica el proveedor de datos subyacente. Esta sintaxis de nomenclatura en tres partes también se utiliza al crear un nuevo generador y para identificar al proveedor en un archivo de configuración de la aplicación, de manera que el nombre de proveedor, junto con sus cadenas de conexión asociadas, se puedan recuperar en tiempo de conexión.
Nota
En .NET Core, dado que no hay compatibilidad de configuración global o GAC, el objeto SqlClientFactory se debe registrar llamando al método RegisterFactory en el proyecto.
En el ejemplo siguiente se muestra cómo usar SqlClientFactory en una aplicación .NET Core.
private static DbProviderFactory GetFactory()
{
// register SqlClientFactory in provider factories
DbProviderFactories.RegisterFactory("Microsoft.Data.SqlClient", SqlClientFactory.Instance);
return DbProviderFactories.GetFactory("Microsoft.Data.SqlClient");
}