domingo, 21 de junio de 2009

Como exponer los eventos RowUpdated y RowUpdating en un TableAdapter?

Bueno, después de dar un par de vueltas e investigar un poco, acá les dejo la solución a como exponer los eventos RowUpdated y RowUpdating de un TableAdapter de los generados con diseñador de Dataset fuertemente Tipados.

Tanto en C# 2005 como en C# 2008 tienen que ir al Dataset tipado (xsd).
Identifican al TableAdapter (NO el datatable) que van a modificar y clickean con boton izquierdo.
Van a la ventana de propiedades para el tableadapter y ponen la propidad ConnectionModifier en PUBLIC.

Después clickean con el botón derecho en el mismo TableAdapter y van a la opción Ver Código (View Code) y en la ventana de código agregan la clase parcial necesaria para incorporar el código que expone el dataadapter interno.

El código a continuación es un ejemplo de como debiera queda la clase

namespace WinCon.DataSet1TableAdapters //obviamente acá va el namespace de ustedes
{
using System.Data;
using System.Data.SqlClient; //acá va el provider de la base que ustedes están usando
// en caso que no sea SQL Server

public partial class EjemploTableAdapter //de nuevo, el nombre exacto de su tableadapter
{
public System.Data.SqlClient.SqlDataAdapter Adapter2 //el nombre que se les ocurra
{
get
{
this.Adapter.SelectCommand = this.CommandCollection[0];
return this.Adapter;
}
}
}
}

Hasta acá la modificación, si lo estuvieran invocando por ejemplo desde un windows forms, podrían ejecutar lo siguiente (ojo que ahora el código que viene a continuación está adentro de un windows forms que utiliza al tableadapter).

DataSet1TableAdapters.EjemploTableAdapter da = new WinCon.DataSet1TableAdapters.EjemploTableAdapter();
DataSet1 ds = new DataSet1();


public Form1()
{
//atacho los eventos y digo que lo gestionan
// los métodos metodo y metodo2 respectivamente.
da.Adapter2.RowUpdating += metodo; //fijensé que uso la propiedad Adapter2
// que creé adentro del TableAdapter.
da.Adapter2.RowUpdated += metodo2;
InitializeComponent();
}


Espero que a alguien le sea de utilidad.

Hugo Bernachea
http://www.linkedin.com/in/bernachea

viernes, 19 de junio de 2009

Firebird con Visual Studio 2005

********* Consejo Dado "AS IS" "ASI COMO ESTA", sin garantias y bajo la total y absoluta responsabilidad de quien lo aplica, como todos los consejos, tipos y sugerencias dados en este sitio *********

Firebird como base de datos "free" no es tan conocida como otras bases de datos mas populares como MySQL y PostgreSQL, pero lo cierto es que Firebird tiene una serie de características que la hacen muy interesante a la hora de realizar desarrollos de programas "empaquetados".
Una de las características es que esta base puede ser embebida en el producto final, con lo cual no se le instala un servidor al cliente. Además Firebird tiene Stored Procedures, Triggers, Funciones y todas las características que presentan las bases de datos comerciales y que MySQL recién está empezando a adoptar desde su ultima versión. Obviamente Firebird es muy superior a SQL Lite e incluso es superior a las versiones express de SQL Server y su licencia comercial permite utilizarlo incluso en programas comerciales sin restricciones.

La idea de utilizarlo con .NET viene pronto a las manos y por lo tanto voy a describir como hacerlo funcionar en Visual Studio 2005.

Pasos a seguir:
1. Ir a la página de Firebird y descargar el provider para .NET 2.
2. Descargue el Visual Studio 2005 SDK (NO el SDK del framework please) desde el sitio de descargas de Microsoft. Recuerden que el SDK del Visual Studio NO es parte de la instalación, es una descarga adicional.
3. Verifique y en caso de no estar previamente agragado, agregue el provider de firebird para .net 2 (el archivito FirebirdSQL.Data.FirebirdClient.dll) a la Global Assembly Cache (GAC) con gacutil.exe -i FirebirdSQL.Data.FirebirdClient.dll.
4. Ejecute gacutil.exe /l FirebirdSql.Data.FirebirdClient y fíjese los números que indica esta ejecución, particularmente el número de version, el publickeytoken y cultura.
5. Ubique el machine.config y fíjese en los siguientes tags:
Desdpués de configuration ->configSections agregue lo siguiente (todo seguido)

add <section name="firebirdsql.data.firebirdclient" type="System.Data.Common.DbProviderConfigurationHandler, System.Data, Version=SU_NUMERO_DE_VERSION, Culture=neutral, PublicKeyToken=EL_PublicKeyToken_DE_SU_DLL_EN_SU_GAC">

6. En <system.data> -> <dbproviderfactories> agregar
<add name="FirebirdClient Data Provider" invariant="FirebirdSql.Data.FirebirdClient" description=".Net Framework Data Provider for Firebird" type="FirebirdSql.Data.FirebirdClient.FirebirdClientFactory, FirebirdSql.Data.FirebirdClient, Version=ACA_VA_SU_NUMERO_DE_VERSION, Culture=neutral, PublicKeyToken=DE_NUEVO_ACA_VA_SU_PUBLIC_KEY_TOKEN">

7. Abra el archivo FirebirdDDEXProvider.reg y reemplace la variable %Path% con la ruta exacta donde se encuentra la dll del provider, por ejemplo C:\Program Files\FirebirdClient, recuerde de agregar doble barra, por ejemplo C:\\Program Files\\FirebirdClient. Guarde el archivo .reg y con un doble click agregue esa información en el registro.

Si hizo todo de la manera correcta ya tiene disponible la opción para abrir el VS 2005 y usar firebird como cualquier otra base de datos, incluso agregando la conexion en el server explorer.