Click here to Skip to main content
15,881,757 members
Articles / Programming Languages / C++/CLI
Article

Using ADO.NET in a managed C++ application

Rate me:
Please Sign up or sign in to vote.
1.83/5 (3 votes)
11 Sep 20011 min read 121K   2.4K   22   7
This article demonstrates the basics of accessing a database and retrieving data from that database usingthe ADO.NET data classes.

Introduction

This article demonstrates the basics of accessing a database and retrieving data from that database usingthe ADO.NET data classes.

It uses the .NET ADODataReader class to retrieve a read-only, forward-only stream of data from the database. Using the Data Reader can increase application performance and reduce system overhead becauseonly one row at a time is ever in memory.

This example is based on the standard Managed C++ Application created by the Application Wizard.

To get an access to the .NET Framework classes we need for database support, we should add the following lines to the main source file:

#using <mscorlib.dll>

// Add access to .NET Framework classes.
#using <System.dll>
#using <System.Data.dll>

using namespace System;
using namespace System::Data::ADO;

To retrieve the data from the database we must first create a connection to the database using the ADOConnection class. We then set the ConnectionString property to specify the data source and then connect to the database using the Open() method of the ADOConnection class.

After that we create a command object to get the data using the ADOCommand class. Executing this command returns us a reference to the data reader class, which is an instance of the ADODataReader class.

We then loop through each row of data one at the time by calling the Read() member of the ADODataReader class. It retrieves data that is accessible as an items collection. We can get items by index or by column name. Note: We should always call the Read method before we access the data in the ADODataReader object.

int main(void)
{
    OleDbConnection* connection;    // ADO connection.
    OleDbCommand* command;            // ADO command
    OleDbDataReader* dataReader;    // ADO data reader

    try
    {
        // Create connection, set connection string and open connection to
        // specified database.
        connection = new OleDbConnection();
        connection->set_ConnectionString("Provider=Microsoft.Jet.OLEDB.4.0;"
                                         "Data Source=..\\Data\\grocertogo.mdb;"
                                         "Persist Security Info=False");
        
        connection->Open();

        // Create command and get data reader by executing this command.
        command = new OleDbCommand(S"SELECT ProductName, UnitPrice FROM Products", 
                                   connection);
        dataReader = command->ExecuteReader();

        // Print table header
        Console::WriteLine(S"_____________________________________");
        Console::WriteLine(S"Product                       | Price");
        Console::WriteLine(S"_____________________________________");

        // Iterate through rows set and print data.
        while(dataReader->Read())
            Console::WriteLine(S"{0, -30}| {1}", dataReader->get_Item("ProductName"), 
                               dataReader->get_Item("UnitPrice"));

        // Print table footer.
        Console::WriteLine(S"_____________________________________");


        // Close DataReader
        dataReader->Close();
        // Close connection.
        connection->Close();
    }
    catch(Exception* e)
    {
        // Print error message and close connection.
        Console::WriteLine("Error occured: {0}", e->Message);
        if (dataReader && !dataReader->IsClosed) 
            dataReader->Close();
        if (connection->State == ConnectionState::Open) 
            connection->Close();
    }

    Console::WriteLine("\n\n -- PROGRAM ENDS --\nPress Enter to continue");
    Console::ReadLine();

    return 0;
}

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
United States United States
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
GeneralProblems when compiling Pin
flyfrog15-Apr-06 0:29
flyfrog15-Apr-06 0:29 
GeneralYes but.. Pin
Anonymous24-Jun-03 12:18
Anonymous24-Jun-03 12:18 
General.NET is slow slow slow Pin
16-Jan-02 9:54
suss16-Jan-02 9:54 
GeneralADO.net article Pin
21-Nov-01 5:13
suss21-Nov-01 5:13 
GeneralRe: ADO.net article Pin
Tapan.Net27-Apr-04 1:56
Tapan.Net27-Apr-04 1:56 
Generalhello Pin
9-Nov-01 19:52
suss9-Nov-01 19:52 
GeneralRe: hello Pin
Selvam R2-Feb-04 6:31
professionalSelvam R2-Feb-04 6:31 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.