Ein sehr albernes Beispiel, aber wenn ich die maximale Order-ID aus der Order-Tabelle herausholen muss, habe ich zwei Optionen (ich weiß, dass es mehr gibt), aber ich bin nur an diesen beiden interessiert). Ich bin daran interessiert zu wissen, was letztendlich weniger Aufwand bedeutet.Einen Wert aus einem Stored-Proc als Output-Parameter gegen eine SELECT-Anweisung zurückgeben
Ein erster, die einfach den Wert wählt aus:
CREATE PROCEDURE GetLastOrderID
AS
SELECT Max(OrderID) FROM Orders
und dann C# Code entspricht, um einen SQLCommand zu erstellen, um die proc auszuführen, ruft .ExecuteScalar und wirft das den Wert in einen int.
Ein zweiter, die den Wert aus als Ausgabeparameter
CREATE PROCEDURE GetLastOrderID (@MaxOrderID INT OUTPUT)
AS
SET @MaxOrderId = Max(OrderID) FROM Orders
und dann entsprechend C# Code übergibt einen SQLCommand zu erstellen, um die proc auszuführen, füge einen Ausgangsparameter des Typ int, dann .ExecuteNonQuery nennen, und schließlich den Wert des Ausgabeparameters erhalten.
Gibt es einen wirklichen Vorteil von einem über den anderen? Mein Bauchgefühl ist, dass die erste Option mehr Zeit/Ressourcen braucht, weil es keine expliziten Typen gibt, aber ich würde gerne wissen, ob es eine definitive Antwort gibt. (Oder zumindest eine, die meine „Bauchgefühl“ schlägt in Bezug auf die Autorität)
'OPUTPUT' Parameter sollen wesentlich leichter sein als das Konstruieren und Zurückgeben eines Recordsets. Ich habe keine Ahnung, wie viel es ist. Sollte leicht zu testen sein, indem Sie 2 Versionen erstellen und sie in einer Schleife aufrufen. –
@Martin: Sie sind leichter, aber wenn Sie nicht viele Male anrufen, ist der Unterschied gering. –