天天看點

VC使用ado通路MSSql資料庫的簡單例程 

編者:李國帥

qq:9611153 微信lgs9611153

時間:2008-3-11

背景原因:

         通路資料庫的技術有很多,比如adbc,ado,oledb等等,它們用在不同的場景,各有各自的優點和缺點。

問題描述及期望效果:

ADO (ActiveX Data Objects,ActiveX資料對象)是Microsoft提出的應用程式接口(API)用以實作通路關系或非關系資料庫中的資料。

         VC中通路資料庫是常見的技術,這裡整理了調用ado技術通路MSSql資料的簡單例子。

所需資源:

VC,ADO,MSSql

例子:

導入

#include <comdef.h>
  #import "C:\program files\common files\system\ado\msado15.dll" \
           no_namespace \
           rename( "EOF", "adoEOF" )
           

聲明變量

_ConnectionPtr m_pMyDb;
	_RecordsetPtr  m_pMySet;

           

使用ado通路資料庫

BOOL CDlgApp::InitInstance()
{

	if(!AfxOleInit())
	{
	AfxMessageBox("OLE初始化出錯!");
	return FALSE;
	}
	return FALSE;
}

int CDlgApp::ExitInstance()
{
	::CoUninitialize();
	return CWinApp::ExitInstance();
}

BOOL CDlgDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	_variant_t TheValue;
	m_List.DeleteAllItems();
	m_pMyDb.CreateInstance(_uuidof(Connection));
	m_pMySet.CreateInstance(_uuidof(Recordset));

	try
	{
		m_pMyDb->Open("MarketMS", "","", 0);
		m_pMySet->Open("SELECT * FROM GoodsMng",
			m_pMyDb.GetInterfacePtr(),
			adOpenDynamic,adLockOptimistic,adCmdText);

//執行SQL語句得到一個記錄集
		while(!m_pMySet->adoEOF)
//周遊所有記錄
		{
			TheValue = m_pMySet->GetCollect("GoodsName");
//得到字段BlockIndex的值
			if(TheValue.vt!=VT_NULL)
			{
				m_List.InsertItem(1, (char*)_bstr_t(TheValue)); //将該值加入到清單控件中
			}
			m_pMySet->MoveNext();
		}
		m_pMySet->Close();
		m_pMyDb->Close();
	}
	catch(_com_error e) //異常處理
	{
		AfxMessageBox(e.ErrorMessage());
	}
	m_pMySet = NULL;
	m_pMyDb = NULL;

/*  pCommand.CreateInstance(_uuidof(Command));

  pCommand->ActiveConnection=MyDb;

  pCommand->CommandText="select  from some—table";

  pCommand->CommandType=adCmdText;

  pCommand->Parameters->Refresh();

  MySet=pCommand->Execute(NULL,NULL,adCmdUnknown);

  _variant_t TheValue = MySet->GetCollect("FIELD_1");

  CString sValue=(char)_bstr_t(TheValue);
*/

	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon

	// TODO: Add extra initialization here

	return TRUE;  // return TRUE  unless you set the focus to a control
}