刚开始学习数据库编程,先从ADO来吧,也从最基本的来吧,希望CSDN能记下我学习的全过程,也希望CSDN能给我个动力和监督的效果,我会坚持学好,也会坚持写BLOG。
使用ADO前先要把ADO的库包含进来,#import "c:/Program Files/Common Files/System/ADO/msado15.dll" no_namespace rename ( "EOF", "adoEOF" ),把这个库包含进来后,编译程序会生成两个文件msado15.tlh和msado15.tli这两个文件包含了我们要调用ADO函数,需要注意的是这个预编译命令需要放在所有#include之后,否则会出现编译错误,至于为什么这样,哈哈,还没搞清楚。
除了要把ADO的库包含进来,还要包含头文件#include <icrsint.h>,这个文件定义了ADO需要用到的变量。
好,前期工作完成后,现在进入ADO吧:
ADO主要包含三个对象:Connection、Recordset和Command,很显然,Connection当然是数据库连接,Recordset是数据记录集,Command是命令对象。
好先看下我写的简单程序吧
//首先调用OleDB的初始化函数CoInitialize(NULL);,否则创建Ado对象可能会失败;
CoInitialize(NULL);
_ConnectionPtr pMyConnect = NULL;
//初始化connection对象,现在不懂的是pMyConnect.CreateInstance( uuidof ( Connection ) );为什么会有时失败
//还没搞懂,暂时只会用下面这样初始化Connection了
HRESULT hr = pMyConnect.CreateInstance( "ADODB.Connection" );
if ( FAILED ( hr ) )
{
::MessageBox ( NULL, "连接初始化失败", "警告", MB_OK | MB_ICONASTERISK );
return 0;
}
//设置连接字符串
_bstr_t strConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= f://test.mdb";
try
{
pMyConnect->Open( strConnect, "", "", NULL );
}
catch ( _com_error &e )
{
::MessageBox ( NULL, e.Description(), "警告", MB_OK | MB_ICONASTERISK );
}
//使用记录集前也要初始化
_RecordsetPtr pMyRecordSet;
if ( FAILED ( pMyRecordSet.CreateInstance( __uuidof(Recordset) ) ) )
{
::MessageBox ( NULL, "记录初始化失败", "警告", MB_OK | MB_ICONASTERISK );
return 0;
}
try
{
//参数里具体每个变量是干什么用的,暂时还没搞清楚
pMyRecordSet->Open( _variant_t ( "testTable "),
_variant_t ( (IDispatch *) pMyConnect, true ),
adOpenKeyset,
adLockOptimistic,
adCmdTable );
}
catch ( _com_error &e )
{
::MessageBox ( NULL, "无法打开表testTable", "警告", MB_OK | MB_ICONASTERISK );
}
pMyRecordSet->MoveFirst();
try
{
while ( pMyRecordSet->adoEOF == VARIANT_FALSE )
{
pMyRecordSet->Fields->GetItem( _variant_t ( "name" ) )->Value = ( _bstr_t )( "某某" );
int id = ( long )( pMyRecordSet->Fields->GetItem( _variant_t ( "id" ) )->Value );
pMyRecordSet->Update();
pMyRecordSet->MoveNext();
}
}
catch ( _com_error &e )
{
::MessageBox ( NULL, e.Description(), "警告", MB_OK | MB_ICONASTERISK );
}
try
{
if ( !pMyRecordSet->Supports( adAddNew ) )
{
::MessageBox ( NULL, "不支持添加记录", "警告", MB_OK | MB_ICONASTERISK );
return 0;
}
//添加记录
pMyRecordSet->AddNew();
pMyRecordSet->Fields->GetItem( _variant_t ( "id" ) )->Value = _variant_t ( ( long )3 );
pMyRecordSet->Fields->GetItem( _variant_t ( "name" ) )->Value = _bstr_t ( "某某" );
pMyRecordSet->Update();
}
catch ( _com_error &e )
{
::MessageBox ( NULL, e.Description(), "警告", MB_OK | MB_ICONASTERISK );
}