Me gustaria encontrar una solución al siguiente problema:
Pude determinar que el orden de los parametros afecta la sentencia sql, en este caso un update.
Supongamos que tenemos una clase para hacer todas las operaciones de base de datos y usamos los mismos parametros en todos para no tener que duplicar codigo innecesariamente.
Código:
El insert y el delete funcionan perfectamente, pero cuando intento ejecutar el update no. Despues de dar tantas vueltas pude determinar que lo que afectaba mi sentencia sql era el orden de los parametros.Select Case params("p_tipo_op") Case "I" query = "INSERT INTO DIST(dist,nomdist,reg,visita,nomdist2) VALUES(@dist, @nomdist, @reg, @visita, @nomdist2)" Case "D" query = "DELETE FROM DIST WHERE dist = @dist" Case "U" query = "UPDATE DIST SET nomdist = @nomdist, reg = @reg, visita = @visita, nomdist2 = @nomdist2 WHERE dist = @dist" End Select db.AddInParameter(dbc, "dist", DbType.String, params("p_dist")) db.AddInParameter(dbc, "nomdist", DbType.String, params("p_nomdist")) db.AddInParameter(dbc, "reg", DbType.String, params("p_reg")) db.AddInParameter(dbc, "visita", DbType.String, params("p_visita")) db.AddInParameter(dbc, "nomdist2", DbType.String, params("p_nomdist2"))
Si analizamos el update en el tenemos los parametros en el siguiente orden: nomdist, reg, visita, nomdist2 y por ultimo dist.
Pero al agregar los parametros lo estamos haciendo en un orden completamente diferente: dist, nomdist, reg, visita y nomdist.
A pesar de enviarle los nombres de los parametros mi codigo no es capaz de interpretarlos y simplemente los va agregando en el mismo orden de la sentencia sql y por ende no coinciden los campos.
Por lo tanto el update queda asi:
Código:
Esto no se aprecia a simple vista con el inspector de variables de .NET, lo hace por debajo solo que lo expongo de esta manera para que me entiendan."UPDATE DIST SET nomdist = @dist, reg = @nomdist, visita = @reg, nomdist2 = @visita WHERE dist = @nomdist2"
Una solucion facil seria colocar un orden dependiendo de la sentencia a trabajar pero eso implica repetir codigo innecesariamente.
Me gustaria saber si alguien tiene una solucion optima para este problema sin tener que duplicar codigo y tener solo una seccion en donde se agreguen los parametros.
Mil gracias!