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