Por qué en ocasiones no se usa un datatable sino solo un data adapter ?...

103 views
Skip to first unread message

Vb Learner

unread,
Jul 23, 2012, 11:45:57 AM7/23/12
to vfp-a-c...@googlegroups.com
Veo este ejemplo de VB.NET y me surge la pregunta:


Las líneas que veo que ponen en el curso de la escuela en C# serían las equivalentes a estas en VB.NET

Imports System.Data.SqlClient

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgsHandles MyBase.Load
        Dim Connect As String = "Data Source=localhost;Integrated Security=True;Initial Catalog=Northwind;"
        Dim con As New SqlConnection(Connect)

        Dim SQL As String = "SELECT * FROM Products"
        Dim cmd As New SqlCommand(SQL, con)

        Dim adapter As New SqlDataAdapter(cmd)
        Dim dsNorthwind As New DataSet()

        con.Open()

        adapter.Fill(dsNorthwind, "Products")
        con.Close()
        gridDB.DataSource = dsNorthwind.Tables("Products")
    End Sub

Claro, que en C# en vez de Imports utilizamos Using.

Ese dataset que se declara en la línea:
Dim dsNorthwind As New DataSet()

Sería el equivalente a un datatable ?...

O por qué no se usó un datatable aquí ?...

Saludos!


Victor Espina

unread,
Jul 23, 2012, 4:49:35 PM7/23/12
to vfp-a-c...@googlegroups.com
Un DataSet es un conjunto de DataTables.  La razon de usar el DataAdapter es aprovechar su metodo Fill para llenar un DataSet con el resultado de un comando SELECT-SQL.  El DataAdapter es una clase que facilita las labores de acceso y actualizacion de datos.  

Un uso muy comun, tal como muestras en el ejemplo, es usarlo para ejecutar un SELECT y almacenar el resultado en un DataSet. Cuando usamos una instruccion SELECT no tiene mucho sentido el DataSet pues el mismo solo contendra un DataTable; pero cuando usamos el DataAdapter para mandar a ejecutar un StoredProcedure, este puede devolver VARIOS conjuntos de resultados, cada uno de los cuales se almacenaria como un DataTable independiente dentro del DataSet.

Saludos

Victor Espina

Fox Learner

unread,
Jul 23, 2012, 5:02:00 PM7/23/12
to vfp-a-c...@googlegroups.com
Excelente la explicación maestro Victor!

Entonces, deduzco que habría que hacer algo para cachar todos esos resultados, como generar varios datatables en base al numero de resultados.

Saludos!

Victor Espina

unread,
Jul 23, 2012, 6:52:09 PM7/23/12
to vfp-a-c...@googlegroups.com
Realmente, no es necesario. Supongamos que invocas un storedProcedure que devuelve 3 conjuntos de resultados, los cuales se almacenan en un DataSet llamado dsResult.  Puedes acceder a cada uno de los resultados de esta forma:

dsResult.Tables[0]
dsResult.Tables[1]
dsResult.Tables[2]

Ahora, es buena idea asignarle un nombre a dichos resultados para poder referirte a ellos independientemente de la posicion que ocupan dentro del DataSet (ya que esto podria cambiar en el futuro).  Esto se puede hacer usando la propiedad TableName:

dsResult.Tables[0].TableName:="Clientes";
dsResult.Tables[1].TableName:="Proveedores";
dsResult.Tables[2].TableName:="Articulos";

Si se trata de muchas tablas, se puede ahorrar algo de codigo usando un array de nombres:

string[] tablas = new string[3]  {"Clientes","Proveedores","Articulos"};
for (int i = 0; i< 3; i++) {
  dsResult.Tables[i].TableName:=tablas[i];
}

Saludos

Victor Espina

Fox Learner

unread,
Jul 24, 2012, 9:40:26 AM7/24/12
to vfp-a-c...@googlegroups.com
Perfecto maestro Victor! Con eso ya estamos del otro lado. Saludos!
Reply all
Reply to author
Forward
0 new messages