你在oracle的目录下去找找cdemo81.c
这个例子对你又帮助

解决方案 »

  1.   

    flowerofwind(现实很残酷):
    我知道问题比较大, 分您不用担心, 我可以叫我的朋友也给分。
    请问您的E-MAIL地址是多少, 我的E-MAIL地址是[email protected]
      

  2.   

    呵呵,不是这个意思,分没用,关键是你的问题比较抽象,能详细说一下你的需求吗?
    我的mail:[email protected]
      

  3.   

    需求其实很简单。举个例: 通过OCI从EMP表中提取数据, 存到一个.txt文件中, 然后发到另外的一台机器的指定目录下, 另外的一个程序去读这个txt文件的数据, 写到另外的一张表里面(表结构完全相同), 我还没有写到表里面, 打印就是乱码。读文件, 写文件我用的是Fwrite(), Fread()。 
    我是用cdemo81.c的方法, 先写到数组中, 然后写到文件里面。但是没有进行类型转换。数组是TEXT类型的, 而EMP表中number, string, date类型。这时候需不需要类型转换, NUMBER类型转换的时候报无效的NLS参数。 
    所以我想写到结构中, 定义的结构如下: 

    OCINumber EMPNO 
    OCIString ENAME 
    OCIString JOB 
    OCINumber MGR 
    OCIDate HIREDATE 
    OCINumber SAL 
    OCINumber COMM 
    OCINumber DEPTNO 

    我就不知道SQL语句怎么和结构连接起来。是不是需要用 
    OCIBindArrayOfStruct(), OCIDefineArrayOfStruct()和OCIBindObject()函数。 谢谢各位高手指教, 本人不胜感激!!! 
      

  4.   

    这个用PROC是很好实现的,但OCI我就不会了。
      

  5.   

    从表里面去数据导结构,然后存入文件比较好实现你可以这样:
    只需要用到OCIPrepare(),OCIDefineByPos(),OCIExecute()等函数,你可以把表里面的纪录一条一条的去出来存入vector(c++标准内裤中的变长数组),然后你可以做一个外部程序,用重载操作符的办法存到你的结构中,然后邪道文件里面,其实重载的好处就是你可以在转换的时候不考虑数据类型比如说你可以重载>>,这样调用result>>emp.EMPNO >> emp.ENAME >> ...
    至于你把文件读到表里面,这个我没做过,因为我处理oci插入的时候是假定调用的我接口的人把插入语句拼成字符串传给我,然后处理起来就十分的简单,对于你的需求,这样显然比较难为调用的人.可能就要用到你所说的OCIBindArrayOfStruct()等函数了
      

  6.   

    但我用fprinpf和fscanf就不会乱码,为什么fwrite, fread就不行呢?
      

  7.   

    fwrite,fread是二进制流输入输出,确保你的文件是二进制吗?
      

  8.   

    我把数据取出来存到结构中, 就用fwrite, fread写进去, 但我做过试验, 在终端输入一些数据, 写到文件中, 读出来是没有问题。
      

  9.   

    用fwrite把结构写进去,然后用fread读出来不会有问题,除非你从数据库读出来就是乱麻
      

  10.   

    用fwrite把结构写进去,然后用fread读出来不会有问题,除非你从数据库读出来就是乱麻
      

  11.   

    为什么不用OO4O呢这个COM控件很好用的
      

  12.   

    读到结构中的时候注意江结构用memset置零
      

  13.   

    比如说你又一个结构
    struct a{
    int a ;
    };
    memset(a,0,sizeof(a));
      

  14.   

    应该是
    memset(&a,0,sizeof(a))
      

  15.   

    我再试试, 还是Fwrite, 从表中取数据就错了. 谢谢!
    请问在OCI中, 类型转换时NLS参数怎么设置?
      

  16.   

    我建议你从表里面取出来数据类型全部用SQLT_STR,然后取出来后在转换,这样省掉很多的麻烦
      

  17.   

    我是用SQLT_STR, 但是DATA类型如果不进行转换的话, 是不是插不进去啊!
      

  18.   

    在OCI中, 从表A中提取数据出来, 然后插入到表B。A.B表的表结构完全相同。
    而A.B表中有一列是DATE类型的, 我是用SQLT_STR类型从A表中提取出来, 
    无法插入到B表中, 是不是需要进行数据转换, 怎么转换?
      

  19.   

    当然要转换,用to_date
    你从表里面取出来的sql语句是什么?
      

  20.   

    static text *insert = (text *) "INSERT INTO t_emp(empno,ename,job,mgr,hiredate, sal, comm, deptno)VALUES (:empno, :ename, :job, :mgr, TO_DATE(:hiredate, 'yyyy-month-dd'), :sal, :comm, :deptno)";
    我是这样写的, 有没有问题?插入的格式字符串是和取出来的一样。
      

  21.   

    不知道你是怎样发SQL语句的,如果是联接成一条字符串则只需用函数TO_DATE()转化一下,如果你用绑定变量的方法则比较麻烦,OCIDate其实是一个结构,在赋值时应作转化柄做分别赋值。