首页 > 解决方案 > 尝试连接 DB2 数据库时出现 SQL 错误 -4903

问题描述

尝试使用 SQC 代码连接到 DB2 数据库时,我收到一个 SQL 错误代码 -4903(这是一个 ANSI C 应用程序,因此我需要使用 SQC 进行 SQL 查询)。当我查看 IBM 的网站以了解 -4903 的含义时,它所说的只是“函数名称的参数 n 的长度无效”。但是我不知道它指的是哪个参数或函数。我曾尝试查看 SQLCA 对象成员,但我无法在 Visual Studio 2015 中看到它们。

这是在 Visual Studio 2015 中调试的 ANSI C 应用程序。我可以使用 DB2 命令提示符连接到同一个数据库(即,通过运行“db2 connect to dbname user username using password”。但是当我尝试在代码我得到-4903错误。我也在两个不同的操作系统Windows 7和Windows 10上试过这个。我有同事在Windows 7机器上没有问题。

while ((retry++ < 3)
        || (sqlca.sqlcode == -30080)
        || (sqlca.sqlcode == -900  ) )
    {
        EXEC SQL CONNECT TO :DBName USER :userid USING :pword;

        if ((SQLCODE == 0 ) || (SQLCODE == (-1026)))
        {
            return(1);
        }
        else
        {
            dbLogAudit(KLCB, PLCB, KLLOGSEV(T),
                "Retry DBInit/sqlca.sqlcode : %i", sqlca.sqlcode);
        }
    }

我希望 SQLCODE 为 0,这表示连接成功,并且函数将 1 返回给它的调用者。但是 sqlca.sqlcode 变量是 -4903(我在上面描述过)。

编辑:我发现参数被传递到错误消息中。完整的错误文本是“函数 sqlastrt_trusted 的参数 runtime_pid 的长度无效”。

标签: sqlvisual-studio-2015db2

解决方案


我解决了我自己的问题。感谢毛帮助调试这个。

我的 DB2 开发环境运行的是 8.1.0 版,它使用 162 字节来存储名为“sqla_program_id”的结构。但是,对同一结构使用 292 字节的运行时环境是 10.5 版。一旦我将我的开发 DB2 实例升级到 v10.5,它就像一个魅力。


推荐阅读