Come faccio ad avere un valore scalare da un proc memorizzato utilizzando NetTiers
-
04-10-2019 - |
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?
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);
}