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



我正试图使用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虚拟机上做了一个测试,这个测试可以使用完全相同的代码。我能够使用pyodbc和Python在我的Windows机器上连接,使用等效代码也很好,所以这一定是Windows上的ODBC库的某种问题。我想在这一点上,除非有其他想法,否则我会尝试其他库,或者与库作者一起打开一个错误报告。

只是一个未知数-系统CCSID设置为什么?DSPSYSVAL QCCSID。如果它是65535,则意味着系统语言是"二进制-不翻译"。如果是这种情况,您可能需要在连接字符串中设置CCSID。

我在Ubuntu 18和Centos 8上也遇到了同样的问题(不过使用了.net)。它在Centos 7上运行。找不到任何调整odbc配置或连接字符串的解决方法。但在将驱动程序升级到1.1.0.13之后,这个问题得到了解决。

相关内容

  • 没有找到相关文章

最新更新