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?

War es hilfreich?

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);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top