我使用ODBC在InterSystemsCachédb上进行查询。InterSystemsCachéODBC - 最大结果长度
在C#我做的:
DbCommand.CommandText = "select Class_getTablesMetaXml('globalName') As returnStr";
OdbcDataReader reader = DbCommand.ExecuteReader();
一切都OK,但如果returnStr超过16374个字符returnStr似乎是在C#空。
根据文档(http://docs.intersystems.com/ens20082/csp/docbook/DocBook.UI.Page.cls?KEY=RSQL_datatype#RSQL_datatype_longstrings)我应该使用CStream%String
数据类型,但我不知道如何实现它。
我的缓存过程的方法是这样的:
ClassMethod getTablesMetaXml(globalName As %String) As %String [ SqlProc ]
{
set global = "^"_globalName
set xmlString = "<global><name>"_globalName_"</name>"
set tableCount = 0
set iTab = ""
for
{
set tableCount = tableCount+1
set iTab = $order(@[email protected]("tab", iTab))
quit:(iTab = "")
set xmlString = xmlString _ "<table>"
set xmlString = xmlString _ "<title>"[email protected]@("tab", iTab, "Name")_"</title>"
set xmlString = xmlString _ "<indexTab>"_iTab_"</indexTab>"
set i=""
set propCount = 0
for
{
set propCount = propCount + 1
set i = $order(@[email protected]("tab",iTab,"sMeta", i))
quit:(i = "")
set xmlString = xmlString _ "<col>"
set xmlString = xmlString _ "<title>" _ ..zcvXml(@[email protected]("tab",iTab,"sMeta",i)) _ "</title>"
set xmlString = xmlString _ "<name>prop" _ propCount _ "</name>"
set xmlString = xmlString _ "<format>" _ ..zcvXml($g(@[email protected]("tab",iTab,"sMeta",i,"Format"))) _ "</format>"
set xmlString = xmlString _ "</col>"
}
set xmlString = xmlString _ "</table>"
}
set xmlString = xmlString _ "</global>"
q xmlString
}
我的缓存的版本是:2009年1月3日(建设704U)
在配置方面我已经检查:启用长字符串
查询"select Class_getTablesMetaXml('globalName') As returnStr"
后,我得到XML字符串。但是如果它的长度超过16374,我会在我的C#应用程序中使用空字符串进行查询。我需要解决它或做类似15000长度的字符串,然后在我的应用程序中连接的第二个字符串(c#),但我绝对不知道该怎么做。
由于我不是c#开发人员,您能否添加更多此类代码?因为我无法在其他语言和工具中遇到这种麻烦。我尝试了JDBC和一些ODBC工具。 – DAiMor
我编辑了我的问题:) – mrfazolka
您使用哪个版本? – DAiMor