Visual C++ .NET/Database ADO.net/OleDbDataReader
Deal with Hierarchal ResultSet
<source lang="csharp">
- 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();
}
</source>
Using DataReader
<source lang="csharp">
- 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();
}
</source>