I try to write Web API code for reading data from my database and exporting this data in an Excel sheet, but when I try to run code, I get error
System.Data.SqlClient.SqlException: 'Could not find stored procedure 'EXEC sp_GetmonthlyReport 99,2'.'
Here is my API controller code:
[HttpGet] 
[Route("api/controller/ExportToExcel")] 
public HttpResponseMessage ExportToExcel(int EmployeeId, int MonthNum)
{ 
    // Get the data from the database 
    List<DailyTaskModel> model = mr.GetDailyTasks(EmployeeId, MonthNum);
    // Create the Excel package 
    ExcelPackage.LicenseContext = LicenseContext.NonCommercial; 
    using (ExcelPackage excelPackage = new ExcelPackage())
    {
        ExcelWorksheet worksheet = excelPackage.Workbook.Worksheets.Add("TaskList");
        // Write the header row worksheet.Cells[1, 1].Value = "EmployeeId"; 
        worksheet.Cells[1, 2].Value = "Taskdate"; 
        worksheet.Cells[1, 3].Value = "Capex_hr"; 
        worksheet.Cells[1, 4].Value = "Opex_Hr"; 
        worksheet.Cells[1, 5].Value = "Cr_No"; 
        worksheet.Cells[1, 6].Value = "Cr_Name"; 
        worksheet.Cells[1, 7].Value = "Project"; 
        worksheet.Cells[1, 8].Value = "Pr_Status"; 
        worksheet.Cells[1, 9].Value = "Opex_Description"; 
        worksheet.Cells[1, 10].Value = "Cr_Live_Date"; 
        worksheet.Cells[1, 11].Value = "Actual_Capex"; 
        worksheet.Cells[1, 12].Value = "Actual_Opex";
        // Write the data rows 
        int row = 2; 
        foreach (var task in model)
        { 
            worksheet.Cells[row, 1].Value = task.EmployeeId; 
            worksheet.Cells[row, 2].Value = task.Taskdate; 
            worksheet.Cells[row, 3].Value = task.Capex_Hr; 
            worksheet.Cells[row, 4].Value = task.Opex_Hr; 
            worksheet.Cells[row, 4].Value = task.Cr_No; 
            worksheet.Cells[row, 4].Value = task.Cr_Name; 
            worksheet.Cells[row, 4].Value = task.Project; 
            worksheet.Cells[row, 4].Value = task.Pr_Status; 
            worksheet.Cells[row, 4].Value = task.Opex_Description;           
            worksheet.Cells[row, 4].Value = task.Cr_Live_Date;   
            worksheet.Cells[row, 4].Value = task.Actual_Capex; 
            worksheet.Cells[row, 4].Value = task.Actual_Opex;
            row++;
        }
        // Generate the file contents 
        byte[] fileContents = excelPackage.GetAsByteArray();
        // Set the response content  
        HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK); 
        response.Content = new ByteArrayContent(fileContents); 
        response.Content.Headers.ContentType = new    MediaTypeHeaderValue("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); 
        response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
                { 
                     FileName = "TaskList.xlsx"
                };
        return response;
    }
}
And here is my business logic
public static string GetConnectionString(string connectionName = "MyConnection")
{ 
    return ConfigurationManager.ConnectionStrings[connectionName].ConnectionString;
}
public List<DailyTaskModel> GetDailyTasks(int EmployeeId, int MonthNumber)
{ 
    List<DailyTaskModel> model = new List<DailyTaskModel>();
    using (IDbConnection conn = new SqlConnection(GetConnectionString()))
    {
        var sql = @"EXEC sp_GetmonthlyReport " + EmployeeId + "," + MonthNumber; 
        SqlCommand cmd = new SqlCommand(sql, (SqlConnection)conn); 
        cmd.CommandType = CommandType.StoredProcedure;
        conn.Open(); 
        SqlDataReader rdr = cmd.ExecuteReader();
        while (rdr.Read())
        { 
            DailyTaskModel task = new DailyTaskModel(); 
            task.EmployeeId = (int)rdr["EmployeeId"]; 
            task.Taskdate = rdr["Taskdate"].ToString(); 
            task.Capex_Hr = (int)rdr["Capex_Hr"]; 
            task.Opex_Hr = (int)rdr["Opex_Hr"]; 
            task.Cr_No = (int)rdr["Cr_No"]; 
            task.Cr_Name = rdr["Cr_Name"].ToString(); 
            task.Project = rdr["Project"].ToString(); 
            task.Pr_Status = rdr["Pr_Status"].ToString(); 
            task.Opex_Description = rdr["Opex_description"].ToString(); 
            task.Cr_Live_Date = rdr["Cr_Live_Date"].ToString(); 
            task.Actual_Capex = (int)rdr["Actual_Capex"]; 
            task.Actual_Opex = (int)rdr["Actual_Opex"];
 
            model.Add(task);
        }
    }
    return model;
}
And here is my stored procedure:
ALTER PROCEDURE [dbo].[sp_GetmonthlyReport] 
    (
--EXEC sp_GetmonthlyReport 99, 2 @EmployeeId INT, @MonthNumber INT ) AS     
BEGIN 
    SELECT  
        EmployeeId, Taskdate, Capex_Hr, Opex_Hr, Cr_No, Cr_Name, 
        Project, Pr_Status, Opex_Description, Actual_Capex, 
        Actual_Opex, Cr_Live_Date 
    FROM 
        Daily_Task_History 
    WHERE 
        EmployeeId = @EmployeeId 
        AND MONTH(Taskdate) = @MonthNumber  
END
My stored procedure is not getting read. What's wrong in this code?
 
     
    