在安装好Oracle之后,开始用OCI编程。VS2008作为开发平台
首先在安装目录下搜到 oci.dll oci.h oci.lib等文件。同OpenGL一样*.lib放到VS2008的安装目录下vc\lib *.h放到vc\include下,*.dll放到C:\WINDOWS/SYSTEM32下。
照《实战OpenGL》创建一个MFC基于对话框的工程。
在stdafx.h中加上oci.h的引用:#include <oci.h> 其他头文件会由oci.h进行调用。
添加变量包括OCI连接数据库的各种句柄
public:
OCIEnv *envhp ; //环境句柄
OCIServer *srvhp ; //服务器句柄
OCISvcCtx *svchp ; //服务环垅句柄
OCIError *errhp ; //错误句柄
OCISession *authp ; //会话句柄
OCIStmt *stmthp ; //语句句柄
OCIDescribe *dschp ; //描述句柄
添加错误处理函数:
void COCIExampleDlg::ErrorProc(dvoid *err, sword status)
{
sb4 errcode ; //存储错误代码
CString str ; //显示错误信息
text errbuf [512] ; //存储错误信息
if (status==OCI_ERROR) //如果出错
{
//调用OCI的错误获取函数
OCIErrorGet ((dvoid*)errhp , (ub4 )1 , NULL , &errcode , errbuf , (ub4) sizeof (errbuf) , OCI_HTYPE_ERROR ) ;
str.Format ("错误号:%d\n错误信息:%s\n" , errcode , errbuf ) ;
AfxMessageBox (str ) ; //弹出消息框 , 显示错误信息
}
}
对话框中添加两个button,一个list control 进行数据的显示。
为了关联对话框的list control在OCIExampleDlg.h中定义
// 对话框数据
enum { IDD = IDD_OCIEXAMPLE_DIALOG };
CListCtrl m_grid ;
在OCIExampleDlg.cpp中定义
void COCIExampleDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_LIST1, m_grid);
}
连接数据库的button中写上连接及执行数据库的核心代码
void COCIExampleDlg::OnBnClickedButton1()
{
//初始化OCI环境
OCIEnvInit (& envhp , OCI_DEFAULT , 0 , 0 ) ;
// ☆程序第Ⅰ部分☆《分配句柄与数据结构》
//分配错误句柄
OCIHandleAlloc (envhp , (dvoid**)&errhp , OCI_HTYPE_ERROR , 0 , 0 ) ;
//分配服务器句柄
ErrorProc (errhp , OCIHandleAlloc (envhp , ( dvoid** )&srvhp , OCI_HTYPE_SERVER , 0 , 0) ) ;
//分配服务环境句柄
ErrorProc (errhp , OCIHandleAlloc (envhp, (dvoid**)&svchp ,OCI_HTYPE_SVCCTX ,0 , 0)) ;
//分配会话句柄
ErrorProc (errhp , OCIHandleAlloc (envhp , (dvoid**)&authp , OCI_HTYPE_SESSION , 0 , 0) ) ;
//分配描述句柄
ErrorProc (errhp , OCIHandleAlloc ((dvoid*)envhp , (dvoid**)&am