打印本文 打印本文 关闭窗口 关闭窗口
VC++程序员应当如何阅读ADO文档
作者:武汉SEO闵涛  文章来源:敏韬网  点击数4433  更新时间:2009/4/23 10:41:00  文章录入:mintao  责任编辑:mintao
   }

   ::CoUninitialize();

}

 

使用GetItem(x)和Item[x]

下面是VB中关于Item()的标准与交互语法的演示。

Public Sub GetItemItem

Dim rs As New ADODB.Recordset

Dim name as String

rs = rs.Open "authors", "DSN=pubs;", adOpenDynamic, _

         adLockBatchOptimistic, adTable

name = rs(0)

'''' -or-

name = rs.Fields.Item(0)

rs(0) = "Test"

rs.UpdateBatch

'''' Restore name

rs(0) = name

rs.UpdateBatch

rs.Close

End Sub

 

以下则是VC++关于Item的演示

当访问collection中的Item时,索引值2必须被转换为long类型以确保正确的构造函数被调用。

#import "c:\Program Files\Common Files\System\ADO\msado15.dll" \

   no_namespace rename("EOF", "EndOfFile")

#include <stdio.h>

 

void main(void)

{

   CoInitialize(NULL);

   try {

      _RecordsetPtr   rs("ADODB.Recordset");

      _variant_t      vtFirstName;

 

      rs->Open("authors",

               "Provider=sqloledb;Data Source=a-tima10;"

               "Initial Catalog=pubs;User Id=sa;Password=;",

               adOpenStatic, adLockOptimistic, adCmdTable);

      rs->MoveFirst();

 

// Note 1.取得一个字段的名称

      vtFirstName = rs->Fields->GetItem((long)2)->GetValue();

   // -or-

      vtFirstName = rs->Fields->Item[(long)2]->Value;

 

      printf( "First name = ''''%s''''\n", (char*) ((_bstr_t) vtFirstName));

 

      rs->Fields->GetItem((long)2)->Value = L"TEST";

      rs->Update(vtMissing, vtMissing);

 

   // 恢复原名称

      rs->Fields->GetItem((long)2)->PutValue(vtFirstName);

      // -or-

      rs->Fields->GetItem((long)2)->Value = vtFirstName;

      rs->Update(vtMissing, vtMissing);

      rs->Close();

   }

   catch (_com_error &e)

   {

      printf("Description = ''''%s''''\n", (char*) e.Description());

   }

   ::CoUninitialize();

}

 

利用(IDispatch *)转换ADO对象的指针类型

1.在一个Variant中显式地封装一个活动的Connection对象,然后用(IDispatch *)进行类型转换确保正确的构造函数被调用。同时明确地设置第二个参数为缺省的true,使该对象的引用计数在Recordset::Open操作完成后仍得到正确的维护。

2.表达式(_bstr_t)不是一个类型转换,而是一个_variant_t的操作符,用以从中提取一个_bstr_t字符串。

表达式(char*)也不是一个类型转换,而是一个_bstr_t的操作符,用以从中提取封装在_bstr_t中的字符串的指针。

下面这些代码演示了_variant_t和_bstr_t的一些常见操作。

#import "c:\Program Files\Common Files\System\ADO\msado15.dll" \

no_namespace rename("EOF", "EndOfFile")

 

#include <stdio.h>

 

void main(void)

{

   CoInitialize(NULL);

   try

   {

      _ConnectionPtr pConn("ADODB.Connection");

      _RecordsetPtr  pRst("ADODB.Recordset");

 

      pConn->Open("Provider=sqloledb;Data Source=a-tima10;"

         "Initial Catalog=pubs;User Id=sa;Password=;",

         "", "", adConnectUnspecified);

// Note 1

      pRst->Open(

         "authors",

         _variant_t((IDispatch *) pConn, true),

         adOpenStatic,

         adLockReadOnly,

         adCmdTable);

      pRst->MoveLast();

// Note 2

      printf("Last name is ''''%s %s''''\n",

            (char*) ((_bstr_t) pRst->GetFields()->GetItem("au_fname")->GetValue()),

            (char*) ((_bstr_t) pRst->Fields->Item["au_lname"]->Value));

 

      pRst->Close();

      pConn->Close();

   }

   catch (_com_error &e)

   {

      printf("Description = ''''%s''''\n", (char*) e.Description());

  

上一页  [1] [2] [3] [4] [5] [6]  下一页

打印本文 打印本文 关闭窗口 关闭窗口