lunes, 13 de septiembre de 2010

Filtrar y Ordenar un DataTable con un DataView

Los que usamos DataTables para llenar controles de .NET como DataGrids, ComboBox, CheckBoxList, etc., generalmente obtenemos los datos de una consulta SQL, y como bien saben, en ella podemos agregar filtros y ordenamiento de la información.

¿Pero que pasa en los casos en que el DataTable se llena manualmente o los datos son manipulados con código?, por ejemplo la traducción de los Nombres de los Productos. No siempre los filtros o el ordenamiento lo podemos hacer en el origen o mediante una consulta SQL.

Usando algunos de los métodos y propiedades de los DataViews de System.Data podemos lograr el objetivo, por ejemplo:

//Llenamos un DataTable con la información requerida
DataTable myDT = mifuncionLlenado();

//Creamos un DataView com el DataTable
DataView myDV = new DataView(myDT);

/*Para ordenar los datos usamos la propiedad Sort del DataView con el campo o los campos con los que queremos hacerlo, muy parecido a SQL*/
myDV.Sort = "nombreProducto ASC";

/*Y para filtrarlo usamos la propiedad RowFilter*/
myDV.RowFilter = "productoTipo = 1";

//Establecidas las propiedades llenamos un Control con el DataView
this.myDataGrid1.DataSource = myDV;

/*Y todavia podemos llenar otro control con el mismo DataView pero con diferente filtro*/
myDV.RowFilter = "productoTipo = 2";
this.myDataGrid.DataSource = myDV;

El DataView puede ser la vista de un DataTable al que se le puede aplicar filtros, ordenamiento, entre otras cosas, pero haciendolo en memoria.

Espero sea de ayuda y apoyo este artículo.

Happy Coding!!

Fuente: http://msdn.microsoft.com/es-es/library/system.data.dataview(VS.80).aspx

miércoles, 1 de septiembre de 2010

Transacciones en SQL Server 2005

Después de un rato de no estar por aquí regreso con esta pequeña entrada que se me hace muy interesante y sobre todo útil. Las Transacciones sobre SQL Server son de mucha ayuda al realizar consultas algo complejas que impliquen afectar de manera riesgosa la integridad de la tablas en la Base de Datos.

Todo lo que se incluya dentro de la sección de la Transacción se realizará, a menos que ocurra un problema, ya que si esto pasa, todo lo que se llevaba hecho hasta entonces regresará a su estado anterior... como si nunca hubiera pasado nada.

Y utilizando el Try... Catch SQL Server podran obtener cierta información el error ocurrido.

BEGIN TRY
BEGIN TRANSACTION
--Codigo riesgoso aqui. Lo que sigue es ejemplo
declare @d decimal
set @d = (select 5 / 0)
COMMIT TRANSACTION
END TRY
BEGIN CATCH
select 'Lo sentimos ocurrio un Error. Revise los siguientes datos para mas información.' as Mensaje, error_number() AS Numero_de_Error, error_severity() AS Gravedad_del_Error, error_state() AS Estado_del_Error, error_procedure() AS Procedimiento_del_Error, error_line() AS Linea_de_Error, error_message() AS Mensaje_de_Error;
ROLLBACK TRANSACTION
END CATCH

Como conclusión, el uso de las Transacciones protege los datos de la Base de Datos ante un error ocurrido durante la ejecución de las querys. De esa manera, se pueden ejecutar con mucho mas confianza.

Happy Coding!!