2015-05-04 80 views
1

我使用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#),但我绝对不知道该怎么做。

+0

由于我不是c#开发人员,您能否添加更多此类代码?因为我无法在其他语言和工具中遇到这种麻烦。我尝试了JDBC和一些ODBC工具。 – DAiMor

+0

我编辑了我的问题:) – mrfazolka

+0

您使用哪个版本? – DAiMor

回答

1

要使用CStream%字符串,您应该将返回类型从%String更改为您的SqlProc中的%GlobalCharacterStream,并更改您的代码,因为它是Stream。并且为了生成XML,请尝试使用%XML.Writer

+0

Thx for%XML.Writer推荐 – mrfazolka