Строка кэша Intersystems в виде%Stream.GlobalCharacter
Я пытаюсь сохранить (и загрузить) достаточно длинную строку в свойство Cache Class String(MAXLEN=1024000).
Длина строки составляет около 32 000 символов, и вместо хранения содержимого строки (которое по своему значению является объектом JSON) она хранит
2@%Stream.GlobalCharacter
Когда я пытаюсь загрузить содержимое строки в моей программе на C#, я буквально получаю строку выше, я не получаю JSON. При просмотре таблицы через веб-интерфейс и интерфейс терминала Cache я также вижу приведенную выше строку.
У меня есть другая строка JSON длиной около 23 000 символов, которая сохраняет и загружает без проблем.
Я это понимаю 2@%Stream.GlobalCharacter
это способ хранения данных, но я хотел бы легко иметь возможность загрузить / сохранить его в виде строки.
Обновить
Я пытаюсь сохранить данные в моем приложении C# ASP.Net следующим образом.
sql = "INSERT INTO Namespace.Table ( Name, Active, Revision, Definition ) VALUES ( ?, 1, ?, ? )";
cC = new CacheCommand(sql, dbConn);
cC.Parameters.Add(new CacheParameter("name", formType)); // string
cC.Parameters.Add(new CacheParameter("revision", revision)); // int
cC.Parameters.Add(new CacheParameter("definition", formData)); // string
cC.ExecuteNonQuery();
Я загружаю данные следующим образом
string sql = "SELECT TOP 1 * FROM Namespace.Table WHERE Active = 1 AND Name = ? ORDER BY Revision DESC";
CacheCommand cC = new CacheCommand(sql, dbConn);
cC.Parameters.Add(new CacheParameter("name",formType));
CacheDataReader rdr = cC.ExecuteReader();
while(rdr.Read())
{
string json = rdr["Definition"].ToString();
}
1 ответ
Говорили с Intersystems (спасибо Николь), и решение состоит в том, чтобы установить тип свойства%Stream.GlobalCharacter вместо%String.
Это легко с точки зрения C#, так как строка автоматически преобразуется в него, и вы можете использовать метод.ToString(), чтобы снова вывести строку.
Ниже от Интерсистемс:
Я изучил это немного дальше, и у меня есть теория о том, что здесь происходит. В некоторых версиях Caché я думаю, что при вставке строки с определенным размером (я думаю, 16k символов, но я не совсем уверен) в базу данных Caché через ODBC, она автоматически преобразуется в поток символов. Но так как свойство определено как% String на сервере, строковый литерал "2@%Stream.GlobalCharacter" хранится в базе данных вместо OREF, указывающего на содержимое потока. Затем, когда вы выбираете значение Definition, это просто строка "2@%Stream.GlobalCharacter".