Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / помогите соединиться с Cache 5.0 из .Net (VS 2010) / 5 сообщений из 5, страница 1 из 1
17.02.2011, 17:41
    #37123026
u78
u78
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите соединиться с Cache 5.0 из .Net (VS 2010)
Кто нибудь это делал штатными средствами? именно 5.0 и именно .Net?
Только без использованися SQL, а скажем прогу запустить или глобальку посмотреть?

Дайте примеры, если есть.
...
Рейтинг: 0 / 0
17.02.2011, 18:39
    #37123142
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите соединиться с Cache 5.0 из .Net (VS 2010)
u78 ,

Уже было нечто похожее.
...
Рейтинг: 0 / 0
06.04.2011, 18:49
    #37203263
u78
u78
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите соединиться с Cache 5.0 из .Net (VS 2010)
Отвечаю сам себе.

Работает DLL InterSystems.Data.CacheClient.dll

на стороне Cache должен быть класс который выполняет команды
Код: 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.
Class User.Xecute Extends %RegisteredObject
{

/// Читать
ClassMethod Read(What As %CacheString) As %Library.CacheString
{
	s $ZT="ReadErr"
	q @What
ReadErr
 q $ZE
}

/// Писать
ClassMethod Write(What As %CacheString, Value As %CacheString) As %Library.CacheString
{
	x "s "_What_"=Value"
}

/// Выполнять
ClassMethod Execute(What As %CacheString) As %Library.CacheString
{
      n io,file,start,last
      s io=$IO
      s file=+$J
      s start=1
      k ^SPOOL(file)
      o 2:(file:start)
      u 2
      x What
      u io
      c 2
      s last=$O(^SPOOL(file,""),-1)
      Quit file
}

}

На стороне .Net (C#) вот такой код:
Код: 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.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
using System;
using System.Drawing;
using System.Windows.Forms;
using InterSystems.Data.CacheClient;

namespace SimpleCache
{
    public partial class Form1 : Form
    {
        bool Connected = false;
        public static CacheObject.Factory factory = new CacheObject.Factory();

        /// <summary>
        /// В конструкторе прочитаем строку соединения из сохранённых настроек
        /// </summary>
        public Form1()
        {
            InitializeComponent();
            factory.SetOutput(edtResult);
            edtConnectionString.Text = Properties.Settings.Default.ConnectionString;
            ShowConnectionStatus();
        }

        /// <summary>
        /// Кнопка Соединить
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            string ConnReady = edtConnectionString.Text;
            Connect(ConnReady);
        }

        /// <summary>
        /// Кнопка Разъединить
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button2_Click(object sender, EventArgs e)
        {
            bool ok = factory.Disconnect();
            ShowConnectionStatus();
        }

        /// <summary>
        /// Показать статус соединения
        /// </summary>
        private void ShowConnectionStatus()
        {
            if (factory.IsConnected())
            {
                ShowConnected();
            }
            else
            {
                ShowDisconneced();
            }
        }

        /// <summary>
        /// Установить контролы в соответствии со статусом СОЕДИНЕНО
        /// </summary>
        private void ShowConnected()
        {
            panel1.BackColor = Color.Green;
            btnConnect.Enabled = false;
            btnDiconnect.Enabled = true;
            btnXecute.Enabled = true;
            edtCommand.Enabled = true;
            Connected = true;
            btnRead.Enabled = true;
            edtRead.Enabled = true;
        }

        /// <summary>
        /// Установить контролы в соответствии со статусом РАЗЪЕДИНЕНО
        /// </summary>
        private void ShowDisconneced()
        {
            panel1.BackColor = Color.Red;
            btnConnect.Enabled = true;
            btnDiconnect.Enabled = false;
            btnXecute.Enabled = false;
            edtCommand.Enabled = false;
            btnRead.Enabled = false;
            edtRead.Enabled = false;
            Connected = false;
        }

        /// <summary>
        /// Кнопка Выполнить
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnXecute_Click(object sender, EventArgs e)
        {
            if (Connected == false)
            {

            }
            dynamic CacheClassObj = factory.Static("User.Xecute");
            string x = edtCommand.Text;
            string file = CacheClassObj.Execute(x);
            string index = CacheClassObj.Read("$O(^SPOOL(\""+file+"\",\"\"))");
            while (index != "")
            {
                string res = CacheClassObj.Read("^SPOOL(\""+file+"\",\""+index+"\")");
                edtResult.Text += res;
                //edtResult.Lines[0] = res;
                index = CacheClassObj.Read("$O(^SPOOL(\"" + file + "\",\""+index+"\"))");
            }
            CacheClassObj.Execute("k ^SPOOL(\""+file+"\")");

        }

        /// <summary>
        /// Кнопка Прочитать
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnRead_Click(object sender, EventArgs e)
        {
            /*
            if (!factory.IsConnected())
            {
                button1_Click(object sender, EventArgs e);
            }
             * */
            dynamic CacheClassObj = factory.Static("User.Xecute");
            string what = edtRead.Text;
            string res = CacheClassObj.Read(what);
            edtResult.Text = res;
        }

        /// <summary>
        /// Кнопка вызова диалога соединения с Cache
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnShowConnect_Click(object sender, EventArgs e)
        {
            string conn = factory.ConnectDlg();
            edtConnectionString.Text = conn;
            Properties.Settings.Default.ConnectionString = conn;
            Properties.Settings.Default.Save();
        }

        /// <summary>
        /// Соединение с Cache
        /// </summary>
        /// <param name="ConnReady"></param>
        private void Connect(string ConnReady)
        {
            string conn = ConnReady;
            if (ConnReady == "")
            {
                conn = factory.ConnectDlg();
                edtConnectionString.Text = conn;
                Properties.Settings.Default.ConnectionString = conn;
                Properties.Settings.Default.Save();
            }

            bool ok = factory.Connect(conn);

            ShowConnectionStatus();
        }
    }
}
(не забыть добавить InterSystems.Data.CacheClient.dll в References проекта).

В аттаче собственно Solution для .Net и xml файл с классом Cache. Dll можно найти в дистрибутиве Cache.
...
Рейтинг: 0 / 0
07.04.2011, 10:40
    #37204060
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите соединиться с Cache 5.0 из .Net (VS 2010)
u78 ,

В Вашем примере используется ActiveX ( CacheObject.dll ), а не Caché Managed Provider for .NET ( InterSystems.Data.CacheClient.dll )
Примеры работы с CacheObject.dll можно найти здесь . Примеры приведены для Delphi, но не суть важно.
Статью удобнее читать предварительно импортировав её в стандартную документацию Caché (инструкции можно найти в конце статьи).

Если есть необходимость работы с Caché на низком уровне (глобалы, программы), то посмотрите VisM :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
using System;

namespace test
{
  class Program
  {
    public static void Main(string[] args)
    {
      var vism=new VISMLib.VisMClass();
      vism.Connect("CN_IPTCP:127.0.0.1[1972]:_SYSTEM:@sys","mytag");
      vism.NameSpace="SAMPLES";
      vism.Execute(@"set VALUE=$ZV_"" ""_$ZU(5)");
      Console.WriteLine(vism.VALUE);
      vism.DeleteConnection();
      
      Console.Write("Press any key to continue . . . ");
      Console.ReadKey(true);
    }
  }
}

PS: есть ещё веб-сервисы, но не думаю, что это Ваш вариант.
...
Рейтинг: 0 / 0
07.04.2011, 10:58
    #37204103
u78
u78
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите соединиться с Cache 5.0 из .Net (VS 2010)
servit,

Да, действительно, я ошибся, в References у меня ActiveX Interop.CacheObject .
Спасибо.
...
Рейтинг: 0 / 0
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / помогите соединиться с Cache 5.0 из .Net (VS 2010) / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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