powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / C# и Cache
5 сообщений из 5, страница 1 из 1
C# и Cache
    #37054670
slayk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Товарищи! Помогите пожалуйста разобраться как доставать нужные мне данные из базы Cache в мое приложение на C#. Я построил классы в Cache, построил прокси-классы для C#, залил в базу данные. А как теперь их из базы извлечь не могу понять ...

Вот классы Cache:


Class User.Stock Extends (%Persistent, %Populate, %XML.Adaptor) [ ClassType = persistent, Inheritance = right ]
{
// indexes
Index Index On Code [ Type = index ];

// properties
Property Minute As Minute;
Property Code As %String [ Required ];
Property FullName As %String;
Property Exchange As %String;
Property TickSize As %Double;
Property Description As %String(MAXLEN = 500);
Property Currency As %String;
}


Class User.Minute Extends (%SerialObject, %Populate, %XML.Adaptor) [ ClassType = serial, Inheritance = right ]
{
//indexes
Index TimeStampIndex On TimeStamp [ Type = index ];
Index TimeFrameIndex On TimeFrame [ Type = index ];
Index Index On (TimeStamp, TimeFrame) [ Type = index, Unique ];

//properties
Property TimeStamp As %TimeStamp;
Property TimeFrame As %BigInt;
Property OpenPrice As %Double;
Property HighPrice As %Double;
Property LowPrice As %Double;
Property ClosePrice As %Double;
Property Volume As %Double;
}


Нужно получить выборку по определенному Code для промежутка времени TimeStamp (допустим за полгода) ...
...
Рейтинг: 0 / 0
C# и Cache
    #37054808
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
slayk , если вопрос касается стороны Каше - ответ можно найти в файле objectqs.pdf ...

авторДобавьте в класс Human свойство Home, типом которого будет являться Address, а поскольку
Address сам является объектным классом (а не литеральным, как, например, %Integer), то
атрибут Home будет представлять собой ссылку на объект типа Address.
Скомпилируйте класс Human.
В Caché Terminal создайте объекты h и a, классов Human и Address соответственно и заполните
их свойства.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
USER>set h=## class (User.Human).% New ()
USER>set h.Name="Евгений"
USER>set h.Age= 55 
USER>set a=## class (User.Address).% New ()
USER>set a.Country="Россия"
USER>set a.City="Москва"
USER>set a.Index= 121019 
USER>set a.Street="Волхонка 6, офис 14"
Присвойте атрибуту Home объекта h значение – ссылку на объект a:
Код: plaintext
1.
USER>set h.Home=a
Теперь все свойства объекта a становятся доступны через ссылку h.Home
Код: plaintext
1.
2.
USER>write h.Home.Street
Волхонка  6 , офис  14 
Сохраните и закройте объект a.
Код: plaintext
1.
2.
USER> do  a.%Save()
USER>kill a
Несмотря на то, что объект a больше не находится в памяти, Вы по прежнему можете обрааться
к нему через ссылку h.Home:
Код: plaintext
1.
2.
3.
USER>set h.Home.Country="Российская Федерация"
USER>write h.Home.Country
Российская Федерация
...
Рейтинг: 0 / 0
C# и Cache
    #37054810
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор Caché Objects QuickStart . В пособие для самостоятельного изучения в краткой форме изложены приемы работы с классами Caché. Приведены примеры создания классов, объектов и запросов, организации связанных классов, наследования, отношений, работы с сервером Caché Object для ActiveX.
...
Рейтинг: 0 / 0
C# и Cache
    #37055208
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
slayk ,

ПримерClass net.Minute Extends %SerialObject
{
//properties
Property TimeStamp As %TimeStamp;
Property TimeFrame As %BigInt;
Property OpenPrice As %Double;
Property HighPrice As %Double;
Property LowPrice As %Double;
Property ClosePrice As %Double;
Property Volume As %Double;
}

Include %occResultSet
Class net.Stock Extends %Persistent
{
// indexes
Index Index On Code;
Index Index1 On (Minute.TimeStamp, Minute.TimeFrame) [ Unique ];
Index TimeStampIndex On Minute.TimeStamp;
Index TimeFrameIndex On Minute.TimeFrame;
// properties
Property Minute As net.Minute;
Property Code As %String [ Required ];
Property FullName As %String;
Property Exchange As %String;
Property TickSize As %Double;
Property Description As %String(MAXLEN = 500);
Property Currency As %String;

ClassMethod Test1(
  Code As %String,
  TS1 As %TimeStamp,
  TS2 As %TimeStamp) [ ReturnResultsets, SqlProc ]
{
  $$$ResultSet("select 1, 5, 8, 1+5*3") 
  $$$ResultSet("select count(*) from net.Stock") 
  $$$ResultSet("select * from net.Stock where Code=:Code and Minute_TimeStamp between :TS1 and :TS2")
}

ClassMethod Test2(
  Code As %String,
  TS1 As %TimeStamp,
  TS2 As %TimeStamp,
  ByRef stream As %Stream.GlobalBinary) As %Status
{
 
  set ds=##class(%XML.DataSet).%New() 
  do ds.Prepare("select * from net.Stock where Code=? and Minute_TimeStamp between ? and ?") 
  do ds.Execute(Code,TS1,TS2)
  quit ds.XMLExportToStream(.stream)
}

Query Test3(
  Code As %String,
  TS1 As %TimeStamp,
  TS2 As %TimeStamp) As %SQLQuery(CONTAINID = 1, ROWSPEC = "ID:%String,FullName:%String,Description:%String(MAXLEN=500),TimeStamp:%TimeStamp") [ SqlProc ]
{
  select %ID,FullName,Description,Minute_TimeStamp from net.Stock where Code=:Code and Minute_TimeStamp between :TS1 and :TS2
}
}
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
using System;
using System.Data;
using System.Windows.Forms;
using sqlru.net;
using InterSystems.Data.CacheClient;
using InterSystems.Data.CacheTypes;

namespace NETTest
{
  public partial class Form1 : Form
  {
    public Form1()
    {
      InitializeComponent();
    }

    private void Button1Click(object sender, EventArgs e)
    {
      const string code = "5";
      var ts1 = new CacheDateTime(2011, 1, 01, 16, 0, 0);
      var ts2 = new CacheDateTime(2011, 2, 01, 16, 59, 59);
      var ds = new DataSet();
      using (var db = new CacheConnection("server=localhost;port=1972;namespace=USER;uid=_system;pwd=SYS"))
      {
        db.Open();
        try
        {
          Stock.KillExtent(db); // do ##class(net.Stock).%KillExtent()
          for (var i = 1; i <= 10; i++)
          {
            /*
             * for i=1:1:10
             * {
             *  set obj=##class(net.Stock).%New()
             *  set obj.Code="5"
             *  set obj.Minute.TimeStamp=$ZDT($NOW(),3,,3)
             *  set obj.Minute.TimeFrame=i
             *  set sc=obj.%Save(0)
             *  $$$ThrowOnError(sc)
             * }
             */
            var obj = new Stock(db) { Code = code, Minute = { TimeStamp = DateTime.Now, TimeFrame = i } };
            var sc = obj.Save(0);
            if (!sc.IsOK) sc.ThrowException();

            obj.Close();
          }

          using (var cmd = new CacheCommand("CALL net.Stock_Test1(?,?,?)", db))
          {
            cmd.Parameters.Add(new CacheParameter("code", code));
            cmd.Parameters.Add(new CacheParameter("ts1", ts1.Value));
            cmd.Parameters.Add(new CacheParameter("ts2", ts2.Value));
            using (var da = new CacheDataAdapter(cmd))
            {
              da.Fill(ds); //Имена таблиц: "Table","Table1","Table2"
            }
          }

          using (var cmd = Stock.Test3(db))
          {
            cmd.Parameters.Add(new CacheParameter("code", code));
            cmd.Parameters.Add(new CacheParameter("ts1", ts1.Value));
            cmd.Parameters.Add(new CacheParameter("ts2", ts2.Value));
            using (var da = new CacheDataAdapter(cmd))
            {
              da.Fill(ds, "Test3"); //Имя таблицы "Test3"
            }
          }

          var stream = new CacheBinaryStream(db);
          Stock.Test2(db, code, ts1.Value, ts2.Value, ref stream);
          ds.ReadXml(stream); //Имя таблицы "SQL"

          dataGrid1.DataSource = ds;
          dataGrid1.DataMember = null;

          MessageBox.Show(@"OK");
        }
        catch (Exception ex)
        {
          MessageBox.Show(ex.Message);
        }
      }
    }
  }
}

PS: советую также проработать упражнения из документации .
...
Рейтинг: 0 / 0
C# и Cache
    #37056140
slayk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
servit, вот то что нужно! Огромное вам спасибо. Все найденные мной документации скуповаты на примеры, тем более для с#. А это то что нужно!
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / C# и Cache
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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