我在VC++里通过oci向oracle插入数据。所插入的数据类型是在VC++里通过“using namespace std”定义的是string类型,sql语句是INTO SYS.TLE1(T_INUM,T_ECLA,T_IDES) VALUES(:sub1,:sub2,:sub3);sub1到sub3都是string类型数据,oracle表中的字段数据类型为varchar2,sub1的长度为5,sub2的长度为1,sub3的长度为8;表中对应字段的长度分别也是5,1,8。
其中,sub1的长度用sizeof求的话是16,用sub1.length()求的话是5,请问两者有什么不同。为什么插入到数据库里后显示的是乱码?请赐教。谢谢了。
其中,sub1的长度用sizeof求的话是16,用sub1.length()求的话是5,请问两者有什么不同。为什么插入到数据库里后显示的是乱码?请赐教。谢谢了。
select length('test汉字字符') from dual;汉字字符是占两位的,使用lengthB再试一下。
(dvoid *)num1, (sword)17, SQLT_STR,
(dvoid *)&ind1, (ub2 *)0, (ub2 *)0,
(ub4) 0, (ub4 *) 0, (ub4) OCI_DEFAULT);建议详细琢磨OCIDefineByPos()和OCIBindByName()的各种参数含义 另外,建议lz去8i、9i的安装目录看oracle提供的demo,本人就是通过demo熟悉OCI的。
首先还是不能用std:string;
再者,用char num1[17]定义后,用OCIBindbypos时,后面的类型参数要用SQLT_STR,而不是SQLT_CHR.就搞定了。
谢谢大家了。
谢谢sailing0123 。
首先还是不能用std:string;
再者,用char num1[17]定义后,用OCIBindbypos时,后面的类型参数要用SQLT_STR,而不是SQLT_CHR.就搞定了。
谢谢大家了。
谢谢sailing0123 。