BLUESKY
一步一个脚印向前走
 1 
 2 #include "oci.h"
 3 #include <stdio.h>
 4 #include <stdlib.h>
 5 #include <string.h>
 6 
 7 
 8 void myfflush() 
 9 {
10   eb1 buf[50];
11   fgets((char *) buf, 50, stdin);
12 
13 
14 int main()
15 {
16       OCIEnv    *m_envhp;
17       OCIError  *m_errhp;
18       OCIServer *m_srvhp;
19       OCISvcCtx *m_svchp;
20       OCIStmt   *m_stmthp;
21       OCIBind   *bnd1p = NULL;
22       OCIBind   *bnd2p = NULL;
23       
24       char username[255];
25       char password[30];
26       char dbname[30];
27       char szSqlStr[255];
28       char empname[100];
29       char empno[10];
30       
31       strcpy(username,"liugang");
32       strcpy(password,"LiuGang");
33       strcpy(dbname,"LinkAge");
34       
35       int i;
36       for(i=0;i<100;i++)
37           empname[i]='\0';
38           
39       OCIInitialize((ub4)OCI_DEFAULT,(dvoid *)0,(dvoid *(*)(dvoid *,size_t))0,(dvoid *(*)(dvoid *,dvoid *,size_t))0,(void (*)(dvoid *,dvoid *)) 0 );
40       OCIEnvInit((OCIEnv **)&m_envhp, OCI_DEFAULT, (size_t) 0,(dvoid **0 );
41   
42       OCIHandleAlloc( (dvoid *)m_envhp, (dvoid **)&m_errhp,OCI_HTYPE_ERROR,(size_t) 0, (dvoid **0);
43       OCIHandleAlloc( (dvoid *)m_envhp, (dvoid **)&m_srvhp,OCI_HTYPE_SERVER,(size_t) 0, (dvoid **0);
44       OCIHandleAlloc( (dvoid *)m_envhp, (dvoid **)&m_svchp,OCI_HTYPE_SVCCTX,(size_t) 0, (dvoid **0);
45       OCIHandleAlloc( (dvoid *)m_envhp, (dvoid **)&m_stmthp,OCI_HTYPE_STMT,(size_t) 0, (dvoid **)0);
46       
47       OCIServerAttach(m_srvhp, m_errhp,(text *)dbname, strlen(dbname),(ub4) OCI_DEFAULT);
48       OCILogon(m_envhp,m_errhp,&m_svchp,(text *)username,strlen(username),(text *)password,strlen(password),(text *)dbname,strlen(dbname));
49       
50       OCIDefine *defnp0 = (OCIDefine *0;
51       
52       printf("Please input your emp number:");
53       scanf("%s",empno);
54       
55       myfflush();
56 
57         
58       sprintf( szSqlStr,"%s""SELECT ENAME FROM EMP WHERE EMPNO = :empno");
59 
60       OCIStmtPrepare(m_stmthp, m_errhp, (text*)szSqlStr, (ub4)strlen(szSqlStr),(ub4) OCI_NTV_SYNTAX, (ub4)OCI_DEFAULT);
61       int m =sizeof(empno);
62       
63       //OCIBindByName(m_stmthp, &bnd1p, m_errhp, (text *)":empno",-1, (ub1 *) empno,(sword) sizeof(empno)-1, SQLT_CHR, (dvoid *) 0,(ub2 *) 0, (ub2) 0, (ub4) 0, (ub4 *) 0, OCI_DEFAULT);
64       
65       OCIBindByPos(m_stmthp, &bnd1p, m_errhp, 1, (dvoid *)empno, sizeof(empno)-1, SQLT_CHR, 00000, (ub4) OCI_DEFAULT);
66 
67       OCIDefineByPos( m_stmthp, &defnp0, m_errhp, 1, (dvoid *)empname, 100, SQLT_STR,(dvoid *0, (ub2 *)0, (ub2 *)0, OCI_DEFAULT);
68       
69       OCIStmtExecute( m_svchp, m_stmthp, m_errhp, (ub4) 1, (ub4) 0,(OCISnapshot *) NULL,(OCISnapshot *) NULL, (ub4) OCI_DEFAULT); 
70       
71       OCILogoff( m_svchp, m_errhp );
72       if(empname[0]=='\0')
73           strcpy(empname,"无此人");
74       printf("The employee name is:%s",empname);
75       
76       OCIServerDetach( m_srvhp, m_errhp, OCI_DEFAULT );
77       OCIHandleFree((dvoid *) m_stmthp, OCI_HTYPE_STMT);
78       OCIHandleFree((dvoid *) m_svchp, OCI_HTYPE_SVCCTX);
79       OCIHandleFree((dvoid *) m_srvhp, OCI_HTYPE_SERVER);
80       OCIHandleFree((dvoid *) m_errhp, OCI_HTYPE_ERROR);
81       getchar();
82       return 1;
83 
84 
在对:empno变量进行绑定的时候,和以往差不多,有按名称绑定和位置绑定两种方法,在上面代码中使用的是按位置进行的绑定,按名称进行绑定被注释了,有兴趣的可以自己研究一下,文档中推荐使用的是按位置绑定,具体的原因还没有查清楚,希望知情者提供线索......

运行结果如下:



在这里还存在这样一个问题:SELECT ENAME FROM EMP WHERE EMPNO = :empno不可以写成SELECT ENAME FROM EMP WHERE EMPNO = ':empno',虽然在数据库中EMPNO是VARCHAR2类型的,我个人认为在使用OCIBindByPos的时候,已经指定了绑定的变量是SQLT_CHR类型的,所以就没有必要在语句中使用':empno'了,这只是一家之言,希望有不同想法的同志可以提出,共同讨论......
posted on 2007-05-25 14:48 LG 阅读(823) 评论(0)  编辑 收藏 引用 所属分类: CPlusPlus

<2007年5月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

常用链接

相册

最新评论