Home   Cover Cover Cover Cover
 

Erzeugungsmuster und Verbindungszeichenfolgen-Generatoren


Zu Abschnitt 5.3.1 des Buchs

Das folgende Beispiel zeigt die Verwendung eines DbProviderFactory-Objekts zur Erzeugung einer Familie von zusammengehörigen Datenanbieter-Objekten sowie einen DbConnectionStringBuilder zum Aufbau einer Verbindungszeichenfolge. Es wird zuerst ein DbProviderFactory-Objekt für eine Verbindung zu einem SQL Server angelegt. Mit diesem werden dann das Verbindungsobjekt, das Kommandoobjekt und seine Parameter, sowie ein DbConnectionStringBuilder-Objekt erzeugt. Das DbConnectionStringBuilder-Objekt wir für den Aufbau der Verbindungszeichenfolge verwendet.

5-3-1-FactoryAndConnBuilderSample.cs
using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.Common;

namespace Chapter5
{

    public class FactoryAndConnBuilderSample
    {
        public static void Main()
        {
            //----- Aufbauen einer Verbindung zur Northwind-Datenbank am lokalen Rechner
            Console.WriteLine("Verbindung wird aufgebaut");

            // Erzeugerobjekt erzeugen
            DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.SqlClient");

            IDbConnection con = null; // Verbindung deklarieren
            try
            {
                // spezifisches Datenanbieter-Objekte erzeugen
                con = factory.CreateConnection();

                // ---- DbConnectionStringBuilder erzeugen
                DbConnectionStringBuilder builder = factory.CreateConnectionStringBuilder();
                builder["Server"] = "localhost\\SQLEXPRESS";
                builder["Initial Catalog"] = "Northwind";
                builder["Integrated Security"] = true;

                // ---- Verbindungszeichenfolge auslesen und Verbindung konfigurieren
                con.ConnectionString = builder.ConnectionString;

                // ---- Verbindung oeffnen
                con.Open();

                //----- SQL-Kommando aufbauen, um ID und Namen aller Angestellten abzufragen
                IDbCommand cmd = factory.CreateCommand();
                IDataParameter param = factory.CreateParameter(); 
                cmd.Connection = con;
                cmd.CommandText = "SELECT EmployeeID, LastName, FirstName " +
                                                      "FROM Employees";

                //----- SQL-Kommando ausfuehren; es liefert einen OleDbDataReader
                IDataReader reader = cmd.ExecuteReader();

                //----- Daten zeilenweise lesen und verarbeiten
                object[] dataRow = new object[reader.FieldCount];
                while (reader.Read())
                { // solange noch Daten vorhanden sind
                    int cols = reader.GetValues(dataRow); // tatsaechliches Lesen 
                    for (int i = 0; i < cols; i++) Console.Write("| {0} ", dataRow[i]);
                    Console.WriteLine();
                }

                //----- Reader schliessen
                reader.Close();
            }
            catch (Exception e)
            { // Fehlerbehandlung 
                Console.WriteLine(e.Message);
            }
            finally
            {
                try
                {
                    if (con != null) con.Close(); // Verbindung schliessen
                }
                catch (Exception ex) { Console.WriteLine(ex.Message); }
            }
        }
    }
}

Beim Ausführen des Programms wird folgende Ausgabe erzeugt:

output