编者:李国帅


背景原因:

         访问数据库的技术有很多,比如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
}