C# 如何编写SQL查询以返回数据库中每年今天(月和日)的所有“历史记录”?
我已经使用VisualStudio、C和SQLServer 8个月了,我已经创建了一个非常实用的个人项目。但是,在我的程序中有一点我想要的功能,我不能自动工作,那就是 如果我在ButtonClick事件中输入这个,运行程序,然后单击History按钮,它就可以正常工作。所有七列信息都完美地进入了datagridviewC# 如何编写SQL查询以返回数据库中每年今天(月和日)的所有“历史记录”?,c#,sql-server,visual-studio,C#,Sql Server,Visual Studio,我已经使用VisualStudio、C和SQLServer 8个月了,我已经创建了一个非常实用的个人项目。但是,在我的程序中有一点我想要的功能,我不能自动工作,那就是 如果我在ButtonClick事件中输入这个,运行程序,然后单击History按钮,它就可以正常工作。所有七列信息都完美地进入了datagridview SqlDataAdapter sda = new SqlDataAdapter("SELECT * FROM AllConcertList WHERE Date LIKE '%%
SqlDataAdapter sda = new SqlDataAdapter("SELECT * FROM AllConcertList WHERE Date LIKE '%%%%-05-27' ORDER BY DATE DESC; ", conn);
然而,不可怕的是,我想写一个查询,这样我就可以按下一个按钮历史记录,它将返回5月27日的信息,或者任何今天的日期实际上是每年的信息,而我就是不知道怎么做。这是历史上发生的一件事
显然,我需要保留所有音乐会列表中的SELECT*,其中日期。。。不知何故,我需要包括GETDATE,否则程序如何知道从05-27开始?但是我觉得我需要包括DATEFROMPARTS,因为我只希望月和日是静态的,不管今天的实际日期是什么。它一定是其中的一个子查询。您可以动态获取今天的月份和日期,然后构建查询字符串
DateTime today = DateTime.Today;
String sql = String.Format("SELECT * FROM AllConcertList WHERE Date LIKE '%%%%-{0}' ORDER BY DATE DESC;", today.ToString("MM-dd"));
SqlDataAdapter sda = new SqlDataAdapter(sql, conn);
为了显示最佳实践,使用相同的查询,但已参数化
DateTime today = DateTime.Today;
SqlCommand cmd = new SqlCommand("SELECT * FROM AllConcertList WHERE Date LIKE @monthDate ORDER BY DATE DESC;", conn);
cmd.Parameters.AddWithValue("@monthDate", "%%%%-" + today.ToString("MM-dd"));
您应该能够根据系统的GETDATE值使用简单的月和日函数。这就是你要找的吗
select
ACL.*
from
AllConcertList ACL
where
month( ACL.Date ) = month( getdate())
and day( ACL.Date ) = day( getdate())
order by
ACL.Date desc
无参数,无sql注入但请使用非动态生成的字符串。这可能不适用于所有日期格式,例如YDM.Dale Burrell,提到的问题是针对个人项目。使用SqlParameter没有任何好处,因为该参数不是从用户输入中检索的,因为它总是已知的。@zwbetz正是这种想法使得SQL注入如此流行。在没有参数的情况下,几乎不应该这样做。如果有很强的理由,那就考虑一下。但这里没有强有力的理由。向OP展示谁显然是初学者,因此可能渴望学习正确、安全的方法。这就把这个解决方案不能可靠工作的问题放在一边,但这是一个不同的问题——我之前的评论提到了这一点。但最佳实践也是如此,而不是这里闻到的最糟糕的实践。名称不正确的Date列的数据类型是什么?它看起来像varchar,因为如果查询是不同的,那么查询将由于转换错误而失败。如果是这样的话,那么你真的应该重新考虑这个决定。不,不是瓦查尔。数据类型是date。感谢您的评论。没有用于注射的文本框。所有这一切都是一个按钮,当点击时,它直接从数据库中提取信息,并将其全部放入数据网格。但是,我绝对会插入你的建议,并尝试它们。非常感谢您抽出时间!