We couldn’t sign you in
Select the account you want to use.

Streszczenie

Z obiektów ADO 2.5 lub nowszy obiekty Recordset mogą być pozostawione do dowolnego obiektu, który implementuje interfejsu IStream. Przykładowy kod w tym artykule przedstawiono sposób utrzymują/obciążenia zestawu rekordów ADO do/z pliku xml zewnętrznego obiektu IStream ADO i obiekt XML DOM.

Więcej informacji

1. w przykładzie zastosowano tabeli Autorzy bazy danych pubs bazy danych programu SQL Server.

2. Zmień ciąg połączenia, aby podać poświadczenia użytkownika i nazwę prawo źródła danych.

3. ponieważ istnieją dwie #import biblioteki dll, dla uproszczenia programowania, nazwy obszaru nazw obiektów ADO (ADODB) jako MSXML i użyć programu MSXML dla interfejsów zdefiniowanych w obu bibliotek DLL. Alternatywnie bez w ten sposób można zawsze prefiks interfejs z odpowiedniego obszaru nazw.

Uwaga Należy zmienić nazwę użytkownika = < nazwa_użytkownika > i hasło = < silne hasło > do poprawnych wartości przed uruchomieniem tego kodu. Upewnij się, że identyfikator użytkownika ma odpowiednie uprawnienia do wykonania tej operacji na bazie danych.

// 1. ADO Recordset <-> external xml file
// 2. ADO Recordset <-> ADO IStream Object
// 3. ADO Recordset <-> DOM Document

#import "C:\Program files\Common Files\System\Ado\msado15.dll" rename_namespace("MSXML") rename("EOF", "ADOEOF")

#import "c:\winnt\system32\msxml.dll"
using namespace MSXML;

#include "stdio.h"
#include "io.h"
void dump_error(_com_error &e) ; //exception handling

void main()
{
HRESULT hr;
CoInitialize(NULL);

try
{
//open the connection, get the reocrdset ready
_ConnectionPtr pConn;
_RecordsetPtr pRs;

hr = pConn.CreateInstance(__uuidof(Connection));
hr = pRs.CreateInstance(__uuidof(Recordset));

pConn->CursorLocation = adUseClient;
_bstr_t strConn("Provider=sqloledb;Data Source=juliaj01;Initial Catalog=pubs;User Id=<username>;Password=<strong password>;");
hr = pConn->Open(strConn, "<username>", "<strong password>", adConnectUnspecified);
hr = pRs->Open("SELECT * from authors", pConn.GetInterfacePtr(), adOpenForwardOnly, adLockReadOnly, adCmdText);

//preparation to save RS as xml file,
struct _finddata_t xml_file;
long hFile;
if( (hFile = _findfirst("authors.xml", &xml_file )) != -1L)
{
DeleteFile("authors.xml"); //if the file exists, delete it
}

// 1. Persist it to an external xml file by calling Save with file name and adPersistXML
hr = pRs->Save("authors.xml", adPersistXML);

// 2. Persist it to ADO IStream Object
_StreamPtrpStream ; //declare one first
pStream.CreateInstance(__uuidof(Stream)); //create it after
hr = pRs->Save(pStream.GetInterfacePtr(), adPersistXML); //old trick, call Save

// 3. Persist it to DOM Document
IXMLDOMDocumentPtr pXMLDOMDoc;
pXMLDOMDoc.CreateInstance(__uuidof(DOMDocument));
hr = pRs->Save(pXMLDOMDoc.GetInterfacePtr(), adPersistXML);
// if you want to check out the content call printf(pXMLDOMDoc->Getxml());

//Recycle the Recordset object
hr = pRs->Close();

// 4. load the recordset back from the file by calling Open with MSPersist provider and adCmdFile.
// the Recordset will be a ReadOnly, Forwardly only
hr = pRs->Open("authors.xml","Provider=MSPersist;",adOpenForwardOnly,adLockReadOnly,adCmdFile);
hr = pRs->Close();

// 5. Load from IStream object, call Open, first param is pStream.GetInterfacePtr()

// Set the steam object position to the beginning of the stream:
pStream->Position = 0;

// call Open, passing in vtMissing for connection string, see Q245485 for details
hr = pRs->Open(pStream.GetInterfacePtr(),vtMissing, adOpenForwardOnly,adLockReadOnly,adCmdFile);

hr = pRs->Close();

// 6 .Load from DOM Document, call Open, first param is pXMLDOMDoc.GetInterfacePtr() and
// pass in vtMissing for connection string, see Q245485

hr = pRs->Open(pXMLDOMDoc.GetInterfacePtr(), vtMissing, adOpenForwardOnly, adLockReadOnly, adCmdFile);

hr = pRs->Close();



//Don't forget to clean up the stream object
hr = pStream->Close();

}
catch(_com_error &e)
{
dump_error(e);
}
}

void dump_error(_com_error &e)
{
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());

// Print Com errors.
printf("Error\n");
printf("\tCode = %08lx\n", e.Error());
printf("\tCode meaning = %s", e.ErrorMessage());
printf("\tSource = %s\n", (LPCSTR) bstrSource);
printf("\tDescription = %s\n", (LPCSTR) bstrDescription);

}

Uwaga Kod przykładowy, w tym artykule zawiera odwołanie do program MSXML 2.5 lub wcześniej. Jeśli w trybie zamiany na tym komputerze zainstalowano nowszej wersji programu MSXML, przykładowy kod automatycznie użyje tej nowej wersji. Nowsza wersja programu MSXML po zainstalowaniu w trybie side-by-side na tym komputerze, kod może używać starszej wersji.

Aby uruchomić kod z programu MSXML 6.0, następujących wierszy kodu muszą zostać zmienione:

  • Zastępowanie:

    Zmień rename_namespace("MSXML") #import "C:\Program files\Common Files\System\Ado\msado15.dll" ("EOF", "ADOEOF")


    #import "c:\winnt\system32\msxml.dll", używając nazw MSXML;
    Z:

    Zmień rename_namespace("MSXML2") #import "C:\Program files\Common Files\System\Ado\msado15.dll" ("EOF", "ADOEOF")


    #import "c:\winnt\system32\msxml6.dll" przy użyciu nazw MSXML2, którego;

  • Zastępowanie:

    pXMLDOMDoc.CreateInstance(__uuidof(DOMDocument));
    Z:

    pXMLDOMDoc.CreateInstance(__uuidof(DOMDocument60));

Aby uruchomić kod z programu MSXML 6.0, następujących wierszy kodu muszą zostać zmienione:

  • Zastępowanie:

    Zmień rename_namespace("MSXML") #import "C:\Program files\Common Files\System\Ado\msado15.dll" ("EOF", "ADOEOF")


    #import "c:\winnt\system32\msxml.dll", używając nazw MSXML;
    Z:

    Zmień rename_namespace("MSXML2") #import "C:\Program files\Common Files\System\Ado\msado15.dll" ("EOF", "ADOEOF")


    #import "c:\winnt\system32\msxml6.dll" przy użyciu nazw MSXML2, którego;

  • Zastępowanie:

    pXMLDOMDoc.CreateInstance(__uuidof(DOMDocument));
    Z:

    pXMLDOMDoc.CreateInstance(__uuidof(DOMDocument60));

Powiązane artykuły

Aby uzyskać więcej informacji kliknij następujące numery artykułów w celu wyświetlenia tych artykułów z bazy wiedzy Microsoft Knowledge Base:

245485 tytuł Autor typ zawartości języka ustawień regionalnych wersji poufności zawartości Status grupy roboczej MT publikowanie Data działania

262447 jak utrzymują/obciążenia OLE DB wierszy do/z pliku XML z klas szablonów ATL OLE DB konsumenta

259555 PRB: błąd występuje podczas próby otwarcia zestawu rekordów ADO w strumieniu XML

Potrzebna dalsza pomoc?

Rozwijaj swoje umiejętności
Poznaj szkolenia
Uzyskuj nowe funkcje w pierwszej kolejności
Dołącz do niejawnych testerów firmy Microsoft

Czy te informacje były pomocne?

Jaka jest jakość języka?
Co wpłynęło na Twoje wrażenia?

Dziękujemy za opinię!

×