#include <afxdtctl.h>
#include <iostream.h>
#import "C:\Program Files\Common Files\System\ADO\msado15.dll" \
no_namespace rename("EOF", "adoEOF")
int main(int argc, char* argv[])
{
CoInitialize(NULL);
//初始化COM庫
AfxOleInit();
// 定義ADO連接、命令、記錄集變量指針
_ConnectionPtr pConnection;
_CommandPtr pCommand;
_RecordsetPtr pRecordSet;
char* userName;
char* password;
// 創建Connection對象
HRESULT hr = pConnection.CreateInstance("ADODB.Connection");
if (SUCCEEDED(hr))
{
try
{
// 打開數據庫連接
hr = pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=.\\test.mdb","","",adModeUnknown);
// 創建RecordSet
pRecordSet.CreateInstance("ADODB.Recordset");
pRecordSet->Open("SELECT * FROM user1", pConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText);
_variant_t varName, varPassword;
while(!pRecordSet->adoEOF)
{
varName = pRecordSet->GetCollect("name");
varPassword = pRecordSet->GetCollect("password");
if(varName.vt != NULL)
{
userName = _com_util::ConvertBSTRToString((_bstr_t)varName);
}
if(varPassword.vt != NULL)
{
password = _com_util::ConvertBSTRToString((_bstr_t)varPassword);
}
cout << "用戶名:" << userName << endl;
cout << "密碼:" << password << endl;
pRecordSet->MoveNext();
}
pConnection->Close();
}
catch(_com_error e)
{
cout<<e.ErrorMessage();
cout<<e.Description();
}
}
}
太坑爹了,如果把表名命名爲user,Access中執行是不報錯的,但在程序中將會出錯,錯誤信息爲:子句語法錯誤。將表名改成其他的就可以了。。。