Pregunta

¿Es posible denotar una variable de enlace en SQL Server utilizando la misma notación que Oracle, es decir, 0 ,: 1 en lugar de usar?

He buscado pero no he encontrado nada concluyente en esto. En el momento en que mi solución utiliza variables de enlace para introducir valores en las declaraciones que ejecuto en la base de datos que funciona muy bien en Oracle, pero también necesito hacer lo mismo en SQL Server y Postgis para nombrar algunos. No quiero tener que decir por ejemplo:

switch(dialect)
{
    case "Oracle":
    {
        oleDataBaseConnection.AddParameter(":1", coordsys);
        break;
    }

    case "SQLServer":
    { 
        oleDataBaseConnection.AddParameter("?", coordsys);
        break;
    }
}

*AddParameter () es una función de mi clase de envoltorio que agrega los valores a una lista que se agregarán al objeto de comando al llamar a la función de ejecución que he escrito.

Me gustaría que mi código esté lo más limpio posible y no contenga cosas codificadas como se muestra arriba. Quisiera una solución que se ajuste a todos. (¡Sí, sé que esto probablemente sea una ilusión!)

Sé que podría usar un reemplazo de cadena para hacer esto, pero no es lo que soy después. Realmente no quiero usar una solución como esa. También mi gerente de proyecto solicitó que intente encontrar una solución utilizando variables de enlace.

¿Algunas ideas?

¿Fue útil?

Solución

La respuesta corta es no, las variables de enlace se implementan de manera diferente en diferentes bases de datos. Entonces necesitará la lógica de compatibilidad desordenada en alguna parte.

Dicho esto, personalmente he resuelto este problema en el pasado usando la sustitución de cadenas para poner en la sintaxis correcta para un parámetro de enlace. Así podrías incrustar :coordsys En su declaración SQL, y luego oleDataBaseConnection.AddParameter("coordsys", coordsys); en tu código. Su declaración de preparación buscaría el SQL, encontraría :coordsys y reemplácelo por lo que necesite (por ejemplo ?), y también construya la lista de parámetros por nombre para su ejecución posterior. Cuando vaya a ejecutar, puede en la mosca construir la lista correcta de parámetros de enlace para usar.

Implementar la parte detrás de escena es un poco complicado, pero personalmente he descubierto que conduce a SQL limpio, con los beneficios de los parámetros de enlace (como el rendimiento de la base de datos, la seguridad de los ataques de inyección SQL).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top