InterSystems Caché ODBC - 最大结果长度
InterSystems Caché ODBC - max result length
我使用 ODBC 在 InterSystems Caché 数据库上进行查询。
在 C# 中我这样做:
DbCommand.CommandText = "select Class_getTablesMetaXml('globalName') As returnStr";
OdbcDataReader reader = DbCommand.ExecuteReader();
一切正常,但如果 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( @global@("tab", iTab) )
quit:(iTab = "")
set xmlString = xmlString _ "<table>"
set xmlString = xmlString _ "<title>"_@global@("tab", iTab, "Name")_"</title>"
set xmlString = xmlString _ "<indexTab>"_iTab_"</indexTab>"
set i=""
set propCount = 0
for
{
set propCount = propCount + 1
set i = $order( @global@("tab",iTab,"sMeta", i) )
quit:(i = "")
set xmlString = xmlString _ "<col>"
set xmlString = xmlString _ "<title>" _ ..zcvXml(@global@("tab",iTab,"sMeta",i)) _ "</title>"
set xmlString = xmlString _ "<name>prop" _ propCount _ "</name>"
set xmlString = xmlString _ "<format>" _ ..zcvXml($g(@global@("tab",iTab,"sMeta",i,"Format"))) _ "</format>"
set xmlString = xmlString _ "</col>"
}
set xmlString = xmlString _ "</table>"
}
set xmlString = xmlString _ "</global>"
q xmlString
}
我的 Caché 版本是:2009.1.3(Build 704U)
在配置中我检查了:启用长字符串
查询 "select Class_getTablesMetaXml('globalName') As returnStr"
后,我得到 XML 字符串。但如果它长于 16374,我在使用 ODBC 进行查询的 C# 应用程序中得到空字符串。我需要解决它或做一些事情,比如获取 15000 长度的字符串,然后是我将在我的应用程序 (c#) 中连接的第二个字符串,但我绝对不知道该怎么做。
要使用 CStream%String,您应该在 SqlProc 中将 return 类型从 %String 更改为 %GlobalCharacterStream,并更改您的代码,因为它是 Stream。为了生成 XML,请尝试使用 %XML.Writer
我使用 ODBC 在 InterSystems Caché 数据库上进行查询。
在 C# 中我这样做:
DbCommand.CommandText = "select Class_getTablesMetaXml('globalName') As returnStr";
OdbcDataReader reader = DbCommand.ExecuteReader();
一切正常,但如果 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( @global@("tab", iTab) )
quit:(iTab = "")
set xmlString = xmlString _ "<table>"
set xmlString = xmlString _ "<title>"_@global@("tab", iTab, "Name")_"</title>"
set xmlString = xmlString _ "<indexTab>"_iTab_"</indexTab>"
set i=""
set propCount = 0
for
{
set propCount = propCount + 1
set i = $order( @global@("tab",iTab,"sMeta", i) )
quit:(i = "")
set xmlString = xmlString _ "<col>"
set xmlString = xmlString _ "<title>" _ ..zcvXml(@global@("tab",iTab,"sMeta",i)) _ "</title>"
set xmlString = xmlString _ "<name>prop" _ propCount _ "</name>"
set xmlString = xmlString _ "<format>" _ ..zcvXml($g(@global@("tab",iTab,"sMeta",i,"Format"))) _ "</format>"
set xmlString = xmlString _ "</col>"
}
set xmlString = xmlString _ "</table>"
}
set xmlString = xmlString _ "</global>"
q xmlString
}
我的 Caché 版本是:2009.1.3(Build 704U)
在配置中我检查了:启用长字符串
查询 "select Class_getTablesMetaXml('globalName') As returnStr"
后,我得到 XML 字符串。但如果它长于 16374,我在使用 ODBC 进行查询的 C# 应用程序中得到空字符串。我需要解决它或做一些事情,比如获取 15000 长度的字符串,然后是我将在我的应用程序 (c#) 中连接的第二个字符串,但我绝对不知道该怎么做。
要使用 CStream%String,您应该在 SqlProc 中将 return 类型从 %String 更改为 %GlobalCharacterStream,并更改您的代码,因为它是 Stream。为了生成 XML,请尝试使用 %XML.Writer