// ADO.cpp: implementation of the CADO class.
//
//
#include "stdafx.h"
#include "ADO.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//
// Construction/Destruction
//
BOOL CADO::OnInitADOConn( char * strConnect )
{
// 初始化OLE/COM库环境
::CoInitialize(NULL);
//读取配置文件
try
{
// 创建Connection对象
m_pConnection.CreateInstance("ADODB.Connection");
// 设置连接字符串,必须是BSTR型或者_bstr_t类型
if( FAILED( m_pConnection->Open( _bstr_t(strConnect),"","",0 ) ) )//adModeUnknown
{
return FALSE;
}
}
// 捕捉异常
catch(_com_error e)
{
// 显示错误信息
AfxMessageBox(e.Description());
return FALSE;
}
if(m_pConnection==NULL)
{
MessageBox(NULL,"发生错误:\n\n","系统提示",MB_OK|MB_ICONEXCLAMATION);
return FALSE;
}
return TRUE;
}
// 执行SQL语句,Insert Update _variant_t
BOOL CADO::ExecuteSQL(CString strSQL, char *err, char *strConet)
{
_bstr_t bstrSQL;
bstrSQL=strSQL;
// _variant_t RecordsAffected;
try
{
// 是否已经连接数据库
if(m_pConnection == NULL)
OnInitADOConn( strConet );
// Connection对象的Execute方法:(_bstr_t CommandText,
// VARIANT * RecordsAffected, long Options )
// 其中CommandText是命令字串,通常是SQL命令。
// 参数RecordsAffected是操作完成后所影响的行数,
// 参数Options表示CommandText的类型:adCmdText-文本命令;adCmdTable-表名
// adCmdProc-存储过程;adCmdUnknown-未知
m_pConnection->Execute(bstrSQL,NULL,adCmdText);
return true;
}
catch(_com_error e)
{
strcpy(err, (char*)e.Description());
return false;
}
}
BOOL CADO::GetValue( CString strSQL, CString &strValue, _variant_t value, char *strConet )//获取字段值
{
if(m_pConnection==NULL)
{
if(!OnInitADOConn(strConet))
{
AfxMessageBox("数据库连接错误, 请检查数据库设置");
return FALSE;
}
}
try
{
m_pRecordset.CreateInstance("ADODB.Recordset");
m_pRecordset->Open((_variant_t)strSQL,_variant_t((IDispatch*)m_pConnection),adOpenStatic,adLockOptimistic,adCmdText);
if( m_pRecordset )
{
while( !m_pRecordset->adoEOF )
{
strValue += (LPCTSTR)(_bstr_t)m_pRecordset->GetFields()->GetItem( "type" )->Value;
strValue.TrimRight();
strValue += "=";
strValue += (LPCTSTR)(_bstr_t)m_pRecordset->GetFields()->GetItem( value )->Value;
strValue += ";";
m_pRecordset->MoveNext();
}
return TRUE;
}
}
catch (_com_error e)
{
AfxMessageBox(e.Description());
return FALSE;
}
return FALSE;
}
void CADO::ExitConnect()
{
// 关闭记录集和连接
try
{
if (m_pRecordset != NULL)
m_pRecordset->Close();
m_pConnection->Close();
// 释放环境
::CoUninitialize();
}catch(_com_error e)
{
return;
}
}
// ADO.h: interface for the CADO class.
//
//
#if !defined(AFX_ADO_H__5195E5A1_FDD8_44EF_A495_36A209C4D9FF__INCLUDED_)
#define AFX_ADO_H__5195E5A1_FDD8_44EF_A495_36A209C4D9FF__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
class CADO
{
public:
//添加一个指向Connection对象的指针
_ConnectionPtr m_pConnection;
//添加一个指向Recordset对象的指针
_RecordsetPtr m_pRecordset;
public:
// 初始化—连接数据库
BOOL OnInitADOConn( char * strConnect );
BOOL GetValue( CString strSQL, CString &strValue, _variant_t value, char *strConet );
// 执行SQL语句,Insert Update _variant_t
BOOL ExecuteSQL(CString strSQL, char *err, char *strConet);
void ExitConnect();
};
#endif // !defined(AFX_ADO_H__5195E5A1_FDD8_44EF_A495_36A209C4D9FF__INCLUDED_)