将ODBC转到iSeries:SQL0104-无法成功转换消息

问题描述 投票:0回答:2

我正在尝试使用ODBC通过以下方式查询IBM iSeries服务器(IBM i)https://code.google.com/p/odbc/。我似乎认为我在第一次测试时就已经进行了一段时间,但是此后已更新服务器,更新了iSeries Access,并且我正在使用Go 1.3.1

似乎连接正常,但查询会导致错误。我猜我在驱动程序或查询正确的地方丢失了一些东西编码,但是我不确定该如何解决,或者它是否可能是odbc库的错误,我应该在那儿提出一个问题。

我的代码如下:

package main

import (
    _ "code.google.com/p/odbc"
    "database/sql"
    "fmt"
    "log"
)

func main() {
    db, err := sql.Open("odbc", `
        Driver=iSeries Access ODBC Driver;
        System=myhost;
        Uid=myuserid;
        Pwd=mypassword`)
    if err != nil {
        log.Fatal(err)
    }
    defer db.Close()

    rows, err := db.Query("SELECT 1 FROM sysibm.sysdummy1")
    if err != nil {
        log.Fatal(err)
    }

    var number int
    for rows.Next() {
        rows.Scan(&number)
    }
    fmt.Println(number)
}

运行以上命令时,出现以下错误消息:

SQLPrepare: {42000} [IBM][System i Access ODBC Driver][DB2 for i5/OS]SQL0104 - Error message text unavailable.
Message can not be translated successfully.

任何想法出了什么问题,我可以检查什么,或者如何使它起作用?

更新

我在Linux VM上进行了测试,并且可以使用该确切的代码。我可以使用Python将pyodbc与Windows一起使用等效代码很好地连接到Windows机器上,因此,这在Windows上的此ODBC库中一定有问题。我认为,除非有其他想法,否则我将尝试其他一些库或与库作者一起打开错误报告。

go odbc ibm-midrange
2个回答
0
投票

只是在黑暗中开枪-系统CCSID设置为什么? DSPSYSVAL QCCSID。如果是65535,则表示系统语言为“二进制-不翻译”。如果是这种情况,您可能需要在连接字符串中设置CCSID。


0
投票

我在Ubuntu 18和Centos 8上也有同样的问题(虽然使用.net)。它适用于Centos7。找不到调整odbc配置或连接字符串的任何解决方法。但是在将驱动程序升级到1.1.0.13之后,该问题已修复。

© www.soinside.com 2019 - 2024. All rights reserved.