我的程序从文件中读取记录,并为文件中的每个记录从数据库中读取值。我已经在我的Pro * C程序中声明了一个主机变量。我在程序中的一个选择查询中使用了该主机变量。变量的内存不会被清除每个记录。在读取值和存储在主机变量的问题?
例如,对于第一条记录,sql查询将提取“ABCD”。然后对于第二条记录,查询将提取“EFGHIJKL”。对于第三个记录,DB中的实际值为“GHI”,但内存不会被清除,并打印出“GHIHIJKL”。
如何解决?
我的程序从文件中读取记录,并为文件中的每个记录从数据库中读取值。我已经在我的Pro * C程序中声明了一个主机变量。我在程序中的一个选择查询中使用了该主机变量。变量的内存不会被清除每个记录。在读取值和存储在主机变量的问题?
例如,对于第一条记录,sql查询将提取“ABCD”。然后对于第二条记录,查询将提取“EFGHIJKL”。对于第三个记录,DB中的实际值为“GHI”,但内存不会被清除,并打印出“GHIHIJKL”。
如何解决?
您应该使用数据库调用提供的长度,为您提供处理包含NUL字节的数据的能力。
或者您用给定的长度手动终止您的字符串。这只适用于“无NUL”字符串。
这里基本上你应该做的。还有一个Pro * C内联设置应该可以自动完成,但是我遇到了一些问题,所以我更喜欢这个快速简单的解决方案。
VARCHAR var[50+1]; /* Add 1 char more than the size of the queried column of the database */
EXEC SQL SELECT thing INTO :var WHERE /* whatever */
if(sqlca.sqlcode == 0)
var.arr[var.len] = 0; /* Add the \0 char at the end of you var.