【问题标题】:InterSystems Caché ODBC - max result lengthInterSystems Caché ODBC - 最大结果长度
【发布时间】:2015-07-13 20:41:25
【问题描述】:

我使用 ODBC 来查询 InterSystems Caché db。

在 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#)中连接的第二个字符串,但我绝对不知道该怎么做。

【问题讨论】:

  • 由于我不是 c# 开发人员,您能再添加一些这样的代码吗?因为我在其他语言和工具中无法实现这样的麻烦。我尝试了 JDBC 和一些 ODBC 工具。
  • 我已经编辑了我的问题:)
  • 你用的是哪个版本的?
  • 我再次编辑了我的问题 :)
  • 我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。

标签: c# intersystems-cache intersystems


【解决方案1】:

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

【讨论】:

  • 感谢 %XML.Writer 推荐
猜你喜欢
  • 1970-01-01
  • 2013-06-15
  • 2017-05-07
  • 2020-04-21
  • 1970-01-01
  • 1970-01-01
  • 2011-09-20
  • 2015-12-08
  • 2015-04-02
相关资源
最近更新 更多