📄 odbcdb.cpp
字号:
#include "stdafx.h"
#include "odbcDB.h"
#define DB_NOT_OPEN 0x2001 //数据库打开错误
#define DB_NO_RECORD 0x2002 //没有数据
#define DB_SAVE_EPG_ERR 0x2003 //保存Epg失败
#define DB_SET_BIGBLOK_ERR 0x2004 //设置大数据错误
#define DB_NOT_NORMAL 0x2005 //数据库打开错误
#define MEMORY_EXCEPTION 0x2006 //Memory 异常
#define MS_OTHER_EXCEPTION 0x2007 //其他异常
COdbcDB::COdbcDB()
{
m_strDBSource = _T("");
m_strDBUser = _T("");
m_strDBPwd = _T("");
m_IsDBOpen = FALSE;
}
COdbcDB::~COdbcDB()
{
}
BOOL COdbcDB::IsOpen()
{
return m_IsDBOpen;
}
HRESULT COdbcDB::ExecuteSQL(LPCSTR lpszSQL)
{
ASSERT(lpszSQL);
TRY
{
//执行SQL语句
m_db.ExecuteSQL(lpszSQL);
}//异常处理
CATCH(CDBException, pEx)
{
return pEx->m_nRetCode;
}
AND_CATCH(CException,pEx)
{
return MS_OTHER_EXCEPTION;
}
END_CATCH
return S_OK;
}
HRESULT COdbcDB::Connect(CString strDBSource,CString strDBUser,CString strDBPwd)
{
//Init DB param,in case reconnect
m_IsDBOpen = FALSE;
m_db.Close();
m_strDBSource = strDBSource;
m_strDBUser = strDBUser;
m_strDBPwd = strDBPwd;
//构造连接字符串
CString strDBOpen = _T("");
strDBOpen.Format("DSN=%s;UID=%s;PWD=%s",strDBSource,strDBUser,strDBPwd);
TRY{
// 连接数据库
m_db.OpenEx(strDBOpen,CDatabase::noOdbcDialog);
}//异常处理
CATCH(CDBException,ex)
{
m_IsDBOpen = FALSE;
return DB_NOT_OPEN;
}
AND_CATCH(CMemoryException,pEx)
{
pEx->ReportError();
m_IsDBOpen = FALSE;
return MEMORY_EXCEPTION;
}
AND_CATCH(CException,e)
{
m_IsDBOpen = FALSE;
return MS_OTHER_EXCEPTION;
}
END_CATCH
m_IsDBOpen = TRUE;
return S_OK;
}
void COdbcDB::DisConnect()
{
m_IsDBOpen = FALSE;
m_db.Close();
}
void COdbcDB::ExecuteQueryValue(LPCTSTR lpszSQL,CString& value)
{
if(!m_db.IsOpen()){
return;
}
TRY{
CRecordset rs(&m_db);
//打开记录集.
rs.Open(CRecordset::dynaset, lpszSQL);
if (!rs.IsEOF()) {
rs.GetFieldValue((short)0, value);
}
rs.Close();
}//异常处理
CATCH(CDBException,ex)
{
AfxMessageBox (ex->m_strError);
AfxMessageBox (ex->m_strStateNativeOrigin);
}
AND_CATCH(CMemoryException,pEx)
{
pEx->ReportError();
AfxMessageBox ("memory exception");
}
AND_CATCH(CException,e)
{
TCHAR szError[100];
e->GetErrorMessage(szError,100);
AfxMessageBox (szError);
}
END_CATCH
}
void COdbcDB::ExecuteQuery(LPCTSTR lpszSQL,CDStrs& Fields)
{
if(!m_db.IsOpen()){
return;
}
TRY{
CRecordset rs(&m_db);
//打开所有的信息记录.
rs.Open(CRecordset::dynaset, lpszSQL);
while (!rs.IsEOF()) {
CStrs strs;
CString temp;
//获取一条记录中的所有字段值保存到字符串数组strs中
for(short i = 0 ; i < rs.m_nResultCols ; i++){
rs.GetFieldValue((short)i, temp);
strs.push_back(temp);
}
//保存一条记录到二维字符串数组中
Fields.push_back(strs);
//转到下一条纪录
rs.MoveNext();
}
rs.Close();
}//异常处理
CATCH(CDBException,ex)
{
AfxMessageBox (ex->m_strError);
AfxMessageBox (ex->m_strStateNativeOrigin);
}
AND_CATCH(CMemoryException,pEx)
{
pEx->ReportError();
AfxMessageBox ("memory exception");
}
AND_CATCH(CException,e)
{
TCHAR szError[100];
e->GetErrorMessage(szError,100);
AfxMessageBox (szError);
}
END_CATCH
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -