BaseLibrary: una pequeña librería para conectarse a SQL Server desde .NET en C#

Posted on Posted in SQL Server, Web Forms

Hace tiempo, cuando comencé a hacer trabajos freelance en mis ratos libres , me di cuenta de que estaba haciendo lo mismo una y otra vez, eso me estaba quitando tiempo valioso para programar funcionalidades que realmente agregaban valor al proyecto.

Desde que empece a programar apps web profesionalmente, me fue enseñado a programar por capas, por lo menos 3:

  • DAL: acceso a los datos.
  • Provider: la capa que conectaba a la capa DAL con el website.
  • Website: Lo que ve el usuario

Lo que hacia antes era que el DAL solamente llamar procedimientos almacenados en SQL Server, el Website tenia toda la lógica, y el Provider… bueno, el provider solo llamaba al DAL… nada mas.

Quitando el DAL

Como lo único que hacia el DAL era hablar con la DB, lo que hice fue crear una librería para que pudiera ejecutar procedimientos almacenados y consultas de cualquier proyecto, con o sin parámetros, con la cadena de conexión por default o con una diferente si había que conectarse a otra DB y aparte pudiera mandar correos con solo llamar un método.

Como funciona la librería?

Primero diré que hay 3 caminos distintos:

  • DAL.getDataTable: regresa un DataTable (una sola tabla)
  • DAL.getDataSet: regresa un DataSet (muchas tablas en un solo objeto)
  • DAL.getExecuteNonQuery: regresa un bool (true si la instrucción afecto a mas de una fila)

Los métodos están sobrecargados para aceptar por lo menos un parámetro y máximo 3, una llamada con los 3 métodos seria así (los últimos dos parámetros son opcionales, solo el primero es obligatorio por obvias razones):

DAL.getDataTable(
	"myProcedureName", 			    // Nombre del procedimiento almacenado
	new Dictionary<string, object> { 
		  { "ID", 2 },                      // parameto - int
		  { "City", "Ags" },                // parameto - string
		  { "RecordDate", DateTime.Now() }, // parameto - DateTime
	},
	"Server=etc..."				    // Cadena de conexion
);

Como puedes ver, no necesitas especificar el tipo de dato, solamente pasar el nombre del parámetro y el valor/variable debería bastar.

A cada uno de los métodos les puedes agregar “FromQuery” al final del nombre del método(Ej. DAL.getDataTableFromQuery), y en lugar de pasar el nombre del procedimiento almacenado, pasarías la consulta, así tal cual, cruda:

DAL.getDataTableFromQuery("SELECT * FROM Usuarios");

Los métodos FromQuery tambien están sobrecargados para que pases parámetros y una cadena de conexión en caso de requerirlo.

Si quieres usar la librería y ejemplos mas a detalle de como usarla puedes descargarla desde GitHub.

Notas importantes

Como les comentaba en un principio, yo usaba las 3 capas, de manera incorrecta, al crear esta librería cambie la forma en la que arquitecturaba (probablemente no exista esa palabra) los proyectos, ahora cuando hago proyectos con Web Forms uso lo siguiente:

  • DAL: Utilizo BaseLibrary
  • Provider: Creo un folder llamado Models, donde creo las clases que voy a usar, casi casi que una por cada tabla en la DB, genero sus propiedades (digamos que las columnas, si lo queremos ver así) y agrego sus funcionalidades, de esta forma, toda la lógica del proyecto, es decir, las funciones que tienen que realizar los objetos o entidades son abstraídas en esas clases.Recordemos que la programación orientada a objetos es una abstracción del mundo real, donde tenemos nuestros objetos (clases) con sus características (propiedades), los cuales son capaces de realizar funciones (métodos).
  • WebSite: Ahora si, las paginas .aspx con código del lado del servidor en C# solamente se preocupan por trabajar en lo que el usuario ve, nada mas.

De esta manera no mezclamos lógicas, es decir, que nuestro proyecto no va a hacer el trabajo de un objeto (como algunos cálculos en un proyecto financiero) en el WebSite, ni tampoco va a habilitar ciertos botones (que es chamba del WebSite) dentro del objeto Usuario.

Aquí te dejo el link para descargar la librería, donde tambien podrás ver como mandar correos en en una sola lineahttps://github.com/JEnriqueZS/DAL-BaseLibrary

Aunque de esta forma esta mas clara, me he inclinado mas por hacer proyectos usando MVC, esta arquitectura realmente me permite tener muy bien identificados y separados cada componente del proyecto, me facilita muchísimo la creación de las clases de los objetos/entidades y con solo una linea de código en el modelo, te ayuda a realizar esa validación tanto en el cliente (Javascript) como en el servidor (C#), si no sabes como usar MVC o te es nuevo el concepto, justamente acabo de escribir un post sobre como Como crear un proyecto MVC totalmente funcional a partir de tu base de datos.