Варианты привязки переменных

Можно ли обозначить переменную связывания в SQL Server, используя те же обозначения, что и Oracle, то есть:0,: ​​1 вместо использования?

Я искал, но не нашел ничего убедительного в этом. В настоящее время мое решение использует переменные связывания, чтобы ввести значения в операторы, которые я выполняю в базе данных, что прекрасно работает в Oracle, но мне нужно сделать то же самое в SQL Server и PostGIS, чтобы назвать несколько. Я не хочу сказать, например:

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

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

* AddParameter () - это функция из моего класса-оболочки, которая добавляет значения в список для добавления в объект команды при вызове функции execute, которую я написал.

Я хотел бы, чтобы мой код был максимально чистым и не содержал жестко закодированных материалов, как показано выше. Я хотел бы решение, которое подходит всем. (да, я знаю, что это, вероятно, желаемое за действительное!)

Я знаю, что мог бы использовать замену строки, чтобы сделать это, но это не то, что я после. Я не хочу использовать обходной путь, как это на самом деле. Также мой менеджер проекта попросил, чтобы я попытался найти решение, используя переменные связывания.

Есть идеи?

1 ответ

Решение

Краткий ответ - нет, переменные связывания по-разному реализуются в разных базах данных. Так что вам понадобится грязная логика совместимости где-нибудь.

Тем не менее, я лично решил эту проблему в прошлом, используя подстановку строк, чтобы ввести правильный синтаксис для параметра связывания. Таким образом, вы можете вставлять :coordsys в вашем выражении SQL, а затем oleDataBaseConnection.AddParameter("coordsys", coordsys); в вашем коде. Ваш подготовительный оператор тогда будет искать SQL, найти :coordsys и замените его тем, что вам нужно (например, ?), а также создайте список параметров по имени для последующего выполнения. Когда вы приступите к выполнению, вы можете на лету составить правильный список используемых параметров привязки.

Немного сложно реализовать закулисную работу, но я лично обнаружил, что это приводит к чистому SQL с преимуществами параметров связывания (таких как производительность базы данных, безопасность от атак с использованием SQL-инъекций).

Другие вопросы по тегам