windows 下的ADO 连接

来源:互联网 发布:ghost squad 知乎 编辑:程序博客网 时间:2024/05/16 04:33
 

// 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_)