Аналогичный по содержанию код выдает 500

Рейтинг: 0Ответов: 1Опубликовано: 27.07.2023

Есть работающий запрос, написанный на C#.

        //GET: api/Mobile/changes/15С/Четверг
        [HttpGet("changes/{group}/{day}")]
        public IActionResult GetChangesByGroup(string group,string day)
        {
            var Group = new SqlParameter
            {
                Value = group,
                SqlDbType = SqlDbType.NVarChar,
                Direction = ParameterDirection.Input,
                ParameterName = "Group"
            };
            var Day = new SqlParameter
            {
                Value = day,
                SqlDbType = SqlDbType.NVarChar,
                Direction = ParameterDirection.Input,
                ParameterName = "Day"
            };
            var result = new JsonResult(_context.StoredProcedureModels.FromSqlRaw("EXECUTE dbo.[GETchangesByGroup] @Group={0}, @Day={1}",Group,Day), new JsonSerializerOptions { PropertyNamingPolicy = null});
            
            return result;
        }

Он принимает 2 параметра, вставляет их в запрос и отправляет в СУБД, там выполняется хранимая процедура, которая возвращает такого формата результат.

Week Day Number Time Group Lesson Type FIO Room
Верхняя неделя Четверг 1 8:00/9:30 15С Иностранный язык ПР1 Иванова И.И. 113
Верхняя неделя Четверг 1 8:00/9:30 15С Иностранный язык ПР2 Козлова А.Б. 120

Этой таблице соответствует класс-модель StoredProcedureModel.cs

namespace raspisanie_ngieu.api.Models
{
    public partial class StoredProcedureModel
    {
        public string Week { get; set; } = null!;
        public string Day { get; set; } = null!;
        public byte Number { get; set; }
        public string Time { get; set; } = null!;
        public string Group { get; set; } = null!;
        public string Lesson { get; set; } = null!;
        public string? Type { get; set; } = null!;
        public string FIO { get; set; } = null!;
        public string? Room { get; set; } = null!;
    }
}

Также есть аналогичные запросы, которые принимают 1-2 параметра и аналогично предыдущему выполняют действия, но возвращают ошибку 500

        //GET: api/Mobile/raspisanie/15С/Четверг
        [HttpGet("raspisanie/{group}/{day}")]
        public IActionResult GetRaspisanieWithChanges(string group, string day) 
        {
            var Group = new SqlParameter
            {
                Value = group,
                SqlDbType = SqlDbType.NVarChar,
                Direction = ParameterDirection.Input,
                ParameterName = "Group"
            };
            var Day = new SqlParameter
            {
                Value = day,
                SqlDbType = SqlDbType.NVarChar,
                Direction = ParameterDirection.Input,
                ParameterName = "Day"
            };
            var result = new JsonResult(_context.StoredProcedureModels.FromSqlRaw("EXECUTE dbo.[GETraspisanieWithChangesv2] @Group={0}, @Day={1}", Group,Day), new JsonSerializerOptions { PropertyNamingPolicy = null });

            return result;
        }
//GET: api/Mobile/raspisanie/15С
        [HttpGet("raspisanie/{group}")]
        public IActionResult GetRaspisanieOnWeek(string group)
        {
            var Group = new SqlParameter
            {
                Value = group,
                SqlDbType = SqlDbType.NVarChar,
                Direction = ParameterDirection.Input,
                ParameterName = "Group"
            };
            var result = new JsonResult(_context.StoredProcedureModels.FromSqlRaw("EXECUTE dbo.[GETraspisanieOnWeek] @Group={0}", Group), new JsonSerializerOptions { PropertyNamingPolicy = null });
            
            return result;
        }

Спасибо за оказанные советы :)

Ответы

▲ 0Принят

Вопрос решил сам. Оказалось, что во время запроса в атрибуте FIO было значение NULL. А в моей модели оно помечено как not null(нет ? после public string )

Вот так стала выглядеть итоговая модель

public partial class StoredProcedureModel
    {
        public string Week { get; set; } = null!;
        public string Day { get; set; } = null!;

        public byte Number { get; set; }
        public string Time { get; set; } = null!;
        public string Group { get; set; } = null!;
        
        public string Lesson { get; set; } = null!;
        
        public string? Type { get; set; } = null!;

        public string? FIO { get; set; } = null!;

        public string? Room { get; set; } = null!;
    } 

Была ошибка "System.Data.SqlTypes.SqlNullValueException: Data is Null. This method or property cannot be called on Null values." Извините за беспокойство :(