Варианты привязки переменных - PullRequest
1 голос
/ 21 февраля 2012

Можно ли обозначить переменную связывания в 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 Ответ

1 голос
/ 21 февраля 2012

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

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

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

...