【问题标题】:putting a table values in datagridview filtered by date将表值放在按日期过滤的datagridview中
【发布时间】:2022-01-01 20:50:30
【问题描述】:

使用 ado.net 并尝试按日期过滤网格视图,但不断出现错误。

string query1 = $"Select * from buy Where [date] >= {dmy} and [date] < {dmyplus}";
            SqlConnection connection1 = new SqlConnection(ConnetionPath4);
            SqlDataAdapter adapter1 = new SqlDataAdapter(query1, connection1);
            DataTable data1 = new DataTable();
            adapter1.Fill(data1);

顺便说一下 dmy 和 dmyplus 是 var dmy="'2021/21/11'" var dmyplus="'2021/22/11'"

我的错误是“将 varchar 数据类型转换为 datetime 数据类型导致值超出范围”

【问题讨论】:

  • dmy 和 dmyplus 是字符串还是日期时间变量?
  • 请使用参数化查询 - 通过连接等方式构建 SQL 查询是灾难的根源。它不仅是许多难以调试的语法错误的来源,而且还是 SQL Injection attacks 的大门。
  • dmy 和 dmyplus 是字符串
  • 我知道注入攻击我只是将这个应用程序构建为一个拼贴项目,在这种情况下安全性并不重要
  • @benyamindashtestani 尤其是在大学项目中很重要。因为当您以错误的方式学习时,您很可能会以错误的方式没有理由永远使用参数化语句。安全不是一切。正如我所提到的,参数化语句有助于防止我在 stackoverflow 上看到的大约 90% 的 SQL 错误 - 很可能包括您的并且它们可能会提高性能. TL;DR:使用它们。

标签: c# date gridview datatable


【解决方案1】:

嗨,我终于破解了密码?

我的错误在于 dmy 和 dmyplus。它们就像 yy-dd-mm。 只需以这种语法 yy-mm-dd 将日期放入其中。它解决了我的问题。 上帝我在此之前几乎尝试了所有东西。 我从早上 8 点到现在的下午 5 点一直在研究它。? 顺便感谢您的帮助。

【讨论】:

  • 我不想吹毛求疵 - 但正是这样参数化语句永远不会发生。
  • @FranzGleichmann 是的,我知道我也尝试过,但我收到了另一个错误,我知道使用参数会更好更安全,但这对我来说没有必要,因为在我的表单中用户不会能够写任何东西并且整个操作是自动的,所以我不担心sql注入。但我仍然感谢您的建议。谢谢
猜你喜欢
  • 1970-01-01
  • 2020-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-21
  • 1970-01-01
  • 1970-01-01
  • 2022-01-18
相关资源
最近更新 更多