Search code examples
sqlasp.net-web-apistored-procedureshttp-getwebapi

How to execute a stored procedure in Web API and return a list


I am learning to develop web api services in .NET Core Web API. Now I trying to execute stored procedure and return a list. But my code does not show the data after stored procedure execution. Any help is much appreciated.

BL

public string VantageEntities { get; private set; }
public List<SalesAndReturns_RPT> GetOrders(string Year, VantageContext _context)
{
    string conn = _context.Database.GetDbConnection().ConnectionString;
    using (SqlConnection sql = new SqlConnection(conn))
    {
        sql.Open();
        using (SqlCommand cmd = new SqlCommand("AllSellout", sql))
        {
            cmd.CommandType = System.Data.CommandType.StoredProcedure;
            cmd.Parameters.Add(new SqlParameter("@Year", Year));
            List<SalesAndReturns_RPT> response = null;

            using (var reader = cmd.ExecuteReader())
            {
                while (reader.Read())
                {
                    //response = Convert.ToDecimal(reader.GetDecimal(0));
                }
            }
            sql.Close();
            return response;
        }
    }
}

controller

    namespace Vantage.Core.Direct.API.Controllers
    {
        [Route("api/[controller]")]
        [ApiController]
        public class PieChartController : ControllerBase
        {
            private readonly VantageContext _context;
            public PieChartController(VantageContext context)
            {
                _context = context;
            }
            [HttpGet]
            public IEnumerable<DAL.Models.SalesAndReturns_RPT> GetOrders(string Year)
            {
                var list = new PieChartMgt().GetOrders(Year, _context);
                return list;
            }
}
}

My stored procedure

ALTER PROCEDURE AllSellout
@Year VARCHAR(6) 
AS
BEGIN
SELECT DISTINCT BusinessArea, sum(NetValue) as sumNetValue
FROM SalesAndReturns_RPT
WHERE  year(Call_ActualStartDate) = @Year
GROUP BY BusinessArea 
ORDER BY sumNetValue DESC
END

SalesAndReturns_RPT.cs

    public partial class SalesAndReturns_RPT
    {
        public int UID { get; set; }
        public string Distributor { get; set; }
        public string Id { get; set; }
        public string DistributorID { get; set; }
        public string Outlet { get; set; }
        public string OutletID { get; set; }
        public string SalesOrgName { get; set; }
        public decimal? NetValue { get; set; }
        public string BusinessArea { get; set; }
}

Solution

  • try this

     var response = new  List<SalesAndReturns_RPT>();
    
       using (var reader = cmd.ExecuteReader())
        {
                using (var reader = cmd.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        var sales= new SalesAndReturns_RPT();
                         sales.BusinessArea = Convert.ToDecimal(reader.GetString(0));
                        sales.NetValue  = Convert.ToDecimal(reader.GetDecimal(1));
                    
                     response.Add(sales);
                      
                     }
                    
                }
         }
         return response;