2016-08-18 73 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」。