请问在oci 程序中,怎么传入绑定一个_int64的数值(win7 (32位系统),oracle10g)

请教在oci 程序中,如何传入绑定一个__int64的数值(win7 (32位系统),oracle10g)
环境: win7,vs2008,oracle10g 客户端。 oracle10g 服务端
如下:我在 oracle 里有一个表字段为 number(15) 此值超过 32位的int型.
有一语句类似: select * from t where col=xxx 此时,需要bind,64位的值
//如下:
void bindInt64(char* sFieldName,void* value)
{
OCIBind* bind; 
sb4 iLen=(sb4)sizeof(_int64);//8字节 

hOciHandle.errCode =OCIBindByName(hOciHandle.hSql,&bind,hOciHandle.hErr,
   (OraText*)sFieldName,strlen(sFieldName),(dvoid*)value,iLen,SQLT_LNG,//SQLT_INT 这个只有 32位
   NULL,NULL,NULL,0,NULL,OCI_DEFAULT);
doError(hOciHandle.errCode);//处理错误,略.
}
//结果老是找不到数据. 上面调用的方法如下:
__int64 iValue=xxxx;
  bindInt64("col",(void*)&iValue);
另:我查了下资料,SQLT_INT 好象是 32位的,因此不能用(用了也确实找不到)
那这个64位的如何绑啊?
其他方面都没有问题,如果是 32位的,我使用 SQLT_INT 肯定能找到数值的。
我找了下资料,发现  OCINumber 是一种 21 字节或22字节的类型,好象存储的数据方式有点怪,不知道我这种用法有没问题?
上面,SQLT_LNG 我换成SQLT_NUM,SQLT_VNU 也不行。
------解决方案--------------------
可以转换字符串,然后取值的时候取出字符串后再转换会INT64
------解决方案--------------------
这种方法我也考虑过,不过想想不太方便,毕竟oci 直接提供了方法吧。
不过我用:
 hOciHandle.errCode =OCINumberFromInt(hOciHandle.hErr,value,sizeof(__int64),OCI_NUMBER_SIGNED,(OCINumber*)&number);
doError(hOciHandle.errCode);
这种转换后再传进去也是失败。
------解决方案--------------------
直接拼写SQL, 不用bind方式。
------解决方案--------------------
我是学习用的,一个是想弄明白,另一个是想顺便想写类的调用。
------解决方案--------------------

//调用bind
void bindInputTest(char* sFieldName,void* value)
{
  OCIBind* bind; 
hOciHandle.errCode =OCIBindByName(hOciHandle.hSql,&bind,hOciHandle.hErr,
   (OraText*)sFieldName,strlen(sFieldName),(void*)value,4,SQLT_INT,
   NULL,NULL,NULL,0,NULL,OCI_DEFAULT);
doError(hOciHandle.errCode);
}

//调用方式,能找到数据。
int ii=22222;
bindInputTest("id_nummber",&ii);

//但是,如果我这样使用,就是再调用一个函数,函数里调用这个:bindInputTest() 函数就找不到数据了。。。
//调用bind
void bindInputTest123()
{
int ii=22222;
bindInputTest("id_nummber",&ii)
}

表里的数据都很少,肯定都小于 int 32位的范围。

----这是为什么啊?