Gespeicherte Prozedur über C# aufrufen
Beitrag geschrieben von PriHost am 2007-11-13
Kurzbeschreibung:
Beschreibung eines Aufrufs einer Gespeicherten Prozedur von MS-SQL mit der Programmiersprache C#
Beschreibung eines Aufrufs einer Gespeicherten Prozedur von MS-SQL mit der Programmiersprache C#
Die gespeicherte Prozedur "CustOrderHist" aus der Standard-Datenbank "Northwind" des SQL-Servers 2000 wird über eine C#-Konsolenanwendung aufgerufen und der Rückgabewert ausgegeben.
Zuerst erstellen wir die Prozedur, die aber in der Northwind-Datenbank bereits vorhanden sein sollt:
Nun erstellen wir eine C#-Konsolenanwendung namens "QueryTest"
Es sollte nun folgende Ausgabe angezeigt werden:
ProductName: Aniseed Syrup - Quantity: 6
ProductName: Chartreuse verte - Quantity: 21
ProductName: Escargots de Bourgogne - Quantity: 40
ProductName: Flotemysost - Quantity: 20
ProductName: Grandma's Boysenberry Spread - Quantity: 16
ProductName: Lakkalikööri - Quantity: 15
ProductName: Original Frankfurter grüne Soße - Quantity: 2
ProductName: Raclette Courdavault - Quantity: 15
ProductName: Rössle Sauerkraut - Quantity: 17
ProductName: Spegesild - Quantity: 2
ProductName: Vegie-spread - Quantity: 20
Zuerst erstellen wir die Prozedur, die aber in der Northwind-Datenbank bereits vorhanden sein sollt:
Code:
CREATE PROCEDURE CustOrderHist
-- Übergabeparameter
@CustomerID nchar(5)
AS
-- Datenbankabfrage
SELECT ProductName, Total=SUM(Quantity)
FROM Products P, [Order Details] OD, Orders O, Customers C
WHERE C.CustomerID = @CustomerID
AND C.CustomerID = O.CustomerID
AND O.OrderID = OD.OrderID
AND OD.ProductID = P.ProductID
GROUP BY ProductName
-- Übergabeparameter
@CustomerID nchar(5)
AS
-- Datenbankabfrage
SELECT ProductName, Total=SUM(Quantity)
FROM Products P, [Order Details] OD, Orders O, Customers C
WHERE C.CustomerID = @CustomerID
AND C.CustomerID = O.CustomerID
AND O.OrderID = OD.OrderID
AND OD.ProductID = P.ProductID
GROUP BY ProductName
Nun erstellen wir eine C#-Konsolenanwendung namens "QueryTest"
Code:
using System;
using System.Data;
using System.Data.SqlClient;
namespace QueryTest
{
class Querys
{
// festlegen der Variablen für den SqlConnectionstring und den Prozedurnamen
protected string conString;
protected string procedure;
/// <summary>
/// Der Haupteinstiegspunkt für die Anwendung.
/// </summary>
[STAThread]
static void Main(string[] args)
{
// Instansieren und Aufruf der Class Querys
new Querys();
}
public Querys()
{
// festlegen des Connection-Strings für die Verbindung zum MS-SQL-Server
conString = "Data Source=localhost;Integrated Security=True;Initial Catalog=Northwind; User Id=sa; Password=test";
// festlegen der Prozedur die wir aufrufen wollen
procedure = "CustOrderHist";
// ufrufen der Methode zum Zugriff auf die Datenbank und der Prozedur
read();
}
public void read()
{
SqlConnection con = new SqlConnection(this.conString);
// SQL-Query, in unserem Fall die Prozedur "this.procedure", festlegen
SqlCommand query = new SqlCommand(this.procedure, con);
// Angeben, dass wir eine Prozedur abfragen wollen
query.CommandType = CommandType.StoredProcedure;
// Übergabe-Parameter "@CustomerID" setzen
SqlParameter customerId = query.Parameters.Add("@CustomerID",SqlDbType.NChar, 5);
customerId.Direction = ParameterDirection.Input;
customerId.Value = "ALFKI";
// öffnen der Verbindung und abfragen der Anfrage
con.Open();
SqlDataReader reader = query.ExecuteReader();
// Ausgabe der von der Prozdur empfangenen Daten
while(reader.Read())
{
Console.WriteLine("ProductName: {0} - Quantity: {1}", reader[0].ToString(),reader[1].ToString());
}
reader.Close();
con.Close();
Console.ReadLine();
}
}
}
using System.Data;
using System.Data.SqlClient;
namespace QueryTest
{
class Querys
{
// festlegen der Variablen für den SqlConnectionstring und den Prozedurnamen
protected string conString;
protected string procedure;
/// <summary>
/// Der Haupteinstiegspunkt für die Anwendung.
/// </summary>
[STAThread]
static void Main(string[] args)
{
// Instansieren und Aufruf der Class Querys
new Querys();
}
public Querys()
{
// festlegen des Connection-Strings für die Verbindung zum MS-SQL-Server
conString = "Data Source=localhost;Integrated Security=True;Initial Catalog=Northwind; User Id=sa; Password=test";
// festlegen der Prozedur die wir aufrufen wollen
procedure = "CustOrderHist";
// ufrufen der Methode zum Zugriff auf die Datenbank und der Prozedur
read();
}
public void read()
{
SqlConnection con = new SqlConnection(this.conString);
// SQL-Query, in unserem Fall die Prozedur "this.procedure", festlegen
SqlCommand query = new SqlCommand(this.procedure, con);
// Angeben, dass wir eine Prozedur abfragen wollen
query.CommandType = CommandType.StoredProcedure;
// Übergabe-Parameter "@CustomerID" setzen
SqlParameter customerId = query.Parameters.Add("@CustomerID",SqlDbType.NChar, 5);
customerId.Direction = ParameterDirection.Input;
customerId.Value = "ALFKI";
// öffnen der Verbindung und abfragen der Anfrage
con.Open();
SqlDataReader reader = query.ExecuteReader();
// Ausgabe der von der Prozdur empfangenen Daten
while(reader.Read())
{
Console.WriteLine("ProductName: {0} - Quantity: {1}", reader[0].ToString(),reader[1].ToString());
}
reader.Close();
con.Close();
Console.ReadLine();
}
}
}
Es sollte nun folgende Ausgabe angezeigt werden:
ProductName: Aniseed Syrup - Quantity: 6
ProductName: Chartreuse verte - Quantity: 21
ProductName: Escargots de Bourgogne - Quantity: 40
ProductName: Flotemysost - Quantity: 20
ProductName: Grandma's Boysenberry Spread - Quantity: 16
ProductName: Lakkalikööri - Quantity: 15
ProductName: Original Frankfurter grüne Soße - Quantity: 2
ProductName: Raclette Courdavault - Quantity: 15
ProductName: Rössle Sauerkraut - Quantity: 17
ProductName: Spegesild - Quantity: 2
ProductName: Vegie-spread - Quantity: 20

