Home   Cover Cover Cover Cover
 

Verarbeitung von mehreren Ergebnistabellen


Zu Abschnitt 5.3.3 des Buchs

Das folgende Beispiel zeigt, wie man mit einem DataReader mehrere Ergebnistabellen auslesen kann. Mit dem Kommandoobjekt wird sowohl auf die Tabelle Person als auch auf die Tabelle Contact zugegriffen. Beim Auslesen der Daten kann mit der Methode NextResult des DataReaders auf die nächste Tabelle zugegriffen werden.

5-3-3-MultipleResultsSample.cs
using System;
using System.Data;
using System.Data.SqlClient;
using System.Text;

namespace Chapter5 {

    public class MultipleResultsSample
    {
        static SqlConnection NewConnection()
        {
            return new SqlConnection(
                "data source=(local)\\SQLEXPRESS; initial catalog=NETBOOK; user id=sa; password=sa");
        }

        static IDbCommand NewSelectCmd()
        {
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = NewConnection();
            cmd.CommandText = "SELECT * FROM Person; SELECT * FROM Contact";
            return cmd;
        }

        static void ExecuteCmd()
        {
            IDbCommand cmd = NewSelectCmd();
            int i = 0;
            cmd.Connection.Open();
            IDataReader r = cmd.ExecuteReader();
            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());

            r.Close(); // schliesst den DataReader und die Verbindung
            cmd.Connection.Close();
        }


        public static void Main()
        {
            try
            {
                ExecuteCmd();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.StackTrace);
            }
        }
    }
}

Beim Ausführen des Programms wird folgende Ausgabe erzeugt:

output