#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "oci.h"
static OCIEnv *p_env;
static OCIError *p_err;
static OCISvcCtx *p_svc;
static OCIStmt *p_sql;
static OCIDefine *p_dfn = (OCIDefine *) 0;
static OCIBind *p_bnd = (OCIBind *) 0;
int main()
{
int p_bvi;
char p_sli[1024];
char p_sli2[1024];
int rc;
char errbuf[100];
int errcode;
char connstr[] = "(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.100.188)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=orcl)))";
rc = OCIInitialize((ub4) OCI_DEFAULT, (dvoid *)0,
(dvoid * (*)(dvoid *, size_t)) 0,
(dvoid * (*)(dvoid *, dvoid *, size_t))0,
(void (*)(dvoid *, dvoid *)) 0 );
rc = OCIEnvInit( (OCIEnv **) &p_env, OCI_DEFAULT, (size_t) 0, (dvoid **) 0 );
rc = OCIHandleAlloc( (dvoid *) p_env, (dvoid **) &p_err, OCI_HTYPE_ERROR,
(size_t) 0, (dvoid **) 0);
rc = OCIHandleAlloc( (dvoid *) p_env, (dvoid **) &p_svc, OCI_HTYPE_SVCCTX,
(size_t) 0, (dvoid **) 0);
rc = OCILogon(p_env, p_err, &p_svc, "system", 6, "123456", 6, connstr, strlen(connstr));
if (rc != 0) {
OCIErrorGet((dvoid *)p_err, (ub4) 1, (text *) NULL, &errcode, errbuf, (ub4) sizeof(errbuf), OCI_HTYPE_ERROR);
printf("Error - %.*s\n", 512, errbuf);
exit(8);
}
else
printf("connection success!\n");
rc = OCIHandleAlloc( (dvoid *) p_env, (dvoid **) &p_sql,
OCI_HTYPE_STMT, (size_t) 0, (dvoid **) 0);
char sql[] = "select * from test";
rc = OCIStmtPrepare(p_sql, p_err, sql,
(ub4) strlen(sql) , (ub4) OCI_NTV_SYNTAX, (ub4) OCI_DEFAULT);
p_bvi = 10;
rc = OCIDefineByPos(p_sql, &p_dfn, p_err, 1, p_sli, 1024, SQLT_STR, (dvoid *) 0, (ub2 *)0,
(ub2 *)0, OCI_DEFAULT);
rc = OCIDefineByPos(p_sql, &p_dfn, p_err, 2, p_sli2, 1024, SQLT_STR, (dvoid *) 0, (ub2 *)0,
(ub2 *)0, OCI_DEFAULT);
rc = OCIStmtExecute(p_svc, p_sql, p_err, (ub4) 1, (ub4) 0,
(CONST OCISnapshot *) NULL, (OCISnapshot *) NULL, OCI_DEFAULT);
ub4 ColumnCount;
OCIAttrGet((dvoid*)p_sql, (ub4)OCI_HTYPE_STMT, (dvoid*)&ColumnCount, (ub4 *) 0, (ub4)OCI_ATTR_PARAM_COUNT, p_err);
printf(" Coulumcount=%d\n",ColumnCount);
ub4 pos;
ub2 dtype;
ub2 dsize;
text *name;
ub4 name_length;
OCIParam *pparam;
char realname[1024];
pos = 1;
while (OCIParamGet(p_sql, OCI_HTYPE_STMT, p_err, (dvoid *)&pparam, pos) == OCI_SUCCESS)
{
OCIAttrGet((dvoid *)pparam, OCI_DTYPE_PARAM, (dvoid *)&dtype, 0, OCI_ATTR_DATA_TYPE, p_err);
OCIAttrGet((dvoid *)pparam, OCI_DTYPE_PARAM, (dvoid *)&dsize, 0, OCI_ATTR_DATA_SIZE, p_err);
OCIAttrGet((dvoid *)pparam, OCI_DTYPE_PARAM, (dvoid *)&name, &name_length, OCI_ATTR_NAME, p_err);
strncpy(realname, name, name_length);
realname[name_length] = 0;
printf("%02d >column = '%s', type = %d, size = %d.\n", pos, realname, dtype, dsize);
pos++;
}
while (rc != OCI_NO_DATA) {
printf("Username:[%s] password:[%s]\n", p_sli, p_sli2);
rc = OCIStmtFetch(p_sql, p_err, 1, 0, 0);
printf("rc = %d\n", rc);
}
rc = OCILogoff(p_svc, p_err);
rc = OCIHandleFree((dvoid *) p_sql, OCI_HTYPE_STMT);
rc = OCIHandleFree((dvoid *) p_svc, OCI_HTYPE_SVCCTX);
rc = OCIHandleFree((dvoid *) p_err, OCI_HTYPE_ERROR);
return;
}
原文:http://blog.sina.com.cn/s/blog_53ccdd1d0100bkwr.htmllinux c 連接Oracle 10g 數據庫
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.