Visual C++ .NET/Database ADO.net/OleDbDataReader
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();
}