📄 main.c
字号:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <oci.h>
#if defined(WIN32)
#pragma comment(lib, "oci.lib")
#endif
int main()
{
OCIEnv *myenvhp; // 环境句柄
OCIServer *mysrvhp; //服务器句柄
OCIError *myerrhp; //错误句柄
OCISession *myusrhp; //用户会话句柄
OCISvcCtx *mysvchp; //服务上下文句柄
//使用线程和对象模式来创建环境句柄
OCIEnvCreate(&myenvhp, OCI_THREADED|OCI_OBJECT, (dvoid *)0,
0, 0, 0, (size_t) 0, (dvoid **)0);
//分配服务器句柄
OCIHandleAlloc ((dvoid *)myenvhp, (dvoid **)&mysrvhp,
OCI_HTYPE_SERVER, 0, (dvoid **) 0);
//分配错误句柄
OCIHandleAlloc ((dvoid *)myenvhp, (dvoid **)&myerrhp,
OCI_HTYPE_ERROR, 0, (dvoid **) 0);
//创建服务器上下文句柄,"orcl"为建立连接的数据库名
if (OCIServerAttach (mysrvhp, myerrhp, (text *)"orcl",
strlen ("orcl"), OCI_DEFAULT) == OCI_SUCCESS)
printf("\n已经成功连上数据库orcl\n");
else //终止程序
{
printf("\n数据库名字不对,连接数据库失败!\n");
return -1;
}
//分配服务器上下文句柄
OCIHandleAlloc ((dvoid *)myenvhp, (dvoid **)&mysvchp,
OCI_HTYPE_SVCCTX, 0, (dvoid **) 0);
//设置服务器上下文句柄的服务器句柄属性
OCIAttrSet ((dvoid *)mysvchp, OCI_HTYPE_SVCCTX,
(dvoid *)mysrvhp, (ub4) 0, OCI_ATTR_SERVER, myerrhp);
//分配用户会话句柄
OCIHandleAlloc ((dvoid *)myenvhp, (dvoid **)&myusrhp,
OCI_HTYPE_SESSION, 0, (dvoid **) 0);
//为用户会话句柄设置用户名和密码属性
OCIAttrSet ((dvoid *)myusrhp, OCI_HTYPE_SESSION,
(dvoid *)"ocitest", (ub4)strlen("ocitest"),
OCI_ATTR_USERNAME, myerrhp);
OCIAttrSet ((dvoid *)myusrhp, OCI_HTYPE_SESSION,
(dvoid *)"ocitest", (ub4)strlen("ocitest"),
OCI_ATTR_PASSWORD, myerrhp);
if (OCISessionBegin ((dvoid *) mysvchp, myerrhp, myusrhp,
OCI_CRED_RDBMS, OCI_DEFAULT) == OCI_SUCCESS)
{
printf("成功建立用户会话!\n");
}
else
{
printf("建立用户会话失败!\n");
return -1;
}
//在服务器上下文环境中设置用户会话属性
OCIAttrSet ( (dvoid *)mysvchp, OCI_HTYPE_SVCCTX,
(dvoid *)myusrhp, (ub4) 0, OCI_ATTR_SESSION, myerrhp);
//......
//结束会话
OCISessionEnd(mysvchp, myerrhp, myusrhp, OCI_DEFAULT);
//断开连接
OCIServerDetach(mysvchp, myerrhp, OCI_DEFAULT);
//释放环境句柄
OCIHandleFree((void*)myenvhp, OCI_HTYPE_ENV);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -