Как мне получить скалярную ценность из сохраненного вкладывания с использованием недвижимости

StackOverflow https://stackoverflow.com/questions/2789619

Вопрос

У меня действительно простая сохраненная процедура, которая выглядит так:

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

Я пытаюсь получить нотницы, чтобы генерировать метод с этой подписью:

public long VisitorService.GetVisitorIDByVisitorGUID(GUID visitorGUID);

По сути, я хочу, чтобы мелкие звонить Executescalar вместо ExecuteReader. Что я делаю неправильно?

Это было полезно?

Решение

Почему бы не использовать пользовательские функциональные возможности доступа к данным, чтобы позвонить в ваш хранимый Proc с Executescalar? (http://nettiers.com/datalayer.ashx#Read_methods:_4.)

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

Тело хранимых товаров должно выглядеть:

Select VisitorID 
FROM dbo.Visitor 
WHERE VisitorGUID = @VisitorGUID

Return

или

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

Select @VisitorId

Return

Другие советы

Для тех, кто хочет сделать это программически, вышеприведенный пример не будет работать, так как нет способа пройти необходимое значение параметра, используя любой из переопределений этого метода.

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

Единственный способ достичь этого, передает DBCommand в качестве одиночного аргумента для метода 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);
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top