RUS  ENG 

Параметризированный запрос ExecSQLEx

Страницы: 1
RSS
Параметризированный запрос ExecSQLEx
 
Добрый день!

Пытаюсь сделать параметризированный запрос:
var sqlString = "DELETE FROM Damages.db WHERE Sys=???";

var sqlParams = new ZbSqlParams();
sqlParams.AddParam(zbFieldType.zbftInteger, damageSys);

var result = db.ExecSQLEx(db.Sources[0], sqlString, sqlParams);

Вопрос: в каком виде задавать параметры в строке sql.

Спасибо.
Изменено: s-filippov - 18.12.2017 16:08:29
 
s-filippov, добрый день!
В случае Paradoх формат параметра такой:
Код
var sqlString = "DELETE FROM Damages.db WHERE Sys=:P0"; 
Дальше, в индексе параметра можно использовать 1, 2 и т. д.
В других случаях (использование ODBC или OLEDB) параметр задается в виде символа '?'
 
Спасибо, Дмитрий!
 
Дмитрий, здравствуйте. К сожалению ваш способ не сработал.

Рабочий вариант:
Код
var sqlString = "DELETE FROM Damages.db WHERE Sys='1850'";
db.ExecSQL(db.Sources[0], sqlString)

Не сработало:
Код
1.var sqlString = "DELETE FROM Damages.db WHERE Sys=:P0";
2.var sqlString = "DELETE FROM Damages.db WHERE Sys=:'P0'";
3.var sqlString = "DELETE FROM Damages.db WHERE Sys=P0";
4.var sqlString = "DELETE FROM Damages.db WHERE Sys='P0'";
var sqlParams = new ZbSqlParams();
sqlParams.AddParam(zbFieldType.zbftInteger, damageSys);
var result = db.ExecSQLEx(db.Sources[0], sqlString, sqlParams);

База парадокс, поле типа Integer.

Спасибо.
Изменено: s-filippov - 19.12.2017 10:37:17
 
s-filippov,
  1. Параметр в случае с Paradox задаётся именно так, как я написал.
  2. Проанализируйте db.LastErrorString, в чём заключается ошибка. Она наверняка не в синтаксисе задания параметра.
 
В db.LastErrorString:
Код
Неопределенная ошибка.
field 'p0' is of an unknown type (Код ошибки: 0x80004005).
Не могу понять что не так.
 
s-filippov, это похоже на то, что список параметров sqlParams пуст.
Проанализируйте в отладчике этот объект перед вызовом ExecSQLEx на предмет кол-ва элементов в коллекции, тип, актуальное значение.
 
Метод
Код
var par = sqlParams.GetParamValue(0);
возвращает все верно.
Код
var sqlString = "DELETE FROM Damages.db WHERE Sys=:P0";
var result = db.ExecSQLEx(db.Sources[0], sqlString, 1850);
Такой вариант возвращает все ту же ошибку.
Возможна ли, что ошибка в зулу фреймворке?
Изменено: s-filippov - 19.12.2017 12:05:30
 
s-filippov, я ещё раз проверил, да, действительно. Если Вы вызываете метод для базы, лежащей на сервере ZuluServer, то параметры не передаются - вызывается метод ExecSQL в режиме совместимости. Мы сделаем передачу параметров для серверного варианта в одном из ближайших релизов.
 
Спасибо за ответ, Дмитрий
Страницы: 1