首先谢谢各位,初次接触 odbc连接oracle, 碰到问题,困扰好久,希望高手能解答。用的是unixodbc   odbc3.0
前面分配环境句柄,分配连接句柄,连接数据库就不说了。现在数据库已经连接上。
test 表有多个字段,每个字段有多条记录。
小弟想设计一个函数,只须传入select语句,就能够把结果集复制到一个二维的字符串数组中,列是字段,每行是每条记录,下面是一小段代码,有些问题。真心求教。
char string1[] = "select col1,cole from test";  //作为例子的一个sql语句。
n = 255;
SQLALLocHandle(SQL_HANDLE_STMT,dbc,&stmt)   //分配了一个语句句柄。
ret = SQLExecDirect(stmt,string1,SQL_NTS);  //执行select语句。
SQLNumResultCols(stmt,length);          //获得一共有多少列。
char **ptr = new char *[*length];
for(int i =1;i < *length;i++)
{
   ptr[i] = new char[n];                   //分配了一个一维字符串数组用于存储select的结果 列数为有多少列
                                           // 行数位有多少条记录。
}
for(int j = 1; j < *length; j++)
{
   SQLBindCol(stmt,j,SQL_C_CHAR,ptr[j],n,&enind) //绑定每列到 ptr[j];
}if(!SQL_SUCCESSED(ret))
{
   //异常处理;
}
else

   while(SQL_SUCCESSED(SQL_FETCH(stmt)))
   {
       for(int j = 0; j < *length ;j++)
       { 
            cout << ptr[j] <<endl;          //取出多行,这里代买没写完,写了这个输出只是为了验证下,结果发现
                                            //问题。
       }
   }
}
问题1) 在表中所有字段都有值的时候没有问题。能够正确取出。单当某字段为空的时候,出现问题,取出的字段为不可控的值,曾经怀疑过时内存分配问题,但是看了看好像没有问题,某些位空的字段取出的值不正常。
问题2)如有有一条记录的字段复制了,下一条记录相应字段为空,可是取出来的是上一条记录对应字段的值,就是空没有被复制给变量。 
例如 表结构   col1 col2
               1     2  
               3
第一行 ptr[1] = 1, ptr[2] = 2 没有问题。
第二行 ptr[1] = 3, ptr[2] = 2  出现问题,因为取第二行的时候照理说应为ptr[2]应为空;