所以我有一小部分软件正在运行,以帮助接收和库存ATM。我做了一个报告,在日期A和B之间提取项目条目。我使用MonthCalendar
控件,然后使用控件的.SelectionStart
和.SelectionEnd
属性作为用户提取日期范围通常会选择一周(周一至周五)进行报道。
继承我发送到Access DB的SQL:
InvDB.GetQuery("
SELECT
[_Date],Commodity,Gross,Net,Description
FROM
Tags
WHERE
Format([_Date],'yyyy') = '" + DateTime.Now.Year.ToString() + "' AND
Format([_Date],'m/d/yyyy') Between #" + monthCalendar1.SelectionStart.ToString("M/dd/yyyy") + "# AND #" + monthCalendar1.SelectionEnd.ToString("M/dd/yyyy") + "#
AND NOT Category = 'Finished Goods'
ORDER BY [_Date] Asc",
"Tags");
日期以这种格式存储:“9/1/2015 10:31:50 AM”
我从来没有能够让SQL日期函数最初工作,所以我不得不求助于这种方法,我很遗憾地意识到这种方法效率很低......
首先我选择年份比较的原因是因为当我选择日期范围时,访问权限返回与日期相关的所有年份。不仅是属性返回的那个。 (我也知道如果在多年之间进行交易会导致问题)
最后我问这里的问题的原因是,当用户选择日期,并试图获取日期之间的项目...返回的选择,是如此随机...我从未见过这个SQL返回的模糊结果的类型......我甚至看不到它的模式。我选择了一个星期,它只给出了那一周的5天中的3天和前一个月的前两周...另一周的选择是准确的...另一个,给出了5天中的2天周...
编辑 - 根据以下建议,我现在推送查询参数。我还在测试后删除了SQL Format(),但仍然产生了相同的随机性。到目前为止,这个简单的查询正在返回准确的信息。
SELECT
[_Date],Commodity,Gross,Net,Description
FROM
Tags
WHERE
[_Date] Between ? AND ?
AND NOT Category = 'Finished Goods'
ORDER BY
[_Date] Asc
答案 0 :(得分:1)
尽量不要将[_Date]转换为字符串。转换它时,您无法正确使用BETWEEN作为日期。