2011-08-16 61 views
0

我的程序从文件中读取记录,并为文件中的每个记录从数据库中读取值。我已经在我的Pro * C程序中声明了一个主机变量。我在程序中的一个选择查询中使用了该主机变量。变量的内存不会被清除每个记录。在读取值和存储在主机变量的问题?

例如,对于第一条记录,sql查询将提取“ABCD”。然后对于第二条记录,查询将提取“EFGHIJKL”。对于第三个记录,DB中的实际值为“GHI”,但内存不会被清除,并打印出“GHIHIJKL”。

如何解决?

回答

0

您应该使用数据库调用提供的长度,为您提供处理包含NUL字节的数据的能力。

或者您用给定的长度手动终止您的字符串。这只适用于“无NUL”字符串。

1

这里基本上你应该做的。还有一个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.