Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL DATEDIFF函数返回错误的值_Sql_Sql Server_Vb.net - Fatal编程技术网

SQL DATEDIFF函数返回错误的值

SQL DATEDIFF函数返回错误的值,sql,sql-server,vb.net,Sql,Sql Server,Vb.net,我正在执行下面的sql语句,以使用日期差作为条件来获取和值。“t_QueryDemand”是表名,“DESIRED_SHIP_DATE”是我与当前系统日期比较的值。但是,我总是得到一个日期差高于44100,即使实际差异是0-60之间。所需的装运日期数据类型为datetime2(7)。我正在使用MS SQL server数据库。可能是什么问题 Dim curDate As Date = Date.Today() Dim strSql7DayDemand As date= "SELECT

我正在执行下面的sql语句,以使用日期差作为条件来获取和值。“t_QueryDemand”是表名,“DESIRED_SHIP_DATE”是我与当前系统日期比较的值。但是,我总是得到一个日期差高于44100,即使实际差异是0-60之间。所需的装运日期数据类型为datetime2(7)。我正在使用MS SQL server数据库。可能是什么问题

Dim curDate As Date = Date.Today()

Dim strSql7DayDemand As date= "SELECT SUM(ORDER_QTY) AS ORDQTY, (TOTAL_SHIPPED_QTY) AS SHIPQTY, DATEDIFF(day," & curDate & ",DESIRED_SHIP_DATE),DESIRED_SHIP_DATE as DIFF from t_QueryDemand where ID='" & Trim(txtPartID.Text) & "' AND DATEDIFF(DAY," & curDate & ",DESIRED_SHIP_DATE) >" & 

使用SQL函数GETDATE()而不是使用注入

这将在服务器上计算日期,而不是像当前那样在本地计算

正如已经指出的,您有一个严重的安全漏洞——您需要使用参数化查询,而不是字符串连接,否则容易受到SQL注入攻击


它还将使您的代码更加健壮--现在您有了txtPartID.Text,您只是将其放入查询中,但是如果有人在该字段中输入了非数字--您现在无法捕获它。使用数值类型的参数化查询,当您将数据项转换为数字时,您将发现此问题。

学习使用参数!我毫不怀疑,如果你传递了一个日期和时间数据类型参数,而不是不安全地注入
curDate
(和
txtPartID.Text
),这将正常工作。参数能解决问题吗?很可能,还有你的巨大安全漏洞,@lakshithadilhan。事实上,再看一眼,我可以肯定地说,它会的。我会努力的。感谢无法解决另一个注入问题:
“…ID=”&Trim(txtPartID.Text)&“…”
在这里参数化唯一正确的答案。@Larnu--好了--我解决了您的问题。可能永远不会被OP.@lakshithadilhan读到——在堆栈溢出问题上,我们交换了更多的选票。如果一个答案对你有帮助,你应该投票支持它——如果它回答了你的问题,你可以通过点击复选标记将其标记为已回答。两者都没问题:)祝你好运
DATEDIFF(day,GETDATE(),DESIRED_SHIP_DATE)