【问题标题】:Getting date from SQL Server using users input through winform [closed]使用用户通过winform输入从SQL Server获取日期[关闭]
【发布时间】:2023-03-26 02:39:02
【问题描述】:

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

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 而不是日期的关键字
  • 感谢您的回复。史蒂夫的询问解决了我的问题。我会调查你提到的这些事情。

标签: c# winforms sql-server-express


【解决方案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

    【讨论】:

      猜你喜欢
      • 2020-10-13
      • 1970-01-01
      • 1970-01-01
      • 2020-04-24
      • 2013-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多