123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345 |
- #include "stdafx.h"
- #include "DataManager.h"
- #include "AdoInterface.h"
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #endif
- CDataManager::CDataManager()
- {
- _hThread = NULL;
- m_bThreadRuning = FALSE;
- }
- CDataManager::~CDataManager()
- {
- EndofThread();
- CloseDataBase();
- }
- //************************************//
- // [函数]:CreateInstance
- // [描述]:创建实例对象
- // [参数]:
- // [返回]:
- //************************************//
- int CDataManager::CreateInstance()
- {
- if(S_FALSE == m_PhoneBookDB.CreateInstance())
- return -1;
- return 0;
- }
- //************************************//
- // [函数]:OpenDataBase
- // [描述]:查询数据的行数
- // [参数]:
- // pConnectStr 连接数据库串
- // pUserID 用户
- // pPWD 数据库密码
- // errMsg 返回错误信息
- // [返回]:数量 =-1失败
- //************************************//
- int CDataManager::OpenDataBase(const TCHAR* pConnectStr, const TCHAR* pUserID, const TCHAR* pPWD, CString& errMsg)
- {
- if(S_FALSE == m_PhoneBookDB.OpenDataBase(pConnectStr, pUserID, pPWD, errMsg))
- return -1;
- return 0;
- }
- void CDataManager::CloseDataBase()
- {
- m_PhoneBookDB.CloseDataBase();
- }
- //启动
- int CDataManager::StartThread()
- {
- AutoThreadSection aSection(&s_critSection);
- if (_hThread) return -1;
- _hThread = CreateThread(NULL, 0, ThreadFun, this, 0, NULL);
- if (_hThread == NULL)
- {
- WriteTextLog(_T("创建线程失败"));
- return -1;
- }
- CloseHandle(_hThread);
- _hThread = NULL;
- m_bThreadRuning = TRUE;
- return 1;
- }
- //结束
- int CDataManager::EndofThread()
- {
- if (_hThread)
- WaitForSingleObject(_hThread, INFINITE);
- m_bThreadRuning = FALSE;
- return 1;
- }
- int CDataManager::Work()
- {
- return 1;
- }
- DWORD CDataManager::ThreadFun(LPVOID lpParam)
- {
- CDataManager* p = (CDataManager*)lpParam;
- if(p)
- p->Work();
- return 0;
- }
- //************************************//
- // [函数]:SelectCount
- // [描述]:查询数据的行数
- // [参数]:
- // strTableName 要查询的表名
- // [返回]:数量 =-1失败
- //************************************//
- int CDataManager::SelectCount(CString& strTableName)
- {
- if(strTableName.IsEmpty())
- return -1;
- _ConnectionPtr pContPtr = m_PhoneBookDB.GetContPrt();
- CString sqlStr = _T("select count(*) as nCount from ") + strTableName;
- _RecordsetPtr pRest;
- pRest.CreateInstance(__uuidof(Recordset));
- try
- {
- pRest->Open(_variant_t(sqlStr), //物品查询
- pContPtr.GetInterfacePtr(), //获取库接库的IDispatch指针
- adOpenDynamic,
- adLockOptimistic,
- adCmdText);
- }
- catch(_com_error *e)
- {
- AfxMessageBox(e->ErrorMessage());
- }
- int nCount = 0;
- if (!pRest->adoEOF)
- nCount = atoi(_bstr_t(pRest->GetCollect("nCount")));
- pRest = NULL;
- return nCount;
- }
- //************************************//
- // [函数]:Select
- // [描述]:查询数据集
- // [参数]:
- // vData 返回的数据集
- // strTableName 要查询的表名
- // strFields 要查询的字段
- // strSelLineCount 查询行数 (=="",查询所有行, !=""如:_("top 1")表示:表的第一行的数据
- // strfilter where条件
- // strSort 排序
- // [返回]:数量 =-1失败, 0成功
- //************************************//
- int CDataManager::Select(CArray<CStringArray, CStringArray>& arr, CString& strTableName, std::vector<CString>& vFields, CString strfilter, const CString& strSelLineCount, CString strSort)
- {
- if(strTableName.IsEmpty())
- return -1;
- _ConnectionPtr pContPtr = m_PhoneBookDB.GetContPrt();
- if(!pContPtr)
- return -1;
- int nCount = SelectCount(strTableName);
- if(nCount < 0)
- return -1;
- if(nCount == 0)
- return 0;
- //SELECT 列名称 FROM 表名称 WHERE 列名称='' ORDER BY 列名称
- CString strSql = _T("");
- if(vFields.empty())
- return -1;
- else
- {
- if(strSelLineCount.IsEmpty())
- strSql = _T("select ");
- else
- strSql = _T("select ") + strSelLineCount +_T(" ");
- int i = 0;
- int nSize = vFields.size();
- std::vector<CString>::iterator iter = vFields.begin();
- for(;iter != vFields.end();)
- {
- strSql += (*iter);
- if(i < nSize - 1)
- strSql += _T(",");
- ++i;
- ++iter;
- }
- strSql += _T(" from ") + strTableName;
- }
- //条件约束
- if(strfilter != _T(""))
- strSql += _T(" where ") + strfilter;
- if(strSort != _T(""))
- strSql += _T(" order by ") + strSort;
- _RecordsetPtr pRecordset;
- try
- {
- _variant_t RecordsAffected;
- pRecordset = pContPtr->Execute(_bstr_t(strSql), &RecordsAffected, adCmdText);//操作
- }
- catch(_com_error* e)
- {
- AfxMessageBox(e->ErrorMessage());
- return -1;
- }
- arr.SetSize(nCount, 1);
- try
- {
- int nIndex = 0;
- arr.ElementAt(nIndex).RemoveAll();
- while(!pRecordset->adoEOF)
- {
- int i = 0;
- std::vector<CString>::iterator iter = vFields.begin();
- for(;iter != vFields.end();)
- {
- arr.ElementAt(nIndex).Add(_T(""));
- CString strVaule = (_bstr_t)pRecordset->GetCollect(_variant_t((*iter)));
- arr.ElementAt(nIndex).SetAt(i, strVaule);
- ++iter;
- ++i;
- }
-
- //移动到下一条记录
- pRecordset->MoveNext();
- ++nIndex;
- }
- }
- catch(_com_error* e)
- {
- AfxMessageBox(e->ErrorMessage());
- return -1;
- }
- return 0;
- }
- //************************************//
- // [函数]:Insert
- // [描述]:添加数据
- // [参数]:
- // strTableName 要查询的表名
- // strField 一个或多个字段(列1, 列2,...)
- // pValue 要添加的数值
- // ... 格式化传参
- // [返回]:数量 =-1失败, 0成功
- //************************************//
- int CDataManager::Insert(CString& strTableName, CString& strValues, CString strFields)
- {
- if(strTableName.IsEmpty() || strValues.IsEmpty())
- return -1;
- _ConnectionPtr pContPtr = m_PhoneBookDB.GetContPrt();
- if(!pContPtr)
- return -1;
-
- //INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)
- CString strSql = _T("");
- if(strFields.IsEmpty())
- strSql = _T("INSERT INTO ") + strTableName + _T(" VALUES (") + strValues + _T(")");
- else
- strSql = _T("INSERT INTO ") + strTableName + _T(" (") + strFields + _T(")") + _T(" VALUES (") + strValues + _T(")");
- try
- {
- _variant_t RecordsAffected;
- pContPtr->Execute(_bstr_t(strSql), &RecordsAffected, adCmdText);//操作
- }
- catch(_com_error* e)
- {
- AfxMessageBox(e->ErrorMessage());
- return -1;
- }
- return 0;
- }
- //************************************//
- // [函数]:Update
- // [描述]:更新数据
- // [参数]:
- // strTableName 要更新的表
- // strValues 一个或多个字段(列1, 列2,...)
- // strfilter where条件
- // [返回]:数量 =-1失败, 0成功
- //************************************//
- int CDataManager::Update(CString& strTableName, CString& strValues, CString strfilter)
- {
- if(strTableName.IsEmpty() || strValues.IsEmpty() || strfilter.IsEmpty())
- return -1;
- _ConnectionPtr pContPtr = m_PhoneBookDB.GetContPrt();
- if(!pContPtr)
- return -1;
-
- //update tableanem set msgcount='%s',log='%s',status='%s',issended='%s' where autoid='%s'
- CString strSql = _T("");
- strSql = _T("update ") + strTableName + _T(" set ") + strValues + _T(" where ") + strfilter;
- try
- {
- _variant_t RecordsAffected;
- pContPtr->Execute(_bstr_t(strSql), &RecordsAffected, adCmdText);//操作
- }
- catch(_com_error* e)
- {
- AfxMessageBox(e->ErrorMessage());
- return -1;
- }
- return 0;
- }
- //************************************//
- // [函数]:Delete
- // [描述]:删除
- // [参数]:
- // CString& strTableName, 表名
- // CString& strFilter 限制条件
- // [返回]:数量 =-1失败, 0成功
- //************************************//
- int CDataManager::Delete(CString& strTableName, CString& strFilter)
- {
- if(strTableName.IsEmpty() || strFilter.IsEmpty())
- return -1;
- _ConnectionPtr pContPtr = m_PhoneBookDB.GetContPrt();
- if(!pContPtr)
- return -1;
- CString strSql = _T("");
- strSql = _T("delete from ") + strTableName + _T(" where ") + strFilter;
- try
- {
- _variant_t RecordsAffected;
- pContPtr->Execute(_bstr_t(strSql), &RecordsAffected, adCmdText);//操作
- }
- catch(_com_error* e)
- {
- AfxMessageBox(e->ErrorMessage());
- return -1;
- }
- return 0;
- }
|