交通技术。
设为首页
收藏本页
联系我们
首页 >> 软件技术 >> 程序开发 >> 正文
推荐新闻
Import Autocad data into Trans
TransCAD培训幻灯片
TRANSCAD教程1:Project and Tra
TRANSCAD教程2:The Miasma Beac
TRANSCAD教程3:DEVELOP 2004 BA
TRANSCAD教程4:DEMAND FORECAST
TRANSCAD教程5:DEMAND FORECAST
TRANSCAD教程6:DEMAND FORECAST
TRANSCAD教程7:DEMAND FORECAST
新闻搜索
专题文章导航

拥挤收费 十一五规划
PTV EMME2
TRANSCAD TOD
交通白皮书 交通影响分析
停车换乘P&R 快速公交BRT



 
ADO 教程 (VC++)
[ 作者:MSDN | 来源:MSDN | 时间:2006-1-21 12:37:09 ]

本教程以新版 Microsoft® Visual C++® Extensions 为特征。VC++ Extensions 删除了对繁琐的 VARIANT 数据类型的使用。 

本教程还使用了 #import 伪指令,它将 ADO Typelib 转换到头文件中,这个头文件使一些 ADO 的功能在使用和外观上类似于它的同伴 Microsoft® Visual Basic®。

#define INITGUID

#import "c:\Program Files\Common Files\System\ADO\msado15.dll" 
   no_namespace rename("EOF", "EndOfFile")
#include <stdio.h>
#include "icrsint.h"

void dump_com_error(_com_error &e)
   {
   printf("Error\n");
   printf("\a\tCode = %08lx\n", e.Error());
   printf("\a\tCode meaning = %s", e.ErrorMessage());
   _bstr_t bstrSource(e.Source());
   _bstr_t bstrDescription(e.Description());
   printf("\a\tSource = %s\n", (LPCSTR) bstrSource);
   printf("\a\tDescription = %s\n", (LPCSTR) bstrDescription);
   }

class CCustomRs : 
   public CADORecordBinding
{
BEGIN_ADO_BINDING(CCustomRs)
   ADO_VARIABLE_LENGTH_BINDING_ENTRY(1, adVarChar, m_szau_lname, 
         sizeof(m_szau_lname), lau_lnameStatus, FALSE)
   ADO_VARIABLE_LENGTH_BINDING_ENTRY(2, adVarChar, m_szau_fname, 
         sizeof(m_szau_fname), lau_fnameStatus, FALSE)
   ADO_FIXED_LENGTH_BINDING_ENTRY(3, adChar, m_szphone, 
         sizeof(m_szphone), lphoneStatus, TRUE)
END_ADO_BINDING()

public:
   CHAR   m_szau_lname[41];
   ULONG   lau_lnameStatus;
   CHAR   m_szau_fname[41];
   ULONG   lau_fnameStatus;
   CHAR   m_szphone[12];
   ULONG   lphoneStatus;
};

VOID   main()
   {
   HRESULT hr;
   IADORecordBinding   *picRs = NULL;
   
   ::CoInitialize(NULL);

   try 
      {
      _ConnectionPtr pConn("ADODB.Connection.1.5");
      _RecordsetPtr pRs("ADODB.Recordset.1.5");
      CCustomRs rs;

// 步骤 1 — 打开连接

      pConn->Open("dsn=pubs;uid=sa;pwd=;");

//步骤 2 — 创建命令

// 步骤 3 — 执行命令

      pRs->Open("select * from authors", pConn, 
         adOpenDynamic, adLockOptimistic, adCmdUnknown);
      
      if (FAILED(hr = pRs->QueryInterface(__uuidof(IADORecordBinding), 
            (LPVOID*)&picRs)))
         _com_issue_error(hr);
      
      if (FAILED(hr = picRs->BindToRecordset(&rs)))
         _com_issue_error(hr);

// 步骤 4 — 操作数据

      pRs->Fields("au_lname").Optimize = TRUE;
      pRs->Sort = "au_lname ASCENDING";
      pRs->Filter = "phone LIKE '415 5*";

      pRs->MoveFirst();
      while (VARIANT_FALSE == pRs->EndOfFile)
         {
         printf("\a\tName: %s\t %s\tPhone: %s\n", 
            (lau_fnameStatus == adFldOK ? m_szau_fname : ""), 
            (lau_lnameStatus == adFldOK ? m_szau_lname): ""),
            (lau_lphoneStatus == adFldOK ? m_szphone): ""));

         if (lphoneStatus == adFldOK)
            lmemcpy(m_szphone, "777", 3);
            
         if (FAILED(hr = picRs->Update(&rs)))
            _com_issue_error(hr);

      // Change the current row of the Recordset. 
      // Recordset data for the new current row will automatically be 
      // extracted and placed in the CCustomRs C++ instance variables.
   
         pRs->MoveNext();
         }
      pRs->Filter = adFilterNone;

// 步骤 5 — 更新数据

      pConn->BeginTrans();
      pRs->UpdateBatch();

// 步骤 6-A — 结束更新 

      pConn->CommitTrans();
      }
   catch (_com_error &e)
      {
      dump_com_error(e);
      }
   catch (ADODB.Error &e)
      {
      pRS->Filter = adConflictingRecords;
      pRs->MoveFirst();
      while (VARIANT_FALSE == pRs->EndOfFile)
         {
         printf("\a\tConflict: Name = %s\t %s\n", 
            (lau_fnameStatus == adFldOK ? m_szau_fname : ""), 
            (lau_lnameStatus == adFldOK ? m_szau_lname): ""));
         pRs->MoveNext();
         }

// 步骤 6-B 部分 — 结束更新

      pConn->Rollback();
      }

   if (picRs)
      picRs->Release();

   CoUninitialize();
   }

VC++ 教程到此结束。 

 
上一篇:ADO 当前并不支持 DAO 的所有功能
下一篇:ADO DAO RDO之比较
[打印本页]  [关闭窗口]  [返回顶部]
特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有, 本站不凭借所收集资料获取商业利益。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。 本站所有技术文章、专业软件资料仅供技术人员、高校师生学习交流之用,目的旨在促进与提高中国的交通技术水平;用户获取后不得用于商业目的,否则,所产生的法律责任本站概不负责。