Domanda

È possibile indicare una variabile di bind in SQL Server usando la stessa notazione di Oracle IE: 0 ,: 1 invece di usare?

Ho cercato ma non ho trovato nulla di conclusivo su questo. Al momento la mia soluzione utilizza le variabili di bind per introdurre valori alle dichiarazioni che eseguo nel database che funziona alla grande in Oracle, ma devo anche fare lo stesso in SQL Server e Postgis per citarne alcuni. Non voglio dire ad esempio:

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

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

*AddParameter () è una funzione della mia classe Wrapper che aggiunge i valori a un elenco da aggiungere all'oggetto di comando quando si chiama la funzione di esecuzione che ho scritto.

Vorrei che il mio codice fosse il più pulito possibile e non contenga roba hardcoded come mostrato sopra. Vorrei una soluzione che si adatta a tutti. (Sì, lo so che questo è probabilmente un pio desiderio!)

So che potrei usare una stringa sostituire per farlo, ma non è quello che sto cercando. Non voglio usare una soluzione alternativa del genere. Inoltre, il mio project manager ha chiesto di provare a trovare una soluzione utilizzando le variabili di bind.

Qualche idea?

È stato utile?

Soluzione

La risposta breve è no, le variabili di bind sono implementate in modo diverso in diversi database. Quindi avrai bisogno della logica di compatibilità disordinata da qualche parte.

Detto questo, ho risolto personalmente questo problema in passato usando la sostituzione delle stringhe per inserire la sintassi giusta per un parametro di bind. Quindi potresti incorporare :coordsys nella tua dichiarazione SQL, e poi oleDataBaseConnection.AddParameter("coordsys", coordsys); nel tuo codice. La tua dichiarazione preparata cercherebbe quindi SQL, trova :coordsys e sostituirlo con tutto ciò di cui hai bisogno (per esempio ?), e anche creare l'elenco dei parametri per nome per il tuo successivo Esecute. Quando vai a eseguire, è possibile su Fly Build l'elenco giusto di parametri di bind da utilizzare.

L'implementazione del bit dietro le quinte è un po 'complicato, ma ho scoperto personalmente che porta a SQL pulito, con i vantaggi dei parametri di bind (come le prestazioni del database, la sicurezza degli attacchi di iniezione SQL).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top