(*) Este post es bastante antiguo y lo tenía publicado en otro blog que ya no existe, pero como veo que es un tema recurrente en los foros de MSDN he decidido publicarlo de nuevo.
A petición del inefable Juansa, vamos a ver cómo funciona el modelo de proveedores de ADO.NET 2.0.
Estre modelo es ideal para todas aquellas aplicaciones que deben utilizar distintos proveedores de datos (Access, SQL Server, Oracle), ya que disponen de unas factorías de objetos que proporcionan un nivel de abstracción. Por ejemplo, si deseamos usar el proveedor de SQL Server ya no es necesario usar las clases conexión, comando, etc. que hay dentro del namespace System.Data.SqlClient, ahora podemos crear una factoría basada en SQL Server y pedirle que nos cree una clase de tipo connection, comando, etc.
De este modo, si deseamos cambiar el proveedor de datos basta con cambiar el string del nombre del proveedor y la cadena de conexión. Para muestra un botón:
Private Sub TestFactoryProviders()
Dim ProviderName As String = "System.Data.SqlClient"
Dim CnnStr As String = "Data Source=TU_SERVIDOR_SQL;" + _
"Initial Catalog=TU_BD;" + _
"Integrated Security=True"
Dim SQLStr As String = "SELECT * FROM TU_TABLA"
'Crea la factoria en base al proveedor especificado
Dim Factory As DbProviderFactory = DbProviderFactories.GetFactory(ProviderName)
'Crea la conexión del tipo apropiado (según proveedor)
Dim Con As DbConnection = Factory.CreateConnection()
Using Con
'Asigna la cadena de conexión
Con.ConnectionString = CnnStr
Con.Open()
'Crea un command del tipo apropiado (según proveedor)
Dim Cmd As DbCommand = Con.CreateCommand()
Using Cmd
Cmd.CommandType = CommandType.Text
Cmd.CommandText = SQLStr
'Crea un DataTable y lo llena a partir del
'DataReader que devuelve el comando
Dim dt As DataTable = New DataTable("dt1")
dt.Load(Cmd.ExecuteReader())
For Each row As DataRow In dt.Rows
'Haz lo que quieras con los datos... :-P
Next
End Using
Con.Close()
End Using
End Sub
Según el ejemplo, cambiando los valores de las dos primeras variables podemos utilizar cualquier origen de datos de forma indistinta.
Happy coding!
** crossposting desde el blog de Lluís Franco en geeks.ms **