⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 odbcdb.cpp

📁 一个员工考勤管理的程序
💻 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 + -