尝试使用SQC代码连接到DB2数据库时,我得到-4903的SQL错误代码(这是ANSI C应用程序,因此我需要对SQL查询使用SQC)。当我查看IBM网站以了解-4903的含义时,它的意思是“函数名的参数n的长度无效”。但是我不知道它指的是哪个参数或功能。我尝试查看SQLCA对象成员,但是在Visual Studio 2015中看不到它们。
这是在Visual Studio 2015中调试的ANSI C应用程序。我能够使用DB2命令提示符连接到同一数据库(即,通过运行“使用密码将db2连接到dbname用户用户名”)。但是,当我尝试在代码中执行此操作会收到-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的长度无效”。
答案 0 :(得分:0)
我解决了自己的问题。感谢Mao提供的调试帮助。
我用于DB2的开发环境正在运行版本8.1.0,该版本使用162个字节用于名为“ sqla_program_id”的结构。但是,对于同一结构使用292个字节的运行时环境为10.5版。将开发DB2实例升级到v10.5后,它就像一个魅力。