Home   Cover Cover Cover Cover
 

Befüllen und Lesen von DataSets mit DataReader


Zu Abschnitt 5.4.3 des Buchs

Das folgende Beispielprogramm zeigt die Verwendung von DataReader in Zusammenhang mit DataSets. In der Methode LoadData wird ein DataReader verwendet, um ein DataSet zu befüllen (Methode Load). In der Methode Print wird ein DataTableReader verwendet, um die Daten aus dem DataSet auszulesen.

5-4-3-DataTableReaderSample.cs
using System;
using System.Data;
using System.Data.SqlClient;

namespace Chapter5
{

    public class DataTableReaderSample
    {
        public static void Main()
        {
            //----- Daten und Schema laden
            DataSet ds = LoadData();

            //----- Daten ausgeben
            Print(ds);

            //----- Daten als XML Datei speichern
            ds.WriteXml("data.xml");
        }

        static DataSet LoadData()
        {
            IDbConnection con = null;
            try
            {
                //----- Verbindung aufbauen
                con = new SqlConnection("data source=(local)\\SQLEXPRESS; " +
                    " database=NETBOOK; Integrated Security= True;");
                //----- Select-Kommando erzeugen 
                IDbCommand cmd = new SqlCommand();
                cmd.Connection = con;
                cmd.CommandText = "SELECT * FROM Person; SELECT * FROM Contact";
                //----- Verbindung oeffnen 
                con.Open();
                //----- Reader erzeugen 
                IDataReader reader = cmd.ExecuteReader();

                //----- DataSet erzeugen und mit Reader befuellen
                DataSet ds = new DataSet("PersonContacts");
                //ds.Tables.Add(new DataTable("Person"));
                //ds.Tables.Add(new DataTable("Contact"));
                ds.Load(reader, LoadOption.OverwriteChanges, "Person", "Contact");
                // Aenderungen uebernehmen oder verwerfen
                if (ds.HasErrors) ds.RejectChanges(); else ds.AcceptChanges();
                return ds;
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString()); 
                return null;
            }
            finally
            {
                if (con != null) con.Close(); 
            }
        }


        static void Print(DataSet ds)
        {
            DataTableReader r = ds.CreateDataReader();
            int i = 1; 
            do
            {
                Console.WriteLine(" ---- Table " + i + "----------------"); 
                while (r.Read())
                {
                    object[] vals = new object[r.FieldCount];
                    r.GetValues(vals);
                    foreach (object v in vals)
                    {
                        Console.Write(v.ToString() + " - ");
                    }
                    Console.WriteLine();
                }
                i++; 
            } while (r.NextResult()); 
        }

    }

}

Beim Ausführen des Programms wird folgende Ausgabe erzeugt:

output