jueves, 29 de julio de 2010

[ADO.NET] Transacciones con DataSet

Una vez que en el artículo anterior se mostró cómo se pueden obtener datos a través de ADO.NET, ahora es momento de comprobar cómo se pueden realizar operaciones con dichos datos.

Es necesario recordar el trabajo que puede suponer el realizar operaciones con diferentes consultas, en especial si la cantidad de lógica de negocio a representar es bastante grande y/o compleja. A través de DataSet y con el DataGridView vamos a comprobar lo sencillo que puede resultar agregar, borrar y actualizar datos sin necesidad de escribir todo ese código.

En primer lugar, partiremos del artículo anterior y veamos qué nos puede ofrecer el DataGridView:

image

Disponemos de varias casillas para marcar, en la que habilitamos la adición, edición y actualización de las filas, además de  poder reordenarlas a nuestro gusto. Esto simplemente significa que podemos una vez obtenidos los datos, hacer clic en cualquier fila y comenzar a editarlos. Evidentemente se disponen de eventos adecuados y sería responsabilidad del diseñador administrar este tipo de permisos para evitar efectos indeseados. Pero por ahora, vayamos al código. Del mismo modo que en antes tuvimos que crear una función que obtenga los datos y los inserte en un DataSet, ahora vamos a extraer el DataSet empleado en el DataGridView, que es el que hemos usado y vamos a actualizar todos los cambios que se hayan hecho en la BD:

   1: Conexion.AbreConexion();
   2: SqlDataAdapter dataAdapter = new SqlDataAdapter("select * from Jugador", Conexion.Instancia);
   3: SqlCommandBuilder commandBuilder = new SqlCommandBuilder(dataAdapter);
   4: dataAdapter.InsertCommand = commandBuilder.GetInsertCommand();
   5: dataAdapter.DeleteCommand = commandBuilder.GetDeleteCommand();
   6: dataAdapter.UpdateCommand = commandBuilder.GetUpdateCommand();
   7:  
   8: dataAdapter.Update(dataset, "Jugador");

En primer lugar creamos la selección (obtener todos los jugadores) y al DataAdapter le añadimos los sucesivos comandos que vamos a emplear a través del CommandBuilder. Por último, invocamos que se actualice la consulta efectuada con el DataAdapter con los datos del DataSet indicando además el nombre de la tabla de la BD. Con este código, ya tenemos resueltas las tres operaciones. Además, el DataSet incorpora flags en las filas para saber cuáles se han alterado (bien sea por adición, actualización o eliminación) de modo que no se realice transacción alguna por aquellas filas que no han sufrido cambios.

Por último, queda simplemente invocar la función anterior a través de la interfaz para que se ejecute. Disponemos de diversos modos, pudiendo usar por ejemplo los eventos de DataGridView que identifican los cambios en las filas modificadas o bien mediante un botón. En este caso emplearemos el botón, y en su evento OnClick tendremos el siguiente código:

   1: CAD.Equipo.ActulizarJugadores(dataset);

De modo que le pasemos el DataSet y así pueda actualizar los cambios. Vaya diferencia de código respecto al modo clásico, ¿no? Pues los siguiente artículos sobre Entity Framework serán acojonantes :)

No hay comentarios:

Publicar un comentario