ADOConn.h // ADOConn.h: interface for the CADOConn class.///**///////////////////////////////////////////////////////////////////////#if !defined(AFX_ADOCONN1_H__E411A6A3_90BA_4C07_8BC5_5F48FFF4DB07__INCLUDED_)#define AFX_ADOCONN1_H__E411A6A3_90BA_4C07_8BC5_5F48FFF4DB07__INCLUDED_#include <ole2.h>//#include <stdio.h>//#include <conio.h>#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000#include "sqlext.h"#import "c:Program FilesCommon FilesSystemadomsado15.dll"no_namespace rename("EOF","adoEOF")rename("BOF","adoBOF")class CADOConn ...{public: CADOConn(); virtual ~CADOConn();public: //ADODB::_ConnectionPtr m_pConnect //_ConnectionPtr m_pConnection; //_RecordsetPtr m_pRecordset; public: int FindRecordSet(CString m_sql,CString strField,CString str); int DeleteRecordSet(CString m_sql); //初始化——连接数据库 static void OnInitDBConnect(); //执行查询 static _RecordsetPtr& GetRecordSet(_bstr_t bstrSQL); //Insetr Update _variant_t static BOOL ExecuteSQL(_bstr_t bstrSQL); void ExitConnect(); //获得表长 int GetRecordCount(CString strTable, int &nCount, CString strCondition = _T("")); //sql语句,待查属性列,查询结果 static int SelectRecordSet(CString m_sql,CString strField,CString &strResult); //修改属性值 int UpdateRecordSet(CString m_sql, CString strField, CString str); int InsertRecord(CString strTable, int nCount, CString *strFields, CString *strValue, CString strkeyfield = _T(""), CString strkey = _T("")); };#endif // !defined(AFX_ADOCONN1_H__E411A6A3_90BA_4C07_8BC5_5F48FFF4DB07__INCLUDED_) ADOConn.cpp // ADOConn.cpp: implementation of the CADOConn class.///**///////////////////////////////////////////////////////////////////////#include "stdafx.h"#include "MyClient.h"#include "ADOConn.h"//#include "ExamTest.h"#ifdef _DEBUG#undef THIS_FILEstatic char THIS_FILE[]=__FILE__;#define new DEBUG_NEW#endif_ConnectionPtr m_pConnection;_RecordsetPtr m_pRecordset;extern CMyClientApp theApp;/**/////////////////////////////////////////////////////////////////////// Construction/Destruction/**///////////////////////////////////////////////////////////////////////CADOConn::CADOConn()...{}CADOConn::~CADOConn()...{}void CADOConn::OnInitDBConnect()...{ CString strUser; CString strPwd; CString strservername; CString strdbname; CString strConnection; strUser = theApp.m_strDBUserApp; strPwd = theApp.m_strDBPwdApp; strConnection = "Provider=SQLOLEDB.1;Server=" + theApp.m_strServerApp+ ";Database=TroubleCheck"; ::CoInitialize(NULL); try ...{ m_pConnection.CreateInstance(__uuidof(Connection));//****************** _bstr_t strConnect = (_bstr_t)strConnection; m_pConnection->Open(strConnect,(_bstr_t)strUser,(_bstr_t)strPwd,adModeUnknown);//**************** theApp.isDBOK = TRUE; } catch(_com_error e) ...{ //AfxMessageBox(e.Description()+"系统退出!"); //exit(0);//*********************************** AfxMessageBox("数据库连接失败,请重新配置连接数据库!"); ::SendMessage(theApp.hwndmainDlg,WM_SETDBSERVER,0,0); }}_RecordsetPtr& CADOConn::GetRecordSet(_bstr_t bstrSQL)...{ try ...{ if (m_pConnection == NULL) ...{ OnInitDBConnect(); } m_pRecordset.CreateInstance(_uuidof(Recordset)); m_pRecordset->Open(bstrSQL,(_variant_t)m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText); } catch (_com_error e) ...{ AfxMessageBox(e.Description()+"系统退出!"); exit(0); //AfxMessageBox("2"); } return m_pRecordset;// _variant_t var;}BOOL CADOConn::ExecuteSQL(_bstr_t bstrSQL)//************************...{ try ...{ if (m_pConnection == NULL) ...{ //AfxMessageBox("自动连接!"); OnInitDBConnect(); } m_pConnection->Execute(bstrSQL ,NULL,adCmdText); } catch (_com_error e) ...{ AfxMessageBox(e.Description()+"系统退出!"); exit(0); } return true;}void CADOConn::ExitConnect()...{ if (m_pRecordset != NULL) ...{ m_pRecordset->Close(); m_pConnection->Close(); ::CoUninitialize(); }}int CADOConn::SelectRecordSet(CString m_sql,CString strField,CString &strResult)...{ _variant_t varTemp; _RecordsetPtr m_pRecord = NULL; try ...{ m_pRecord = GetRecordSet((_bstr_t)m_sql); if (m_pRecord != NULL) ...{ if (!m_pRecord->adoBOF) ...{ m_pRecord->MoveFirst(); } while(!m_pRecord->adoEOF) ...{ varTemp = m_pRecord->GetCollect((_bstr_t)strField); if (varTemp.vt == VT_NULL) ...{ strResult = _T(""); } strResult = (LPCSTR)_bstr_t(varTemp); //strResult.TrimRight(); m_pRecord->MoveNext(); } } else return 0; } catch (...) ...{ AfxMessageBox("读取失败,请检查数据库!"); return 0; } return 1;}int CADOConn::UpdateRecordSet(CString m_sql, CString strField, CString str)...{ _variant_t varTemp; _RecordsetPtr m_pRecord = NULL; try ...{ m_pRecord = GetRecordSet((_bstr_t)m_sql); if (m_pRecord!=NULL) ...{ if (!m_pRecord->adoBOF) ...{ m_pRecord->MoveFirst(); } while(!m_pRecord->adoEOF) ...{ m_pRecord->PutCollect((_bstr_t)strField,_variant_t(str)); m_pRecord->Update(); m_pRecord->MoveNext(); } } } catch (...) ...{ AfxMessageBox("读取失败,请检查数据库!"); return 0; } return 1;}int CADOConn::FindRecordSet(CString m_sql, CString strField, CString str)...{ _variant_t varTemp; _RecordsetPtr m_pRecord = NULL; CString strTemp; try ...{ m_pRecord = GetRecordSet((_bstr_t)m_sql); if (m_pRecord!=NULL) ...{ if (!m_pRecord->adoBOF) ...{ m_pRecord->MoveFirst(); } while(!m_pRecord->adoEOF) ...{ varTemp = m_pRecord->GetCollect((_bstr_t)strField); if (varTemp.vt == VT_NULL) ...{ strTemp = _T(""); } strTemp = (LPCSTR)_bstr_t(varTemp); strTemp.TrimRight(); if (!strcmp(strTemp,str)) return 1; m_pRecord->MoveNext(); } } } catch (...) ...{ AfxMessageBox("读取失败,请检查数据库!"); return 0; } return 1;}int CADOConn::DeleteRecordSet(CString m_sql)...{ if(!ExecuteSQL(_bstr_t(m_sql))) ...{ return 0; } else ...{ AfxMessageBox("删除成功"); return 1; }}int CADOConn::GetRecordCount(CString strTable, int &nCount, CString strCondition)...{ _RecordsetPtr m_pRecord = NULL; int nCounter = 0; CString m_sql; m_sql = "select * from " + strTable + strCondition; try ...{ m_pRecord = GetRecordSet((_bstr_t)m_sql); if (m_pRecord!=NULL) ...{ if (!m_pRecord->adoBOF) ...{ m_pRecord->MoveFirst(); } while(!m_pRecord->adoEOF) ...{ m_pRecord->MoveNext(); nCounter++; } } nCount = nCounter; } catch (...) ...{ AfxMessageBox("数据库错误"); return 0; } return 1;}//return -1:主键冲突/////////////////注意m_Storedata=VT_NULL的情况,要做处理//strTable:表名//nCount:属性列数//strFields:属性列名//strValue:属性列值//strKeyfield:主键名//strKey:主键属性值int CADOConn::InsertRecord(CString strTable, int nCount, CString *strFields, CString *strValue,CString strKeyfield, CString strKey)...{ CString m_sql; _RecordsetPtr m_pRecord; _variant_t m_Storedata; try ...{ if (strKeyfield != "") ...{ m_sql = "select * from " + strTable; m_pRecord = GetRecordSet((_bstr_t)m_sql); if (m_pRecord!=NULL) ...{ if (!m_pRecord->adoBOF) ...{ m_pRecord->MoveFirst(); } while (!m_pRecord->adoEOF) ...{ m_Storedata = m_pRecord->GetCollect((_bstr_t)strKeyfield); if ((LPCSTR)_bstr_t(m_Storedata)==strKey) ...{ return 0; } m_pRecord->MoveNext(); } } } m_sql = "insert into " + strTable + " ("; for (int i=0; i<nCount-1; i++) ...{ m_sql += strFields[i] + ","; } m_sql += strFields[nCount-1] + ") "; m_sql += "values ("; for (i=0; i<nCount-1; i++) ...{ m_sql += strValue[i] + ","; } m_sql += strValue[nCount-1] + ") "; ExecuteSQL((_bstr_t)m_sql); } catch (...) ...{ AfxMessageBox("数据库错误"); return 0; } return 1;}