【问题标题】:Do you know how to make comparison between Datetime in Sql and datetimepicker in C#?你知道如何比较 Sql 中的 Datetime 和 C# 中的 datetimepicker 吗?
【发布时间】:2021-03-24 14:50:08
【问题描述】:

我有一个数据网格视图,其中包含一些学生的信息,我想过滤数据以仅显示出生日期大于 datetimePicker1 且小于 datetimePicker2 的学生,这些学生是之前在我的表单中创建的。这是我的代码应用 SqlDataAdapter 但它根本不起作用:

SqlDataAdapter adap = new SqlDataAdapter("select * from Student where bdate >= '" + dateTimePicker1.Value + "' and bdate <= '" + dateTimePicker2.Value + "' ", mydb.getConnection);
DataTable table = new DataTable();
adap.Fill(table);
dataGridViewStudentList.DataSource = table;

*bdate 是我数据库中的一列,其中包含日期时间类型的学生的生日。 任何人都可以提供帮助,非常感谢。

【问题讨论】:

  • 您忘记提及bdate 列的数据类型是什么。您将其视为字符串。是吗?在这种情况下,请更改为日期。
  • 始终使用参数化 sql 并避免字符串连接向 sql 语句添加值。这可以缓解 SQL 注入漏洞并确保将值正确传递给语句。请参阅 How can I add user-supplied input to an SQL statement?Exploits of a Mom。使用DateTime 可能不会构成注入威胁,但由于实例在连接期间如何转换为字符串,它仍然可能导致问题。
  • bdate 的类型是 Datetime 并且它不起作用,即使我在 sql 中使用 cast 函数将 datetimepicker1.value 转换为 Datetime 它仍然不起作用
  • DateTimePicker1.Value(正如控件的名称所暗示的)已经属于 DateTime 类型。您需要使用命令参数将值传递给查询(使用[Command].Parameters.Add(),而不是[Command].Parameters.AddWithValue())。
  • 非常感谢@Jimi 它有效

标签: c# winforms ado.net


【解决方案1】:

我想我知道你的问题是什么。 您需要一个 sqlcommand 或 sqlselect,并且您必须添加一个 datetime 类型的参数,然后您必须分配您的 datetimepicker 值。

Getting values between from and to date from datetimepicker

【讨论】:

    猜你喜欢
    • 2021-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-06
    • 1970-01-01
    相关资源
    最近更新 更多