使用用户通过winform输入从SQL Server获取日期[关闭]

Posted

技术标签:

【中文标题】使用用户通过winform输入从SQL Server获取日期[关闭]【英文标题】:Getting date from SQL Server using users input through winform [closed] 【发布时间】:2017-12-07 15:37:31 【问题描述】:

我应该从用户那里获取日期,然后找到该日期之前的所有日期。

DateTime dat = dateTimePicker1.Value.Date;
string datS = dat1.ToString("yyyy-MM-dd");
string query = "SELECT * FROM test3table WHERE datum" + 
                  " <= " + "datum LIKE '%' + @Datum + '%'";
// '2017-12-06'   -> works fine
SqlCommand comm = new SqlCommand(query, conn);
comm.Parameters.AddWithValue("@Datum", datS);

语法有问题还是不能这样做?

【问题讨论】:

你在哪里执行查询.. 编辑它以显示所有相关代码还对如何构造正确的参数化查询进行谷歌搜索,并在使用日期&gt;= &lt;= and BetweenLIKE 时阅读以下内容是最适合 Strings or Characters 而不是日期的关键字 感谢您的回复。史蒂夫的询问解决了我的问题。我会调查你提到的这些事情。 【参考方案1】:
        DateTime dat = dateTimePicker1.Value.Date;

        string query = "SELECT * FROM test3table WHERE datum <= @Datum";

        SqlCommand comm = new SqlCommand(query, conn);
        comm.Parameters.AddWithValue("@Datum", dat );

将您的列类型更改为DateTime,以免在转换为字符串和返回时遇到麻烦。然后你就可以做上面的事情了。

【讨论】:

【参考方案2】:

您的 SQL 查询语法不正确。我相信你需要的是这样的:

string query = "SELECT * FROM test3table WHERE datum" +
               " < '" + @Datum + "'";

这应该构造一个如下所示的 SQL 查询:

SELECT * FROM test3table WHERE datum < '2017-12-06'

请注意,我将您的 &lt;= 运算符更改为 &lt; 以符合您对“该日期之前的所有日期”的声明需求。

还请记住,如果 datum 的类型为 DATETIME,则日期值将使用午夜时间进行评估。所以2017-12-06 读作2017-12-06 00:00

【讨论】:

以上是关于使用用户通过winform输入从SQL Server获取日期[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

sql serve基础

SQL注入在winforms中有效吗?

如何在WinForm应用程序中持续监视用户输入

如何根据用户输入从 SQL 表中删除项目?

什么是SQL+Serve+2014的一种实用工具?

sql serve数据库基础入门