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:
|