ADO的简单使用(vc源代码)

本文提供了一个使用ADO进行数据库操作的C++示例程序,包括连接数据库、执行SQL语句及处理查询结果等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. // UseAdo.cpp : Defines the entry point for the console application.
  2. //
  3. #include "stdafx.h"
  4. #include <tchar.h>
  5. #include <windows.h>
  6. #include <iostream>
  7. #include <icrsint.h>
  8. using namespace std;
  9. #import "c:/program files/common files/system/ado/msado15.dll" /
  10.     no_namespace rename("EOF""AdoEOF") rename("BOF""AdoBOF")
  11. //global function
  12. BOOL ConnectDb(_ConnectionPtr pConn, LPCTSTR lpszDbPath);
  13. BOOL CloseConnect(_ConnectionPtr pConn);
  14. BOOL ExecuSql(_CommandPtr pCmd, LPCTSTR lpszSql, _RecordsetPtr& pRcord);
  15. int _tmain(int argc, _TCHAR* argv[])
  16. {
  17.     _ConnectionPtr pConn;
  18.     _RecordsetPtr pRecord;
  19.     _CommandPtr pCmd;
  20.     char szInput[MAX_PATH] = {0};
  21.     ::CoInitialize(NULL);
  22.     if ( FAILED(pConn.CreateInstance(_T("ADODB.Connection"))) )//创建Connection对象
  23.     {
  24.         cout << "CreateInstance(_T(ADODB.Connection))) failed! err code = " << ::GetLastError() << endl;
  25.         return FALSE;
  26.     }
  27.     if ( FAILED(pRecord.CreateInstance("ADODB.Recordset")) )//创建RecordSet对象
  28.     {
  29.         cout << "CreateInstance(_T(ADODB.Recordset))) failed! err code = " << ::GetLastError() << endl;
  30.         return FALSE;
  31.     }
  32.     if ( FAILED(pCmd.CreateInstance("ADODB.Command")) )//创建Command对象
  33.     {
  34.         cout << "CreateInstance(_T(ADODB.Command))) failed! err code = " << ::GetLastError() << endl;
  35.         return FALSE;
  36.     }
  37.     //连接数据库
  38.     if (!ConnectDb(pConn, "./testado.mdb"))
  39.     {
  40.         return FALSE;
  41.     }
  42.     pCmd->ActiveConnection = pConn;
  43.     pCmd->CommandType = adCmdText;
  44.     while (TRUE)
  45.     {
  46.         cout << "please input sql:" << endl;
  47.         cin.getline(szInput, MAX_PATH);
  48.         //全部转换成小写
  49.         ::strlwr(szInput);
  50.         if ( (::strncmp(szInput, "quit"sizeof(szInput)) == 0) || (::strncmp(szInput, "exit"sizeof(szInput)) == 0) )
  51.         {
  52.             break;
  53.         }
  54.     
  55.         if (!ExecuSql(pCmd, szInput, pRecord))
  56.         {
  57.             cout << "execute sql failed! please check you input!" << endl;
  58.             continue;
  59.         }
  60.         if (::strncmp(szInput, "select", strlen("select")) == 0)
  61.         {
  62.             while (!pRecord->GetAdoEOF())
  63.             {
  64.                 _variant_t vt;
  65.                 //get num
  66.                 vt = pRecord->GetCollect("snum");
  67.                 if (vt.vt != VT_NULL)
  68.                 {
  69.                     cout << "num = " << vt.intVal << "/t";
  70.                 }
  71.                 //get name
  72.                 vt = pRecord->GetCollect("sname");
  73.                 if (vt.vt != VT_NULL)
  74.                 {
  75.                     cout << "name = " << _com_util::ConvertBSTRToString(vt.bstrVal) << "/t";
  76.                 }           
  77.                 //get sex
  78.                 vt = pRecord->GetCollect("ssex");
  79.                 if (vt.vt != VT_NULL)
  80.                 {
  81.                     cout << "sex = " << _com_util::ConvertBSTRToString(vt.bstrVal) << "/t";
  82.                 }
  83.                 //get address
  84.                 vt = pRecord->GetCollect("saddr");
  85.                 if (vt.vt != VT_NULL)
  86.                 {
  87.                     cout << "address = " << _com_util::ConvertBSTRToString(vt.bstrVal) << endl;
  88.                 }
  89.                 pRecord->MoveNext();
  90.             }
  91.         }
  92.     }
  93.     ::CoUninitialize();
  94.     return 0;
  95. }
  96. BOOL ConnectDb(_ConnectionPtr pConn, LPCTSTR lpszDbPath)
  97. {
  98.     HRESULT hRet = S_FALSE;
  99.     TCHAR   szOpen[MAX_PATH] = {0};
  100.     
  101.     try
  102.     {
  103.         ::_sntprintf(szOpen, sizeof(szOpen), _T("Provider=Microsoft.Jet.OLEDB.4.0; Data Source = %s"), lpszDbPath);
  104.         if ( FAILED(pConn->Open(szOpen, _T(""), _T(""), adModeUnknown)) ) //连接数据库
  105.         {
  106.             cout << "open data base failed! open str = " << szOpen << endl;
  107.             return FALSE;
  108.         }
  109.     }
  110.     catch (_com_error ex)
  111.     {
  112.         cout << "connect database exception! err info: " << ex.ErrorMessage() << endl;
  113.         return FALSE;
  114.     }
  115.     return TRUE;
  116. }
  117. BOOL CloseConnect(_ConnectionPtr pConn)
  118. {
  119.     if (NULL == pConn)
  120.     {
  121.         return FALSE;
  122.     }
  123.     try
  124.     {
  125.         if (adStateClosed != pConn->State)
  126.         {
  127.             if ( FAILED(pConn->Close()) )
  128.             {
  129.                 cout << "close database connection failed!" << endl;
  130.                 return FALSE;
  131.             }
  132.         }
  133.         else
  134.         {
  135.             cout << "the database didn't open!" << endl;
  136.             return FALSE;
  137.         }
  138.     }
  139.     catch (_com_error exp)
  140.     {
  141.         cout << "close database exception!/nsource: " << (LPCTSTR)exp.Source() << " description: " << (LPCTSTR)exp.Description() << endl;
  142.         return FALSE;
  143.     }
  144.     return TRUE;
  145. }
  146. BOOL ExecuSql(_CommandPtr pCmd, LPCTSTR lpszSql, _RecordsetPtr& pRecord)
  147. {
  148.     try
  149.     {
  150.         pCmd->CommandText = lpszSql;
  151.         pCmd->Parameters->Refresh();
  152.         pRecord = pCmd->Execute(NULL, NULL, adCmdText);
  153.     }
  154.     catch (_com_error exp)
  155.     {
  156.         cout << "execute sql failed!" << endl;
  157.         return FALSE;
  158.     }
  159.     return TRUE;
  160. }
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值