废话不多说,直接讲代码
1 引用库 :获取方法就是,如果你安装了oracle 就会在:盘符:\app\用户名\product\11.2.0\dbhome_1\oo4o\CPP 目录下包含LIB和INCLUDE这个两个文件夹
LIB文件夹里有一个ORACLM32.LIB 文件就是你需要引用的库文件,如何引用,自己看着办吧。
2 包含头文件同1,在INCLUDE文件夹中有两个头文件OBOUND.H和ORACL.H,这两个文件是需要引用的头文件,引用完,就是声明头文件,最好放在stdafx.h中
3 处理完库和头文件再来的就是用了,
1)新建mfc对话框应用程序起名oo4o
2)在Coo4oApp 类中BOOL Coo4oApp::InitInstance()函数中调用 OStartup(); 在int Coo4oApp::ExitInstance()调用 OShutdown();
3)如果在Coo4oApp 类中没发现 ExitInstance() 函数,就在类视图中右键类,属性 - 重写 找到,添加就可以了
4)在对话框中添加一个按钮事件:void Coo4oDlg::OnBnClickedOk()
代码如下:
void Coo4oDlg::OnBnClickedOk()
{
ODatabase odb;
const char* pszDB = "staffmanage";
const char* pszUser = "scott";
const char* pszPSW = "123";
oresult ors = odb.Open(pszDB,pszUser,pszPSW);
ODynaset odyn;
if(!odb.IsOpen())
{
const char *m_errortext = odb.GetErrorText();
MessageBox(_T("连接错误"),_T("错误"),MB_OK|MB_ICONERROR);
return ;
}
OBinder oBind;
oresult oRes = oBind.Open(odb,"select * from staff");
if (!oBind.IsOpen())
{
MessageBox(_T("执行sql语句失败"));
return ;
}
odyn = oBind.GetDynaset();
if (odyn.IsEOF())
{
odyn.MoveLast();
return;
}
OValue ov0,ov1,ov2,ov3,ov4,ov5;
oRes = odyn.GetFieldValue("ID",&ov0);
oRes = odyn.GetFieldValue("name",&ov1);
oRes = odyn.GetFieldValue("sex",&ov2);
oRes = odyn.GetFieldValue("password",&ov3);
oRes = odyn.GetFieldValue("phone",&ov4);
if (!oRes)
{
CString s;
wchar_t* pszId = NULL;
wchar_t* pszName = NULL;
wchar_t* pszSex = NULL;
wchar_t* pszPassword = NULL;
wchar_t* pszPhone = NULL;
multiToUnicode(ov0,pszId);
multiToUnicode(ov1,pszName);
multiToUnicode(ov2,pszSex);
multiToUnicode(ov3,pszPassword);
multiToUnicode(ov4,pszPhone);
s.Format(_T("%s %s %s %s"),pszId,pszName,pszSex,pszPassword,pszPhone);
MessageBox(s);
if (pszId != NULL)
{
delete []pszId;
}
if (pszName != NULL)
{
delete []pszName;
}
if (pszSex != NULL)
{
delete []pszSex;
}
if (pszPassword != NULL)
{
delete []pszPassword;
}
if (pszPhone != NULL)
{
delete []pszPhone;
}
}
}
bool multiToUnicode(const char* multiText, wchar_t*& unicodeText)
{
if (0 == strlen(multiText))
{
unicodeText = NULL;
return true;
}
//先获取转换后字符串所需空间
int size = ::MultiByteToWideChar(CP_ACP, 0, multiText, -1, NULL, 0);
if (0 == size)
{
return false;
}
//分配空间,进行转换
unicodeText = new wchar_t[size + 1];
::ZeroMemory(unicodeText, (size + 1) * sizeof(wchar_t));
if (0 == ::MultiByteToWideChar(CP_ACP, 0, multiText, -1, unicodeText, size + 1))
{
delete[] unicodeText;
return false;
}
return true;
}
6)如果你还需要Unicode转多字符集,代码如下:
bool unicodeToMulti(LPCWSTR& unicodeText, char*& multiText)
{
if (0 == _tcslen(unicodeText))
{
multiText = NULL;
return true;
}
//先获取转换后字符串所需空间
int size = ::WideCharToMultiByte(CP_ACP, 0, unicodeText, -1, NULL, 0, NULL, NULL);
if (0 == size)
{
return false;
}
//分配空间,进行转换
multiText = new char[size + 1];
::ZeroMemory(multiText, (size + 1) * sizeof(char));
if (0 == ::WideCharToMultiByte(CP_ACP, 0, unicodeText, -1, multiText, size + 1, NULL, NULL))
{
delete[] multiText;
return false;
}
return true;
}
源代码可以到这里下载 点击打开链接