【发布时间】:2019-06-25 22:59:17
【问题描述】:
我在尝试使用 SQC 代码连接到 DB2 数据库时收到 -4903 的 SQL 错误代码(这是一个 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 的长度无效”。
【问题讨论】:
-
如果有同事在同一可执行程序正常工作,而在至少一个可执行文件失败的工作站上,那么你有一个环境差异。您的工作是找出工作环境和失败环境之间可能存在的差异,例如 Db2 客户端的确切修订包,或其配置/设置/或用户设置,或者可执行程序实际上是不同的工作和失败的环境。客户端诊断文件中可能有更多详细信息。您还可以在客户端上跟踪 CLI。
-
所以我找到了错误信息,如果有帮助的话。请参阅上面的编辑。我尝试在客户端上启用跟踪,但遇到了一些问题,将继续尝试。
-
证明 CLI 库在工作环境和故障环境之间是相同的(版本 + 修复包 + 位数 + dll 文件大小),尤其是在连接到 z/OS 或 i 系列时。
-
你知道最好的方法吗?很抱歉,我对 DB2 很陌生,我公司的大多数开发人员也是如此。我确实找到了这篇文章groups.google.com/forum/#!topic/comp.lang.cobol/fRLcg4XLjF0,最后的回复让我相信这是开发和运行时版本不同的问题
-
如果你有一个正常工作的 Win7 和一个失败的 Win7(对于相同的二进制文件),比较
db2level命令的输出(如果它存在),否则比较包含Db2 客户端产品(示例位置 c:\Program Files\IBM\SQLLIB ),但您的位置可能不同。
标签: sql visual-studio-2015 db2