Не удается получить результат хранимой процедуры в контроллере, но процедура выполняется

Я использую показанную здесь процедуру для подсчета возраста

ALTER PROCEDURE [dbo].[sp_GetVotersByAge]   
    @lokSabhaID bigint = null, 
    @vidhanSabhaID bigint = null,
    @wardID bigint = null,  
    @year int     
AS 
BEGIN
    IF (@vidhanSabhaID IS NULL AND @wardID IS NULL)     
    BEGIN
        SELECT COUNT(voterID) AS 'Age Between 18 and 30' 
        FROM voterList          
        WHERE (@year - (datepart(year, dateOfBirth))) BETWEEN 18 AND 30 
          AND lokSabhaConstituencyID = @lokSabhaID  

        SELECT COUNT(voterID) AS 'Age Between 30 and 50' 
        FROM voterList          
        WHERE (@year - (datepart(year, dateOfBirth))) BETWEEN 30 AND 50 
          AND lokSabhaConstituencyID = @lokSabhaID

        SELECT COUNT(voterID) AS 'Age Above 50' 
        FROM voterList          
        WHERE (@year - (datepart(year, dateOfBirth))) > 50 
          AND lokSabhaConstituencyID = @lokSabhaID

        IF (@lokSabhaID IS NULL AND @wardID IS NULL)    
        BEGIN
            EXEC @return_value = [dbo].[sp_GetVotersByAge]  
                                        @lokSabhaID = 1,
                                        @vidhanSabhaID = NULL,      
                                        @wardID = NULL,         
                                        @year = 2000

Ниже приведен метод моего контроллера для вызова хранимой процедуры.

Значения Null были установлены с использованием

 var vidhanSabhaID_ = new SqlParameter("@vidhanSabhaID", SqlString.Null); 

var result = uow.getAgeReport_.SQLQuery<sp_GetVotersByAge_Result>("sp_GetVotersByAge @lokSabhaID, @vidhanSabhaID, @wardID, @year", lokSabhaID_,
 vidhanSabhaID_, wardID_, year_).FirstOrDefault();

Моя модель:

public class sp_GetVotersByAge_Result
{
         public int AgeBetween18and30 { get; set; }
         public int AgeBetween30and50 { get; set; }
         public int AgeMoreThan50 { get; set; }
}

Процедура работает, когда я выполняю ее в SQL Server. Но я не получаю никакого результата, когда выполняю его в Entity Framework

"Я не получаю никакого результата" - это невозможно. Вы получаете пустой набор результатов? Или исключение? Если первое, обращаетесь ли вы к той же базе данных, что и в SSMS?
CodeCaster 29.03.2018 09:18

Боковое примечание: вы должны нет использовать префикс sp_ для ваших хранимых процедур. У Microsoft есть зарезервировал этот префикс для собственного использования (см. Именование хранимых процедур), и вы действительно рискуете столкнуться с конфликтом имен когда-нибудь в будущем. Это также плохо сказывается на производительности хранимых процедур.. Лучше просто избегать sp_ и использовать что-то еще в качестве префикса - или вообще не использовать префикс!

marc_s 29.03.2018 09:26

@CodeCaster Да, набор результатов пуст. и используя те же значения, когда я выполняю его в sqlserver, я получаю непустой результат

Abhijeet Pandey 29.03.2018 09:31

Вы читали вторую часть моего комментария? Убедитесь, что вы обращаетесь к одной и той же базе данных.

CodeCaster 29.03.2018 09:33

Где установить lokSabhaId_ ,, wardId_ и год? Также попробуйте установить vidhanSabhaId_ как SqlInt64.Null.

M Bakardzhiev 29.03.2018 09:34

@CodeCaster да, я говорю с той же базой данных. Структура сущности выполняет запрос с пустым набором результатов

Abhijeet Pandey 29.03.2018 09:34

Вы понимаете, что мы не можем воспроизвести это? В моей голове есть две возможные причины, по которым запрос в коде возвращает результаты, отличные от того же запроса в SSMS: либо вы подключаетесь к другой базе данных (или даже к серверу), либо вы передаете другие значения. Вы тот, кому придется заниматься этим устранением неполадок, мы мало что можем сделать отсюда.

CodeCaster 29.03.2018 09:36

@MBakardzhiev Я также установил их равными нулю, как я написал в вопросе. хорошо пытаюсь sqlint64.null

Abhijeet Pandey 29.03.2018 09:36

И _year как SqlInt32, возможно, установка их как правильного типа будет работать.

M Bakardzhiev 29.03.2018 09:37

В любом случае ваши столбцы не соответствуют вашему классу сущности, попробуйте использовать [Column("Age Above 50")] и тому подобное.

CodeCaster 29.03.2018 09:40

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

M Bakardzhiev 29.03.2018 09:45

@CodeCaster Теперь я изменил имена классов модели, соответствующие возвращаемой процедуре. Пока нет успеха

Abhijeet Pandey 30.03.2018 08:27
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
12
85
0

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