Home   Cover Cover Cover Cover
 

Lesen von Daten mit Datenbankprozedur


Zu Abschnitt 5.3.3 des Buchs

Das folgende Beispiel zeigt die Verwendung von DataReader und den Zugriff auf eine Tabelle in der Datenbank mit einer Datenbankprozedur. Es wird ein Kommandoobjekt für den Aufruf der Datenbankprozedur GetContacts erzeugt. Die Datenbankprozedur GetContacts liest bestimmte Zeilen der Contact-Tabelle in der NETBOOK-Datenbank. Mit dem durch die Ausführung des Kommandos gelieferten DataReader werden die Daten gelesen und entsprechend ausgegeben.

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

namespace Chapter5
{

    public class StoredProcedureSample
    {

        static SqlConnection NewConnection()
        {
            return new SqlConnection(
              "data source=localhost\\SQLEXPRESS; initial catalog=NETBOOK; Integrated Security=true;");
        }

        static IDbCommand NewSelectCmd()
        {
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = NewConnection();
            cmd.CommandText = "GetContacts"; // Name der Datenbankprozedur
            cmd.CommandType = CommandType.StoredProcedure;
            // Parameter der Datenbankprozedur 
            IDataParameterCollection pars = cmd.Parameters;
            pars.Add(new SqlParameter("@Name", SqlDbType.NVarChar));
            return cmd;
        }

        static void Main(string[] args)
        {
            IDbCommand cmd = NewSelectCmd();
            cmd.Connection.Open();
            ((IDataParameter)cmd.Parameters["@Name"]).Value = "B";
            IDataReader r = cmd.ExecuteReader(CommandBehavior.CloseConnection);
            while (r.Read())
            {
                //---- Lesen von ID, FirstName, Name, EMail, Phone
                StringBuilder buf = new StringBuilder();
                buf.Append(r.GetInt64(0)); buf.Append(","); // ID (mittels Zugriffmethode gelesen)
                buf.Append(r.GetString(1)); buf.Append(","); // FirstName (mit Zugriffsmethode gelesen)
                buf.Append(r[2]); buf.Append(","); // Name (mittels Indexer gelesen)
                buf.Append(r[3]); buf.Append(","); // Email (mittels Indexer gelesen)
                buf.Append(r["Phone"]); // Phone (mittels Indexer gelesen)
                Console.WriteLine(buf);
            }
            r.Close(); // schliesst den DataReader und die Verbindung
            Console.WriteLine();

            // Neuerlich lesen und mit PrintData ausgeben. 
            cmd.Connection.Open();
            ((IDataParameter)cmd.Parameters["@Name"]).Value = "B";
            r = cmd.ExecuteReader(CommandBehavior.CloseConnection);
            PrintData(r); 
            r.Close(); // schliesst den DataReader und die Verbindung

        }

        static void PrintData(IDataReader r)
        {
            if (r.IsClosed) return;
            //---- Spaltennamen ausgeben
            int cols = r.FieldCount; // Anzahl der Spalten
            for (int i = 0; i < cols; i++) Console.Write(r.GetName(i) + " | "); // Spaltennamen lesen
            Console.WriteLine();
            //---- Daten ausgeben
            while (r.Read())
            { //eigentliche Datensaetze lesen und ausgeben
                for (int i = 0; i < cols; i++) Console.Write(r.GetValue(i) + " | "); // Spalten ausgeben
                Console.WriteLine();
            }
        }
            
    }

}

Beim Ausführen des Programms wird folgende Ausgabe erzeugt:

output