MFC連接SQL server技術ADO的使用

ADOConn.h頭文件:

 

#pragma once

#import "c:\Program Files\Common Files\System\ado\msado15.dll" rename_namespace("ADODB") rename("EOF","adoEOF") rename("BOF","adoBOF")

using namespace ADODB;

class ADOConn  

{

  // 定義變量

public:

  //添加一個指向Connection對象的指針:

  _ConnectionPtr m_pConnection;

  //添加一個指向Recordset對象的指針:

  _RecordsetPtr m_pRecordset;

  // 定義方法

public:

  ADOConn();

  virtual ~ADOConn();

  // 初始化—連接數據庫

  void  OnInitADOConn();

  // 執行查詢

  _RecordsetPtr& GetRecordSet(_bstr_t bstrSQL);

  // 執行SQL語句,Insert Update _variant_t

  BOOL ExecuteSQL(_bstr_t bstrSQL);

  //關閉數據庫連接

  void ExitConnect();

};

 

 

 

ADOConn.cpp源文件代碼:

 

 

// ADOConn.cpp: implementation of the ADOConn class.

//  通用連接數據庫類

//////////////////////////////////////////////////////////////////////

 

#include "stdafx.h"

#include "ADOConn.h"

 

#ifdef _DEBUG

#undef THIS_FILE

static char THIS_FILE[]=__FILE__;

#define new DEBUG_NEW

#endif

 

//////////////////////////////////////////////////////////////////////

// Construction/Destruction

//////////////////////////////////////////////////////////////////////

 

ADOConn::ADOConn()

{

 

}

 

ADOConn::~ADOConn()

{

 

}

 

// 初始化—連接數據庫

void  ADOConn::OnInitADOConn()

{

  // 初始化OLE/COM庫環境 

  ::CoInitialize(NULL);

 

  try

  {  

    //CString strSQL="Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=GARDE;Data Source=(local)";

    CString strSQL="Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=GARDE;Data Source=HP-PC\\HZU";

    m_pConnection.CreateInstance(_uuidof(Connection));

    m_pConnection->Open(_bstr_t(strSQL),"","",adModeUnknown);  

  }

  // 捕捉異常

  catch(_com_error e)

  {

    // 顯示錯誤信息

    AfxMessageBox(e.Description());

  }

}

 

// 執行查詢

_RecordsetPtr&  ADOConn::GetRecordSet(_bstr_t bstrSQL)

{

  try

  {

    // 連接數據庫,如果Connection對象爲空,則重新連接數據庫

    if(m_pConnection==NULL)

      OnInitADOConn();

    // 創建記錄集對象

    m_pRecordset.CreateInstance(__uuidof(Recordset));

    // 取得表中的記錄

    m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);

  }

  // 捕捉異常

  catch(_com_error e)

  {

    // 顯示錯誤信息

    AfxMessageBox(e.Description());

  }

  // 返回記錄集

  return m_pRecordset;

}

 

// 執行SQL語句,Insert Update _variant_t

BOOL ADOConn::ExecuteSQL(_bstr_t bstrSQL)

{

  //  _variant_t RecordsAffected;

  try

  {

    // 是否已經連接數據庫

    if(m_pConnection == NULL)

      OnInitADOConn();

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

  {

    AfxMessageBox(e.Description());

    return FALSE;

  }

}

 

void ADOConn::ExitConnect()

{

  // 關閉記錄集和連接

  if (m_pRecordset != NULL)

    m_pRecordset->Close();

  m_pConnection->Close();

  // 釋放環境

  ::CoUninitialize();

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章