首页 > 解决方案 > 有什么方法可以从 SQLDatabase C# 检索一年中任何一个月的所有记录

问题描述

只需单击一个按钮,我就成功地获取了今天的所有销售交易记录。下面是我的代码

con.Open();
string query = "select Date Transactioncode, Productname, Total FROM Stock WHERE Date >= CAST(GETDATE() AS DATE) ORDER BY Date DESC";
SqlDataAdapter SDA = new SqlDataAdapter(query, con);
DataTable dt = new DataTable();
SDA.Fill(dt);
dataGridView1.DataSource = dt;
con.Close(); 

我遇到的问题是如何获取我希望搜索的月份或任何月份和年份的所有销售交易。我正在使用 2 个组合框来选择月份和年份,以便从 SQLDatabase 中获取记录。在我尝试过的代码下方,它不断产生错误。

con.Open();
string query = "SELECT * FROM Stock WHERE Month(Date) = '"+comboMonth.Text+"' AND Year(Date) = '"+comboYear.Text+"'";
SqlDataAdapter SDA = new SqlDataAdapter(query, con);
DataTable dt = new DataTable();
SDA.Fill(dt);
dataGridView1.DataSource = dt;
con.Close();

这是我得到的错误:将 varchar 值“January”转换为数据类型 int 时转换失败”

请帮忙

标签: c#

解决方案


我会在 SQL 端执行此操作,因为那里有函数可以以任何形式呈现日期,您可以进行比较。它可能无法进行最有效的查询。

将日期呈现为字符串将允许使用“like”和索引(我一直喜欢 ISO YYYY-MM-DD HH:MM:SS.ssssss),或者现在也允许对函数表达式进行索引。

对于仅仅一年一个月,您应该计算日期时间的第一和最后一秒/天,并对日期时间值进行范围扫描,这既更有效又对非散列(有序)索引友好。一些日期类型是日粒度的,一些是日期时间的。 https://docs.microsoft.com/en-us/sql/t-sql/functions/date-and-time-data-types-and-functions-transact-sql?view=sql-server-ver15 当然确切的结束日期因夏令时等而异,每天 3 班轮班查询真是一团糟!


推荐阅读