I'm developing an API using .NET Web API2. One of the endpoints receive a date as an argument and it needs to return a list of items depending on that date. The problem is that I'm not being able to interpolate this date inside of the SQL Query.
Lets say that I need this query as a result, whcih it works if I hardcode the date
Select platform_code, platform_state, COUNT(*) AS 'total cycle', MIN(events.created_at) AS 'first reading'
from events LEFT JOIN platforms ON platforms.platform_code = events.platform_code
WHERE events.created_at BETWEEN '22/06/2020 0:00:00' AND getdate()
group by platform_code, platform_state
And this is my controller code:
{
[RoutePrefix("api/queries")]
public class QueriesController : ApiController
{
[Route("dashboard")]
public HttpResponseMessage GetDashboard(string start_date = null)
{
DateTime parsed_start_date ;
using (var ctx = new RFID_TESTEntities())
{
if (start_date != null)
{
parsed_start_date = DateTime.ParseExact(start_date, "dd-MM-yyyy", new CultureInfo("es-ES"));
}
else
{
parsed_start_date = DateTime.ParseExact("01-01-2020", "dd-MM-yyyy", new CultureInfo("es-ES"));
}
String query = "Select platform_code, platform_state, COUNT(*) AS 'total cycle', MIN(events.created_at) AS 'first reading'
from events LEFT JOIN platforms ON platforms.platform_code = events.platform_code
WHERE events.created_at BETWEEN " + parsed_start_date + " AND getdate()
group by platform_code, platform_state";
var platforms = ctx
.Database.SqlQuery<Dashboard>(query)
.ToList();
If I try to run this, the parsed_start_date
variable in the where clause lacks the simple quote, therefore I got a SQL syntax error:
"Select platform_code, platform_state, COUNT(*) AS 'total cycle', MIN(events.created_at) AS 'first reading' from events LEFT JOIN platforms ON platforms.platform_code = events.platform_code
WHERE events.created_at BETWEEN 01/01/2020 0:00:00 AND getdate()
group by platform_code, platform_state"
I have tried to cast the variable into a string before using it in the query but apparently it behaves the same way.