VC++使用ADO串連SQL Server資料庫

來源:互聯網
上載者:User

基本步驟:

1.建立一個基於對話方塊的應用程式ADODatabase。

2.建立一個用來串連的ADO類庫。系統功能表中Insert->New Class項,class type選擇Generic Class; 在Name後輸入類名“ADOConn”,點OK。這樣,在工程上自動產生ADOConn.h和ADOConn.cpp兩個檔案。

3.在ADOConn.h中匯入一個ADO動態連結程式庫msado15.dll,添加代碼:#import "c:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF") rename("BOF","adoBOF"),同時在ADOConn.h中定義 public://添加一個指向Connection對象的指標: _ConnectionPtr m_pConnection; //添加一個指向Recordset對象的指標: _RecordsetPtr m_pRecordset。

4.m_pConnection->Open(_bstr_t ConnectionString, _bstr_t UserID, _bstr_t Password, long Options) 操作。ConnectionString為VC++中對SQL SERVER中ADO設定。如,Provider=SQLOLEDB;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=suntest;Data Source=WWW-ED1F301E78B ;User Id=sa;Password=;

其中Data Source為伺服器名稱,可以用Server代替,本機表示為.或者(local);Initial Catalog為你要使用的資料庫名稱 可以用Database代替;Integrated Security=SSPI表示用整合模式,此時uid 和pwd 設定不起作用;只有當Integrated Security=FALSE表示用混合模式,uid 和pwd 設定才起作用

參數Options表示CommandText的類型:adCmdText-文本命令;adCmdTable-表名 adCmdProc-預存程序;adCmdUnknown-未知

5.添加兩個成員函數:(1)執行查詢函數 _RecordsetPtr& GetRecordSet(_bstr_t bstrSQL);(2)執行SQL語句 BOOL ExecuteSQL(_bstr_t bstrSQL)。

給出兩個檔案的完整代碼:

/*------------------ADOConn.h File-------------------------------------------------*/

// ADOConn.h: interface for the ADOConn class.

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

#if !defined(AFX_ADOCONN_H__AC448F02_AF26_45E4_9B2D_D7ECB8FFCFB9__INCLUDED_)

#define AFX_ADOCONN_H__AC448F02_AF26_45E4_9B2D_D7ECB8FFCFB9__INCLUDED_

#if _MSC_VER > 1000

#pragma once

#endif // _MSC_VER > 1000

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();

};

#endif // !defined(AFX_ADOCONN_H__AC448F02_AF26_45E4_9B2D_D7ECB8FFCFB9__INCLUDED_)

/*--------------------------------------------------------------------------------*/

/*---------------------ADOConn.cpp File---------------------------*/

#include "stdafx.h"

#include "ADOConn.h"

#ifdef _DEBUG

#undef THIS_FILE

static char THIS_FILE[]=__FILE__;

#define new DEBUG_NEW

#endif

ADOConn::ADOConn()

{

}

ADOConn::~ADOConn()

{

}

// 初始化—串連資料庫

void ADOConn::OnInitADOConn()

{

// 初始化OLE/COM庫環境

::CoInitialize(NULL);

try

{

// 建立Connection對象

m_pConnection.CreateInstance("ADODB.Connection");

// 設定連接字串,必須是BSTR型或者_bstr_t類型

_bstr_t strConnect = "Provider=SQLOLEDB; Server=CZ;Database=HrSys; uid=sa; pwd=sa;";

m_pConnection->Open(strConnect,"","",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();

}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.