DB2 ODBC 驱动程序无法识别?

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

我在 Docker 容器内安装了一个 DB2 实例。现在我尝试使用 Windows 11 x64 从一个简单的 Golang 应用程序连接到它,但出现此错误:

连接数据库时出错:无法 ping 数据库:SQLDriverConnect:{IM002} [Microsoft][Driver Manager ODBC] 未找到数据源名称且未指定默认驱动程序。

我尝试从IBM下载DB2驱动程序(https://www.ibm.com/support/pages/db2-odbc-cli-driver-download-and-installation-information),在C中解压/安装它:/Program Files,将其添加到我的 PATH 环境变量中,重新启动我的电脑。 之后我仍然没有在“ODBC 数据源管理器”驱动程序列表中看到该驱动程序。

这是我的连接代码:

import (
"database/sql"
"fmt"
_ "github.com/alexbrainman/odbc"
)

func ConnectDB() (*sql.DB, error) {
    connStr :=     "DATABASE=TEST1;HOSTNAME=localhost;PORT=50000;PROTOCOL=TCPIP;UID=db2inst1;PWD=db2inst1;"

    db, err := sql.Open("odbc", connStr)
    if err != nil {
    return nil, fmt.Errorf("failed to open database: %v", err)
}

    if err = db.Ping(); err != nil {
    return nil, fmt.Errorf("failed to ping database: %v", err)
}

    fmt.Println("Connected to DB2 database!")
    return db, nil
}

这是我的 main.go:

import (
"database/sql"
"go-db-check/db"
"log"
)

func main() {
    database, err := db.ConnectDB()
    if err != nil {
    log.Fatalf("Error connecting to database: %v", err)
}
    defer func(database *sql.DB) {
    closeErr := database.Close()
    if closeErr != nil {
        log.Println("Error during connection shutdown: ", err)
    }
}(database)
}
database go db2 odbc database-connection
1个回答
0
投票

我假设您想在 ms-windows 上运行 go,并从 golang 连接到恰好位于 docker 容器中的 Db2 数据库。

使用 IBM 的 go 接口,可从 https://github.com/ibmdb/go_ibm_db

获取

完全理解自述文件中的所有细节并使 IBM 的示例程序正常运行是值得且必要的。

此界面将自动下载一个名为“clidriver”的 odbc 驱动程序(默认情况下会这样做)。 这是一个用于 Db2 的小型 odbc 驱动程序,您可以通过名为 db2dsdriver.cfg 的 xml 文件进行配置。它没有 GUI,而是使用命令行工具来配置它、排除故障以及各种其他功能。 clidriver 工具均记录在主要的 Db2 在线知识中心的许多不同页面上,可通过以下网址间接访问: https://www.ibm.com/docs/en/db2/11.5?topic=dsd-installing-data-server-driver -odbc-cli-软件-windows-操作系统

在 go 中编程时,您可以选择 either 在 go 脚本中包含完整的连接字符串,or 仅包含 DSN(所有其他连接详细信息都存储在外部 db2dsdriver.cfg 中,您可以使用文本编辑器 交替通过此处描述的特殊命令行 https://www.ibm.com/docs/en/db2/11.5?topic=commands-db2cli-db2-interactive-cli )

开始时,将整个连接字符串放入 go 脚本中通常更容易(因为这意味着不需要外部配置),但这可能不适合企业使用。

默认情况下,通过完整连接字符串描述的 DSN 将不会出现在 MS-windows 的 odbcad32 GUI 中。如果需要,适当的配置(

db2cli -setup
...和
db2cli registerdsn 
...)可能会有所帮助。

另外,您必须确保您的 docker 配置公开 Db2 实例正在侦听的端口号,并且该端口在 MS-windows 软件防火墙上为入站/出站 TCP 流量打开,并且您在中引用了正确的端口号您的连接字符串或配置文件。

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