【发布时间】: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