Варианты привязки переменных
Можно ли обозначить переменную связывания в 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-инъекций).