I am running a SQL-Query in C# using Dapper & DapperQueryBuilder.
using Dapper;
using DapperQueryBuilder;
I use startDate
and endDate
as lower and upper date limit, since I am not interested in entries that are fare in past.
string startDate = DateTime.Now.AddDays(-14).ToString("MM/dd/yyyy");
string endDate = DateTime.Now.ToString("MM/dd/yyyy");
The query looks as following:
var originalData = cn.QueryBuilder($@"
SELECT TOP 10000
dbo.BEOLStatus_SelCol.Priority,
dbo.BEOLStatus_SelCol.Stage,
dbo.BEOLStatus_SelCol.Batch,
dbo.BEOLStatus_SelCol.Product_Name,
dbo.BEOLStatus_SelCol.DInStage
FROM dbo.BEOLStatus_SelCol
WHERE (((dbo.BEOLStatus_SelCol.Priority) Like {Priority})
AND ((dbo.BEOLStatus_SelCol.Stage) Is Not Null)
AND ((dbo.BEOLStatus_SelCol.Batch) Is Not Null)
AND ((dbo.BEOLStatus_SelCol.Product_Name) Is Not Null)
AND ((dbo.BEOLStatus_SelCol.DInStage) Is Not Null)
AND ((dbo.BEOLStatus_SelCol.StageNo) Like {StageNo})
AND ((dbo.BEOLStatus_SelCol.DInStage) >= {startDate})
AND ((dbo.BEOLStatus_SelCol.DInStage) <= {endDate}))
ORDER BY dbo.BEOLStatus_SelCol.Priority").Query();
I also tried the following one:
var originalData = cn.QueryBuilder($@"
SELECT TOP 10000
dbo.BEOLStatus_SelCol.Priority,
dbo.BEOLStatus_SelCol.Stage,
dbo.BEOLStatus_SelCol.Batch,
dbo.BEOLStatus_SelCol.Product_Name,
dbo.BEOLStatus_SelCol.DInStage
FROM dbo.BEOLStatus_SelCol
WHERE (((dbo.BEOLStatus_SelCol.Priority) Like {Priority})
AND ((dbo.BEOLStatus_SelCol.Stage) Is Not Null)
AND ((dbo.BEOLStatus_SelCol.Batch) Is Not Null)
AND ((dbo.BEOLStatus_SelCol.Product_Name) Is Not Null)
AND ((dbo.BEOLStatus_SelCol.DInStage) Is Not Null)
AND ((dbo.BEOLStatus_SelCol.StageNo) Like {StageNo})
AND ((dbo.BEOLStatus_SelCol.DInStage) Between {startDate} and {endDate}))
ORDER BY dbo.BEOLStatus_SelCol.Priority").Query();
I can see 7 datasets in the database that fit the following criteria:
Priority
StageNo
- between
startDate
= 09.16.2022 andendDate
= 09.30.2022
6 out of the 7 datasets get returned as expected, but one is missing.
The one dataset missing looks as following:
Priority
= 3StageNo
= 149DInStage
= 09.30.2022 (#)
(#) actually 30.09.2022 because the database is located in Europe, but based on the other 6 datasets returning I assume it gets internally converted and seems to be working
I figured out that if I change endDate = DateTime.Now.ToString("MM/dd/yyyy")
to DateTime.Now.AddDays(+1).ToString("MM/dd/yyyy")
I get the 7 datasets that I want.
DInStage >= startDate
and DInStage <= endDate
also seem to make sense to me.
Does anybody see where I did a mistake that causes this one day off? Why do I need to add one additional day? I notice the same behaviour when using the same query in MS Access.
I assume the same is true for dateStart
, but I haven't specifically checked that yet.