powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Работа с Cache в ADO NET
6 сообщений из 6, страница 1 из 1
Работа с Cache в ADO NET
    #36771805
В ADO NET для работы в CACHE имеется большой набор типов данных. Только непонятно можно ли ими всеми пользоваться я имею в виду типы про которые нет или очень мало информации в документации.
Например такой тип CacheArrayOfString. Можно подумать что это тип схожий с массивом строк в Cache и попробывать например в VB набрать такой код (естественно вначале сделать Import того чего надо)

cacheArray As CacheArrayOfString

компилятор все понял и даже показывает методы этого объекта

cacheArray.Add(1,"Test")

все бы было хорошо если бы перед вызовом методов можно было создать экземпляр этого класса

cacheArray=New(?)

сдесь компилятор говорит что нет такого конструктора.
Теперь для чего это нужно. Может быть имеется возможность использовать данные этого типа например для передачи в качестве параметров в серверные процедуры Cache.
...
Рейтинг: 0 / 0
Работа с Cache в ADO NET
    #36773201
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пример использования класса CacheArrayOfStrings .
На стороне клиента объект класса %ArrayOfDataTypes можно создать так (пример привожу на C#):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
using (var cn = new CacheConnection("server=localhost;port=1972;namespace=USER;uid=_system;pwd=SYS"))
{
  cn.Open();
  var arr=new CacheArrayOfDataTypes(cn); //эквивалентно CacheArrayOfStrings
  arr.Add("1", "test1");
  arr.Add("2", "test2");
  arr.Add("3", "test3");

  MessageBox.Show(arr.Count.ToString());
}
Конечно же Вы можете создавать списки (формата %List) и передавать их в
метод, хранимую процедуру для, например, обработки предикатом %INLIST :
Код: plaintext
1.
2.
3.
4.
Query test2(AList As %List) As %SQLQuery(CONTAINID =  1 , ROWSPEC = "ID:%String,aBoolean:%Boolean,aInteger:%Integer,aString:%String,aDate:%Date,aTimeStamp:%TimeStamp") [ SqlProc ]
{
  SELECT %ID,aBoolean,aInteger,aString,aDate,aTimeStamp FROM pas.test WHERE ID %INLIST :AList
}
...
Рейтинг: 0 / 0
Работа с Cache в ADO NET
    #36774706
Да, так работает
Большое спасибо
...
Рейтинг: 0 / 0
Работа с Cache в ADO NET
    #36774830
Непонятно только каким образом можно создать параметр такого типа для передачи в хранимую процедуру.

Dim ArrString As CacheArrayOfStrings = New CacheArrayOfDataTypes(cnCache)
ArrString.Add(1, "Test1")
ArrString.Add(2, "Test2")
ArrString.Add(3, "Test3")

param = New CacheParameter()
param.CacheDbType = CacheDbType.NVarChar '???? Нет нужного типа
param.ParameterName = "array"
param.Value = ArrString
param.Direction = ParameterDirection.InputOutput
comСache.Parameters.Add(param)

comCache.ExecuteScalar

Здесь при вызове хранимой процедуры возникает ошибка:
Type out of range: InterSystems.Data.CacheTypes.CacheArrayOfDataTypes
...
Рейтинг: 0 / 0
Работа с Cache в ADO NET
    #36775175
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дано:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Class del.b Extends %Persistent
{

  Property a As %Integer;

  Query spTest(AList As %List) As %SQLQuery(CONTAINID =  1 , ROWSPEC = "ID:%String,a:%Integer") [ SqlProc ]
  {
    SELECT %ID,a FROM del.b WHERE ID %INLIST :AList
  }

}
Данные в таблице del.b
IDa112539
код на C#
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
  mm.Clear();
  using (var cn = new CacheConnection("server=localhost;port=1972;namespace=USER;uid=_system;pwd=SYS"))
  {
    cn.Open();
    var cmd = new CacheCommand("CALL del.b_spTest(?)", cn);
    var list = new CacheSysList(Encoding.Unicode, true) { "1", "1", "3" };

    var listBytes = new byte[list.ByteSize];
    list.CopyBytesTo(listBytes,  0 );
    cmd.Parameters.Add(new CacheParameter("AList", listBytes));

    var r=cmd.ExecuteReader();
    while (r.Read())
    {
      mm.AppendText(r["ID"] + " "+ r["a"] + Environment.NewLine);
    }
    mm.AppendText("OK");
  }

Результат:
Код: plaintext
1.
2.
3.
1 1
3 9
OK
...
Рейтинг: 0 / 0
Работа с Cache в ADO NET
    #36776362
Понял.
Спасибо
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Работа с Cache в ADO NET
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]