Domanda

Ho un molto semplice stored procedure che assomiglia a questo:

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

Sto cercando di ottenere NetTiers per generare un metodo con questa firma:

public long VisitorService.GetVisitorIDByVisitorGUID(GUID visitorGUID);

Fondamentalmente voglio NetTiers chiamare ExecuteScalar invece di ExecuteReader. Che cosa sto facendo di sbagliato?

È stato utile?

Soluzione

Perché non usare la funzionalità di accesso ai dati personalizzato per chiamare la stored procedure con ExecuteScalar? ( http://nettiers.com/DataLayer.ashx#Read_Methods:_4 )

var vistorId = (long)DataRepository.Provider.ExecuteScalar(CommandType.StoredProcedure, "_Visitor_GetVisitorIDByVisitorGUID");

Il corpo del proc memorizzato dovrebbe essere simile:

Select VisitorID 
FROM dbo.Visitor 
WHERE VisitorGUID = @VisitorGUID

Return

o

Declare @VisitorId bigint
Set @VisitorId = (
                Select VisitorId
                From dbo.Visitor
                Where VisitorGuid = @VisitorGUID
                )

Select @VisitorId

Return

Altri suggerimenti

Per chi vuole fare questo programatically, l'esempio di cui sopra non funzionerà in quanto non v'è alcun modo per passare il valore del parametro necessario utilizzando qualsiasi delle sostituzioni tale metodo.

var vistorId = (long)DataRepository.Provider.ExecuteScalar(CommandType.StoredProcedure, "_Visitor_GetVisitorIDByVisitorGUID");

L'unico modo che ho trovato per raggiungere questo obiettivo è passando un DbCommand come argomento al metodo solitario ExecuteScalar:

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);
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top