Базы данных - Cache - статьи


Работа с SQL GateWay на низком уровне - часть 2


  • cписок типов данных ODBC (например: 4-int, 9-DATETIME, 12-VARCHAR, 8-DOUBLE, …);

  • размеры буферов в байтах;
  • число знаков после точки (только для Decimal и Float);
  • список длин типов данных в байтах;
  • Все аргументы метода BindParameters(), начиная со второго имеют тип %List и должны передаваться в качестве аргументов функции $LB(). Если в запросе несколько параметров, то в качестве аргументов $LB() передаются значения через запятую, соответствующие каждому параметру в порядке их следования в строке запроса, например: Set sc=Connection.BindParameters(Stat,$LB(1,1),$LB(12,4),
    $LB(50,4),$LB(0,0),$LB(50,4))

    Значение нужного типа данных ODBC можно посмотреть в глобале ^%qCacheSQL (область %CACHELIB) по первому индексу равному "odbcdt", тогда второй индекс соответствует нужному типу данных (Рис. 11).

    Присваивание значения параметру осуществляется с использованием метода SetParameter(Stat, $LB(val), Numb). В качестве аргументов методу SetParameter() передаются:

    • созданная команда;
    • значение параметра как аргумент функции $LB();
    • порядковый номер параметра в строке запроса.

    Метод SetParameter() вызывается отдельно для каждого переданного параметра: Set sc=Connection.SetParameter(Stat,$LB(“Alice”),1)
    Set sc=Connection.SetParameter(Stat,$LB(5),2) Для выполнения запроса используется метод Execute(Stat), которому в качестве аргумента передается созданная команда: Set sc=Connection.Execute(Stat)В Листинге 3 приведен пример запроса к внешней таблице с использованием методов класса %Library.SQLGatewayConnection. Данный запрос выбирает все поля из таблицы INFO внешнего ODBC-источника (с именем DSNName), для которых значение поля Age=21, а значение поля Name начинается с буквы “D”.

    Листинг 3 Set Connection=##class(%SQLGatewayConnection).%New()
    // устанавливаем соединение
    Do Connection.Connect("DSNName","sa","pwd")
    // создание новой команды
    Set sc=Connection.AllocateStatement(.Stat)
    // подготовка запроса
    Set sc=Connection.Prepare(Stat,"SELECT * FROM INFO WHERE
    Age=? AND Name LIKE ?")
    // подготовка параментов
    Set sc=Connection.BindParameters(Stat,$LB(1,1),$LB(4,12),
    $LB(4,50),$LB(0,0),$LB(4,50))
    Set sc=Connection.SetParameter(Stat,$LB(21),1)
    Set sc=Connection.SetParameter(Stat,$LB("D%"),2)
    // выполнение запроса
    Set sc=Connection.Execute(Stat)
    For { Q:'Connection.Fetch(Stat)
             S Sc=Connection.GetOneRow(Stat,.Row)
             For J=1:1:$LL(Row) Write $LG(Row,J)_" "
             Write !

    }
    // удаление команды
    Set sc=Connection.DropStatement(Stat)
    // разрыв соединения
    Set sc=Connection.Disconnect()




    - Начало -  - Назад -