// DataBase.h: interface for the CDataBase class.
//
//
#if !defined(AFX_DATABASE_H__0964F832_4E25_45B5_84E6_022362B3D1A8__INCLUDED_)
#define AFX_DATABASE_H__0964F832_4E25_45B5_84E6_022362B3D1A8__INCLUDED_
#pragma warning(disable:4146)
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF") rename ("BOF","adoBOF")
#pragma warning(disable: 4251)
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "AfxDB.h"
class CDB
{
public:
/*BOOL GetVarIntValue(char *cFieldName, int *iResult);
BOOL DBState();
bool GetFieldValue(int iField, CString &strResult);
BOOL GetFieldValue(char *cFieldName, double *dResult);
BOOL Rollback();
BOOL CommitTrans();
BOOL BeginTrans();
BOOL GetFieldValue(int iField,int *iResult);
void CloseRecordSet();
BOOL GetFieldValue(char *,CString &strResult);
void MoveNext();
BOOL IsEOF();
BOOL GetFieldValue(char *,int *iResult);
BOOL OpenTable(CString &strSql);
void CloseDatabase();
BOOL ExecuteSQL(CString& sql);*/
BOOL ConnectDB(char *cIp,char *cDbName,char *cUserName,char *cPassWord);
BOOL IsOpenAdoConn();
//重新打开连接
BOOL ReOpenAdoConn();
void CloseAdoConn();
//执行SQL语句
BOOL ExecuteSql(const char *pSql, long lOptions = adCmdText);
bool OpenAdoRecordSet(_RecordsetPtr &recordSet, const char* pSql, long lOption = adCmdText, CursorTypeEnum CursorType = adOpenDynamic, LockTypeEnum LockType = adLockOptimistic);
CDB();
virtual ~CDB();
private:
//CDatabase m_db;
//CRecordset m_rs;
_ConnectionPtr m_db;
_bstr_t m_bstrSql;
};
// DataBase.cpp: implementation of the CDataBase class.
//
//
#include "stdafx.h"
#include "DataBase.h"
#include "stdlib.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
CString g_str; //全局变量,操作数据库
//
// Construction/Destruction
//
CDB::CDB()
{
m_db = NULL;
CoInitialize(NULL);
}
CDB::~CDB()
{
CloseAdoConn();
CoUninitialize();
}
BOOL CDB::ConnectDB(char *cIp, char *cDbName, char *cUserName, char *cPassWord)
{
try
{
char sSql[256];
memset(sSql, 0, 256);
sprintf(sSql, "Provider=SQLOLEDB.1;Password=%s;Persist Security Info=True;User ID=%s;Initial Catalog=%s;Data Source=%s", cPassWord, cUserName, cDbName, cIp);
m_bstrSql = (_bstr_t)sSql;
m_db.CreateInstance("ADODB.Connection");
m_db->Open(m_bstrSql, "", "", adModeUnknown);
}
catch (_com_error e)
{
char sMsg[512];
memset(sMsg, 0, 512);
sprintf(sMsg, "Warning: 打开数据库连接(OpenAdoConn)异常.错误信息:%s; 文件:%s; 行:%d", e.ErrorMessage(), __FILE__, __LINE__);
memset(sMsg, 0, 512);
sprintf(sMsg, "错误代码:%08x,错误代码信息:%s,错误源:%s,错误描述:%s", e.Error(), e.ErrorMessage(), (char*)e.Source(), (char*)e.Description());
return false;
}
// m_rs.m_pDatabase=&m_db;
return true;
}
BOOL CDB::IsOpenAdoConn()
{
try
{
return (m_db != NULL && (m_db->State & adStateOpen));
//if (m_pAdoConn != NULL && (m_pAdoConn->State & adStateOpen))
//{
// char sSql[256];
// memset(sSql,0,256);
// sprintf(sSql,"select top(1) corporation from WFCfg"); //判断电场配置表中是否有数据
// //m_pAdoConn->Execute(_bstr_t(sSql),NULL,adCmdText);
// return true;
//}
}
catch (_com_error e)
{
//断开重连
CloseAdoConn();
ReOpenAdoConn();
return false;
}
return false;
}
BOOL CDB::ReOpenAdoConn()
{
try
{
if (m_bstrSql.length() <= 0)
return false;
m_db.CreateInstance("ADODB.Connection");
m_db->Open(m_bstrSql, "", "", adModeUnknown);
}
catch (_com_error e)
{
return false;
}
return true;
}
void CDB::CloseAdoConn()
{
if (m_db != NULL)
{
m_db->Close();
m_db.Release();
m_db = NULL;
}
}
BOOL CDB::ExecuteSql(const char *pSql, long lOptions)
{
if (strlen(pSql) == 0)
{
return false;
}
try
{
//连接数据库,如果Connection为空,则重新连接数据库
if (!IsOpenAdoConn())
{
ReOpenAdoConn();
}
m_db->Execute(_bstr_t(pSql), NULL, lOptions);
return true;
}
catch (_com_error e)
{
//断开重连
CloseAdoConn();
ReOpenAdoConn();
return false;
}
}
bool CDB::OpenAdoRecordSet(_RecordsetPtr &recordSet, const char* pSql, long lOption/* = adCmdText*/, CursorTypeEnum CursorType/* = adOpenStatic*/, LockTypeEnum LockType/* = adLockOptimistic*/)
{
//_RecordsetPtr recordSet = NULL;
if (strlen(pSql) == 0)
{
return false;
}
try
{
//连接数据库,如果Connection为空,则重新连接数据库
if (!IsOpenAdoConn())
{
ReOpenAdoConn();
}
//创建记录集对象
recordSet.CreateInstance(__uuidof(Recordset));
//取得表中记录
recordSet->Open(_bstr_t(pSql), m_db.GetInterfacePtr(), CursorType, LockType, lOption);
}
//捕捉异常
catch (_com_error e)
{
//显示错误信息
//断开重连
CloseAdoConn();
ReOpenAdoConn();
return false;
}
if (recordSet == NULL)
{
return false;
}
return true;
}
//BOOL CDB::ExecuteSQL(CString &sql)
//{
// TRACE1("%s",sql);
// m_db.ExecuteSQL(sql);
// return true;
//}
//
//void CDB::CloseDatabase()
//{
// if(m_db.IsOpen())
// m_db.Close();
//}
//
//BOOL CDB::OpenTable(CString &strSql)
//{
// if(m_rs.IsOpen())
// {
// m_rs.Close();
// }
// try
// {
// TRACE1("%s",strSql);
// m_rs.Open(CRecordset::snapshot,strSql,CRecordset::readOnly);
// }
// catch(...)
// {
// MessageBox(NULL,"打开数据库错误","err",0);
// m_rs.Close();
// return false;
// }
// if(!m_rs.IsOpen())
// {
// MessageBox(NULL,"无法连接数据库","err",0);
// return false;
// }
// return true;
//}
//
//BOOL CDB::GetFieldValue(char *cFieldName,int *iResult)
//{
// CString str;
// m_rs.GetFieldValue(cFieldName,str);
// *iResult=atoi(str.GetBuffer(0));
// return true;
//}
//
//BOOL CDB::GetFieldValue(int iField, int *iResult)
//{
// m_rs.GetFieldValue(iField,g_str);
// *iResult=atoi(g_str.GetBuffer(0));
// return true;
//}
//
//BOOL CDB::GetFieldValue(char *cFieldName, double *dResult)
//{
// m_rs.GetFieldValue(cFieldName,g_str);
// *dResult=atof(g_str.GetBuffer(0));
// return true;
//
//}
//
//BOOL CDB::GetFieldValue(char *cFieldName, CString &strResult)
//{
// m_rs.GetFieldValue(cFieldName,strResult);
// return true;
//}
//
//bool CDB::GetFieldValue(int iField, CString &strResult)
//{
// m_rs.GetFieldValue(iField,strResult);
// return true;
//}
//
//
//BOOL CDB::IsEOF()
//{
// return m_rs.IsEOF();
//}
//
//void CDB::MoveNext()
//{
// m_rs.MoveNext();
//}
//
//void CDB::CloseRecordSet()
//{
// m_rs.Close();
//}
//
//
事务处理
//BOOL CDB::BeginTrans()
//{
// return m_db.BeginTrans();
//}
//
//BOOL CDB::CommitTrans()
//{
// return m_db.CommitTrans();
//}
//
//BOOL CDB::Rollback()
//{
// return m_db.Rollback();
//}
//
//
//BOOL CDB::DBState() //数据库连接是否断开
//{
// return m_db.IsOpen();
//}
//
//BOOL CDB::GetVarIntValue(char *cFieldName, int *iResult) //得到长整数值
//{
// CDBVariant m_varValue;
// m_rs.GetFieldValue(cFieldName,m_varValue);
// *iResult=m_varValue.m_lVal;
// return true;
//}