Visual C++ .NET/Database ADO.net/OleDbDataReader

Материал из .Net Framework эксперт
Версия от 12:06, 26 мая 2010; Admin (обсуждение | вклад) (1 версия)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Deal with Hierarchal ResultSet

 
#include "stdafx.h"
using namespace System;
using namespace System::Data;
using namespace System::Data::OleDb;
void TraverseReader(OleDbDataReader^ Reader){
    while ( Reader->Read() )
        for ( int i = 0; i < Reader->FieldCount; i++ ){
            Object^ Value = Reader->GetValue(i);
            if ( Value->GetType() == OleDbDataReader::typeid )
                TraverseReader(static_cast<OleDbDataReader^>(Value));
            Console::Write(gcnew String(" ", Reader->Depth*2));
            Console::WriteLine("{0} ({1}):\t{2}", Reader->GetName(i),Reader->GetDataTypeName(i), Value);
        }
}
void main(){
    OleDbConnection^ myConnection = nullptr;
    
    myConnection = gcnew OleDbConnection("Provider=MSDataShape;Data Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Music.mdb");        
    myConnection->Open();
        
    OleDbCommand^ myCommand = gcnew OleDbCommand(
            "SHAPE {SELECT Name, Description FROM Genre}\
            APPEND ({SELECT GenreName, Title, Duration FROM Music}\
            AS MusicByGenre\
            RELATE Name TO GenreName)",
            myConnection);
    TraverseReader(myCommand->ExecuteReader());
    myConnection->Close();
}


Using DataReader

 
#include "stdafx.h"
using namespace System;
using namespace System::Data;
using namespace System::Data::OleDb;
void main()
{
    OleDbConnection^ myConnection = nullptr;
    myConnection = gcnew OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Music.mdb");
    myConnection->Open();
    OleDbCommand^ myCommand = gcnew OleDbCommand("SELECT * FROM Music",myConnection);
    OleDbDataReader^ myReader = myCommand->ExecuteReader();
    do{
      while ( myReader->Read() ){
         for ( int i = 0; i < myReader->FieldCount; i++ )
            Console::WriteLine("{0} ({1}):\t{2}",
                myReader->GetName(i), myReader->GetDataTypeName(i),
                myReader->GetValue(i));
         }
      }
    while ( myReader->NextResult() );
    myConnection->Close();
}