2016-08-18 371 views
0

我想保存(和加载)一个合理的长字符串缓存类字符串(MAXLEN = 1024000)属性。Intersystems缓存字符串作为%Stream.GlobalCharacter

串大约32,000个字符长,而不是存储字符串内容(这是它的价值JSON对象),它存储

[email protected]%Stream.GlobalCharacter

How data is saved

当我尝试加载和在我的C#程序中的字符串内容我从字面上得到上面的字符串,我没有得到JSON。当通过Cache web和终端接口查看表格时,我也可以看到上面的字符串。

我有另一个约23,000个字符长的JSON字符串,保存和加载没有问题。

我明白[email protected]%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

这有点难以帮助,虽然我不确定如何保存和加载数据,它只是.Net代码或COS。如果可能的话,需要来自双方的代码的一些例子。 – DAiMor

+0

对不起,使用C#代码更新了问题 –

+1

我对.Net并不是很熟悉,但是因为我看到您使用了ToString(),所以在这种情况下,您当然只会获得此对象的类。我认为你应该在转换为String之前得到这个对象。 – DAiMor

回答

0

去过与Intersystems交谈(感谢Nicole),解决方案是将属性类型设置为%Stream.GlobalCharacter而不是%String。

这是从C#角度无缝作为一个字符串被自动转换到它,你可以使用的ToString()方法来重新获得串出。

从InterSystems的

下图:

我一直在寻找到这一点,并我有一个关于 理论到底是怎么回事。在高速缓存中的某些版本我想,当 将超过一定规模的字符串(我相信16K字符,但 我不太确定)到通过ODBC缓存数据库,它是 自动转换为字符流。但由于物业 被定义为服务器上的%字符串,字符串文字 “[email protected]%Stream.GlobalCharacter”被存储在数据库中,而不是 OREF指向流的内容。然后,当您去选择定义值 时,它只是字符串“[email protected]%Stream.GlobalCharacter”。