Я использую показанную здесь процедуру для подсчета возраста
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
Боковое примечание: вы должны нет использовать префикс sp_ для ваших хранимых процедур. У Microsoft есть зарезервировал этот префикс для собственного использования (см. Именование хранимых процедур), и вы действительно рискуете столкнуться с конфликтом имен когда-нибудь в будущем. Это также плохо сказывается на производительности хранимых процедур.. Лучше просто избегать sp_ и использовать что-то еще в качестве префикса - или вообще не использовать префикс!
@CodeCaster Да, набор результатов пуст. и используя те же значения, когда я выполняю его в sqlserver, я получаю непустой результат
Вы читали вторую часть моего комментария? Убедитесь, что вы обращаетесь к одной и той же базе данных.
Где установить lokSabhaId_ ,, wardId_ и год? Также попробуйте установить vidhanSabhaId_ как SqlInt64.Null.
@CodeCaster да, я говорю с той же базой данных. Структура сущности выполняет запрос с пустым набором результатов
Вы понимаете, что мы не можем воспроизвести это? В моей голове есть две возможные причины, по которым запрос в коде возвращает результаты, отличные от того же запроса в SSMS: либо вы подключаетесь к другой базе данных (или даже к серверу), либо вы передаете другие значения. Вы тот, кому придется заниматься этим устранением неполадок, мы мало что можем сделать отсюда.
@MBakardzhiev Я также установил их равными нулю, как я написал в вопросе. хорошо пытаюсь sqlint64.null
И _year как SqlInt32, возможно, установка их как правильного типа будет работать.
В любом случае ваши столбцы не соответствуют вашему классу сущности, попробуйте использовать [Column("Age Above 50")] и тому подобное.
Возможно, вы также можете попробовать вызвать хранимую процедуру без добавления параметров, если они имеют то же значение, что и по умолчанию.
@CodeCaster Теперь я изменил имена классов модели, соответствующие возвращаемой процедуре. Пока нет успеха




