本人菜鸟一只,刚刚接触oracle,遇到问题请高手指导。
我先在数据库的data用户下建立了一个表格results,并插入了几个记录。然后建立了oracle 的专用ODBC,并且测试成功。
然后又写了如下程序,将PROC 内嵌到VC中后,预编译,编译,连接,运行,这些都很顺利,但我用用户名data,密码data,网络服务名orada连接oracle数据库时也通信成功(如下,屏幕会打印出“连接成功”),但奇怪的是我下面写的SQL语句确不能执行(当该程序运行后,我用SQL PLUS 查看数据表results,发现程序中的数据没有插入数据表)。操作系统是windows xp  , 请高手指教。谢谢!谢谢!很着急呀,这个问题折磨我两天啦,谢谢啦,高手帮帮我呀!!!
#include <stdio.h>
#include <string.h>
#include <stdlib.h>#include <sqlca.h>void connect();
EXEC   SQL   BEGIN   DECLARE   SECTION;   
char   username[20];   
char   password[20]; 
char   server[20];
EXEC   SQL   END   DECLARE   SECTION;   
void main()
{
connect();}void connect()
{
 
 printf("请输入用户名:");
 gets(username);
 printf("  请输入密码:");
 gets(password);
 printf("  网络服务名:");
 gets(server);/*连接到数据库*/
EXEC SQL CONNECT :username IDENTIFIED BY :password using :server;
    
if(sqlca.sqlcode==0)
  printf("连接成功!");
else
  printf("%.*s\n",sqlca.sqlerrm.sqlerrml,sqlca.sqlerrm.sqlerrmc);
 EXEC SQL INSERT INTO results(rstream_no,rcar_no ,rcar_prob,rcar_time )
 values(12,123654,0.3,110);
  }

解决方案 »

  1.   

    哈哈,我太菜了,不过先在我的问题自己解决了,原因就是我的数据只是在内存,还没有提交,要是想再数据库中看到结果,必须在最后提交,即是在最后再写一行代码 EXEC SQL commit;这样就行啦。让大家见笑啦,不过,我确实很菜,新手吗,厚着脸皮嘿嘿一笑就原谅自己啦。上面的东东就留给和我一样的菜鸟们吧。
      

  2.   

    增加一个全局的错误处理函数看一下有没有错误/*错误处理函数*/ 
    void sql_error(char *msg) 

    printf("\n%s,%ld,%s\n", msg,sqlca.sqlcode,(char *)sqlca.sqlerrm.sqlerrmc); 
    EXEC SQL ROLLBACK RELEASE; 
    exit(-1); 
    } 然后在main的开头增加一句:
    EXEC SQL WHENEVER SQLERROR DO sql_error("ORACLE ERROR: ");