Mostrando entradas con la etiqueta SQL. Mostrar todas las entradas
Mostrando entradas con la etiqueta SQL. Mostrar todas las entradas

"Mapeando" de procedimientos almacenados a clases en C#


Hace rato, mientras no tenía clase me dispuse a escribir un pequeño programita para facilitarme la vida con algo (asquerosamente tedioso) que tenía que hacer. Y es que lo que tenía que hacer hasta parece arcaíco: Se trata de hacer consultas desde una aplicación web a una base de datos mediante procedimientos almacenados, para ello hay que generar una clase asociada al procedimiento para facilitar la persistencia de los datos dentro de la aplicación.

Hay consultas enoooooooooooooooooooooormes, inclusive hay algunas de más de 20 o 30 columnas lo cual representa perder mucho tiempo creando la clase asociada, aunque a decir verdad yo no lo hago por el tiempo, sino por el aburrimiento que representa hacerlo. Acá mi propuesta de solución:

La idea que se me ocurrió fue colocarles una especie de "clave" para conocer el tipo de dato de cada columna así como el nombre que usaría para ella dentro de la aplicación. La clave elegida fue: --|tipo de dato|nombre dentro de la aplicación  dada la facilidad con la que una cadena de ese tipo es fácilmente encontrable usando expresiones regulares, para ello se requiere del siguiente patrón: --\|[a-zA-Z0-9]+\|[a-zA-Z0-9]+. Además en el programa usé una plantilla de texto T4 para generar el código, esas plantillas son útiles para generar código como en esta ocasión, el ejemplo es sencillo y fácil de entender.

Colgué el proyecto completo en GitHub para que todos pudieran descargarlo, yo pienso que le seguiré añadiendo funcionalidad conforme la vaya necesitando (hasta que me aburra de hacer otra cosa :P).

¡Saludos!
@fferegrino :)

Super query sobre Northwind

Antiguamente, en mis clases en UPIITA el profesor Carlos de la Cruz había pedido un query sobre la base de datos Northwind que nos devolviera las órdenes que tuvieran dos productos iguales, en aquel momento no pude hacerlo (t_t), pero ahora que lo ha vuelto a pedir en el grupo de mi maigo @Rosend_mc, me lo tomé personal y aquí está.

La consulta nos regresará pares de órdenes, con al menos dos productos iguales, sé que es enooorme y que seguro hay una solución mejor pero como siempre digo: por algo se empieza. Dejo el Script en SQL y un PDF en el que intento explicar los detalles de la consulta.

Descargar PDF con la explicación
SELECT DISTINCT O1.Or1
,O2.Or2
FROM (
SELECT OD1.OrderID Or1
,OD2.OrderId Or2
,OD1.ProductID
,OD2.ProductID P1
FROM [Order Details] OD1
INNER JOIN [Order Details] OD2
ON OD1.ProductID = OD2.ProductID
AND OD1.OrderID <> OD2.OrderID
WHERE OD1.OrderID IN (
SELECT OD.OrderID
FROM [Order Details] OD
GROUP BY OD.OrderID
HAVING COUNT(OD.ProductID) >= 2
)
AND OD2.OrderID IN (
SELECT OD.OrderID
FROM [Order Details] OD
GROUP BY OD.OrderID
HAVING COUNT(OD.ProductID) >= 2
)
) O1
INNER JOIN (
SELECT OD1.OrderID Or1
,OD2.OrderId Or2
,OD1.ProductID
,OD2.ProductID P2
FROM [Order Details] OD1
INNER JOIN [Order Details] OD2
ON OD1.ProductID = OD2.ProductID
AND OD1.OrderID <> OD2.OrderID
WHERE OD1.OrderID IN (
SELECT OD.OrderID
FROM [Order Details] OD
GROUP BY OD.OrderID
HAVING COUNT(OD.ProductID) >= 2
)
AND OD2.OrderID IN (
SELECT OD.OrderID
FROM [Order Details] OD
GROUP BY OD.OrderID
HAVING COUNT(OD.ProductID) >= 2
)
) O2
ON O1.Or1 = O2.Or1
AND O1.Or2 = O2.Or2
AND O1.P1 <> O2.P2

Si lo mejoran no duden en pasarme su script.


¡Saludos!
@fferegrino :)

Northwind en MySQL

Pues por aquello de no instalar MSSQLServer, aquí dejo el script SQL, con pequeñas modificaciones, para crear la base de datos Northwind  en MySQL. ¡Sí incluye los datos :D!

Sin más, aquí está el link al archivo:
Northwind para MySQL
Y el link al sitio en donde lo encontré(agradecer):
Taringa!, gracias juanmordan.

¡Saludos! @fferegrino :)