Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何编写SQL查询以返回数据库中每年今天(月和日)的所有“历史记录”?_C#_Sql Server_Visual Studio - Fatal编程技术网

C# 如何编写SQL查询以返回数据库中每年今天(月和日)的所有“历史记录”?

C# 如何编写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 '%%

我已经使用VisualStudio、C和SQLServer 8个月了,我已经创建了一个非常实用的个人项目。但是,在我的程序中有一点我想要的功能,我不能自动工作,那就是

如果我在ButtonClick事件中输入这个,运行程序,然后单击History按钮,它就可以正常工作。所有七列信息都完美地进入了datagridview

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。感谢您的评论。没有用于注射的文本框。所有这一切都是一个按钮,当点击时,它直接从数据库中提取信息,并将其全部放入数据网格。但是,我绝对会插入你的建议,并尝试它们。非常感谢您抽出时间!