logo
Montag 6. Februar 2012
Zurück zur Kategorie

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

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



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();
        }
    }
}



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
Um einen Beitrag zu bewerten musst du eingeloggt sein.