Wie erhalte ich einen skalaren Wert aus einer gespeicherten proc mit NetTiers
-
04-10-2019 - |
Frage
Ich habe eine wirklich einfache gespeicherte Prozedur, die wie folgt aussieht:
CREATE PROCEDURE _Visitor_GetVisitorIDByVisitorGUID
(
@VisitorGUID AS UNIQUEIDENTIFIER
)
AS
DECLARE @VisitorID AS bigint
SELECT @VisitorID = VisitorID FROM dbo.Visitor WHERE VisitorGUID = @VisitorGUID
--Here's what I've tried
RETURN @VisitorID 'Returns an IDataReader
SELECT @VisitorID 'Returns an IDataReader
--I've also set it up with a single output
--parameter, but that means I need to pass
--the long in by ref and that's hideous to me
Ich versuche NetTiers zu erhalten, ein Verfahren mit dieser Signatur zu erzeugen:
public long VisitorService.GetVisitorIDByVisitorGUID(GUID visitorGUID);
Grundsätzlich möchte ich NetTiers ExecuteScalar statt ExecuteReader nennen. Was mache ich falsch?
Lösung
Warum nicht verwenden, um die benutzerdefinierte Datenzugriffsfunktionalität Ihre gespeicherte Prozedur mit ExecuteScalar anrufen? ( http://nettiers.com/DataLayer.ashx#Read_Methods:_4 )
var vistorId = (long)DataRepository.Provider.ExecuteScalar(CommandType.StoredProcedure, "_Visitor_GetVisitorIDByVisitorGUID");
Der Körper des gespeicherten proc sollte wie folgt aussehen:
Select VisitorID
FROM dbo.Visitor
WHERE VisitorGUID = @VisitorGUID
Return
oder
Declare @VisitorId bigint
Set @VisitorId = (
Select VisitorId
From dbo.Visitor
Where VisitorGuid = @VisitorGUID
)
Select @VisitorId
Return
Andere Tipps
Für diejenigen, dies programmatisch zu tun, das obige Beispiel wird nicht funktionieren, da es keine Möglichkeit, den erforderlichen Parameterwert übergibt jede dieser Methode des Überschreibung verwendet wird.
var vistorId = (long)DataRepository.Provider.ExecuteScalar(CommandType.StoredProcedure, "_Visitor_GetVisitorIDByVisitorGUID");
Die einzige Möglichkeit, die ich gefunden habe, dies zu erreichen ist durch eine DbCommand als einziges Argument für die ExecuteScalar Methode übergeben:
int myReturnID = 0;
using (SqlCommand cmd = new SqlCommand()) {
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "sp_MyStoredProcedure";
cmd.Parameters.Add(new SqlParameter("MyParameter", myParameter));
myReturnID = (Int32)DataRepository.Provider.ExecuteScalar(cmd);
}