1、引入类库
#pragma warning(disable:4146)
#import"msado15.dll" no_namespace rename ("EOF", "adoEOF"), rename("BOF","adoBOF")
#import "MSJRO.DLL" no_namespace
using namespace ADODB;
#pragma warning(default:4146)
2、创建数据连接对象、打开连接
::CoInitialize(NULL);
try
{
m_pConnection.CreateInstance("ADODB.Connection");
_bstr_t strConnect="Provider=SQLOLEDB.1;Password=pwd;Persist Security Info=True;User ID=user_id;Initial Catalog=db_name;Data Source=server_ip";
m_pConnection->Open(strConnect,"","",adModeUnknown);
}
catch(_com_error e)
{}
以下就不加异常处理了,具体可以自己加上去。
3、打开记录集
m_pRecordset.CreateInstance(__uuidof(Recordset));
m_pRecordset->Open(SQL语句,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
4、执行SQL查询语句
m_pConnection->Execute(SQL语句,NULL,adCmdText);
当然也可以用COMMAND对象来执行查询,二者的区别大概就是:
COMMAND对象可以操作存贮过程,并取得其返回值
CONNECTION对象可以操作存储过程,但不能取得返回值
具体用法请查询详细资料。
5、用完了要记得,关闭记录集、连接、释放COM
m_pRecordset->Close();
m_pConnection->Close();
::CoUninitialize();
以下记录ADO使用过程中常见的方法,供参考:
1、读数据库中的二进制数据
long lDataSize = m_adoRecordSet.GetFields()->GetItem("声音")->ActualSize;
if(lDataSize > 0)
{
_variant_t varBLOB;
varBLOB = m_adoRecordSet.GetFields()->GetItem("声音")->GetChunk(lDataSize);
if(varBLOB.vt == (VT_ARRAY | VT_UI1))
{
char *pBuf = NULL;
SafeArrayAccessData(varBLOB.parray,(void **)&pBuf);
sndPlaySound(pBuf, SND_MEMORY | SND_SYNC | SND_NODEFAULT );//播放声音
SafeArrayUnaccessData(varBLOB.parray);//注意这句不能少的
}
}
2、读写时间值
COleDateTime oleDate = COleDateTime::GetCurrentTime();
_variant_t vtFld;
vtFld.vt = VT_DATE;
vtFld.date = oleDate;
pRecordSet->PutCollect("出生年月", vtFld);
读时间值
_bstr_t TheValue=m_pset->Fields->GetItem("出生年月")->Value;
temp=(char *)TheValue;
COleVariant vtime(temp);
vtime.ChangeType(VT_DATE);
COleDateTime time=vtime;
3、压缩ACCESS数据库
try
{
IJetEnginePtr jet(__uuidof(JetEngine));
jet->CompactDatabase( "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:nwind2.mdb;Jet OLEDB:Database Password=test",
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:abbc.mdb;"
"Jet OLEDB:Engine Type=4;Jet OLEDB:Database Password=test");
}
catch(_com_error &e)
{
::MessageBox(NULL, (LPCTSTR)e.Description( ), "", MB_OK) ;
}
(未完待续)
参考文章链接:
http://blog.chinaunix.net/u2/68138/showart_661828.html
http://www.ms-news.net/f3291/compact-database-run-time-2536918.html
http://blog.csdn.net/itmes/archive/2010/01/19/5212033.aspx
http://blog.csdn.net/AMWIHIHC/archive/2009/05/14/4180633.aspx