Announcement

Collapse
No announcement yet.

@rowCount aus Stored Procedure auslesen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • @rowCount aus Stored Procedure auslesen

    Hallo zusammen.

    Ich habe eine Stored Procedure erstellt:

    ALTER PROCEDURE dbo.GetDeadlineList(@userID int, @role varchar(10), @rowCount int output)
    AS
    IF @role='Patient'

    SELECT Forename, Surname, Date, Name
    FROM Patient, Deadline, Division
    WHERE Patient.PatientID=@userID AND Patient.PatientID=Deadline.PatientID AND Deadline.DivisionID=Division.DivisionID

    ELSE

    SELECT Forename, Surname
    FROM Patient, Deadline, Division
    WHERE Patient.PatientID=@userID AND Patient.PatientID=Deadline.PatientID AND Deadline.DivisionID=Division.DivisionID

    select @rowCount=@@ROWCOUNT

    Nun möchte ich in meinem C#-Code zuerst @rowCount auslesen und speichern, damit ich ein Array für die Daten erstellen kann. Nun weiß ich aber nicht genau wie ich das anstellen soll. Habe bis jetzt folgenden C#-Code erstellt:

    String procedure;
    SqlParameter userIDSQL, roleSQL, rowCountSQL;
    int rowCount = 0;

    // Zugriff auf StoredProcedure vorbereiten
    procedure = "GetDeadlineList";
    cmd = new SqlCommand(procedure, con);
    cmd.CommandType = CommandType.StoredProcedure;

    // Parameter der StoredProcedure setzen
    userIDSQL = cmd.Parameters.Add("@userID", SqlDbType.Int, 1);
    userIDSQL.Direction = ParameterDirection.Input;
    userIDSQL.Value = userID;

    roleSQL = cmd.Parameters.Add("@role", SqlDbType.VarChar, 1);
    roleSQL.Direction = ParameterDirection.Input;
    roleSQL.Value = role;

    rowCountSQL = cmd.Parameters.Add("@rowCount", SqlDbType.Int, 1);
    rowCountSQL.Direction = ParameterDirection.Output;

    // Ausführen der Anfrage
    dr = cmd.ExecuteReader();

    Nun habe ich die Anfrage ausgeführt und im DataReader gespeichert. Wie erhalte ich nun aus dem DataReader jedoch das @rowCount?

    Viele Grüße
    Maddi1986

  • #2
    Ich frage mich warum MSSQL-spezifische Fragen immer hier im allgemeinen SQL-Forum gefragt werden, da es doch ein passendes Forum gibt.
    Und das
    http://entwickler-forum.de/showthread.php?t=43670
    liest wohl auch kein Schwein

    Comment


    • #3
      in das falsche Unterforum geschickt!

      Sorry Maddi, Sorry Markus

      ich gestehe - ich war es der Maddi ins falsche Forum geschickt hat!!



      Gruß und nochmal sorry!
      Christian

      Comment


      • #4
        Hallo,

        der Weg über den OUTPUT-Parameter wird nicht so wie geplant funktionieren, wie das folgende Experiment zeigt:
        [highlight=SQL]
        CREATE PROCEDURE spExecuteReaderOutputParam
        (
        @OutputParam INT OUTPUT
        )
        AS
        SET NOCOUNT ON;
        -- 1. Outputparameter füllen
        SELECT @OutputParam = COUNT(*) FROM dbo.Technologien;
        -- 2. Ergebnismenge
        SELECT technlogie_id,technologie,netversion
        FROM dbo.Technologien;
        RETURN @@ROWCOUNT
        GO
        [/highlight]
        Der Wert des Output-Parameters der Stored Procedure liegt erst nach dem Aufruf der SqlDataReader-Methode Close vor. Der Rückgabewert der Stored Procedure ist da verlässlicher (das TDS-Protokoll - also der Datenaustausch zwischen dem SQL Server und dem SqlClient - regelt, welche Information in welcher Reihenfolge über das Netzwerk transportiert wird).

        Code:
        string sDummy;
        SqlDataReader aDR = null;
        sqlConnection1.Open();
        try
        {
            // Input/Output-Parameter initialisieren
            sqlCmdExecuteReaderOutputParam.Parameters[1].Value = 0;
            aDR = sqlCmdExecuteReaderOutputParam.ExecuteReader();
            listBox1.Items.Add("Nach ExcecuteReader   : " + 
                sqlCmdExecuteReaderOutputParam.Parameters[1].Value.ToString());
            while (aDR.Read())
                sDummy = aDR.GetString(1);
            listBox1.Items.Add("Nach der While-Schleife : " + 
                sqlCmdExecuteReaderOutputParam.Parameters[1].Value.ToString());
            aDR.Close();
            listBox1.Items.Add("Nach SqlDataReader.Close: " + 
                sqlCmdExecuteReaderOutputParam.Parameters[1].Value.ToString());
        }
        finally
        {
            sqlConnection1.Close();
        }

        Comment

        Working...
        X