Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.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
C# 如何搜索小于或大于X的日期_C#_Asp.net_Sql - Fatal编程技术网

C# 如何搜索小于或大于X的日期

C# 如何搜索小于或大于X的日期,c#,asp.net,sql,C#,Asp.net,Sql,这是我用来创建按日期范围过滤的自定义报告的代码。第一个标准很好,但是第二个和第三个标准不行。它抛出一个语法错误。谁能告诉我为什么 string cmd = "SELECT PURCHASE_ORDER.cid, PURCHASE_ORDER.deptid, PURCHASE_ORDER.procid, PURCHASE_ORDER.purchase_order_no, PURCHASE_ORDER.requesition_no, PURCHASE_ORDER.contract_no, PURCH

这是我用来创建按日期范围过滤的自定义报告的代码。第一个标准很好,但是第二个和第三个标准不行。它抛出一个语法错误。谁能告诉我为什么

string cmd = "SELECT PURCHASE_ORDER.cid, PURCHASE_ORDER.deptid, PURCHASE_ORDER.procid, PURCHASE_ORDER.purchase_order_no, PURCHASE_ORDER.requesition_no, PURCHASE_ORDER.contract_no, PURCHASE_ORDER.purchase_order_date, COMPANY.company_name,  DEPARTMENT.department_name, PROCUREMENT_METH.method FROM PURCHASE_ORDER INNER JOIN PROCUREMENT_METH ON PURCHASE_ORDER.procid = PROCUREMENT_METH.procid INNER JOIN COMPANY ON PURCHASE_ORDER.cid = COMPANY.cid INNER JOIN DEPARTMENT ON PURCHASE_ORDER.deptid = DEPARTMENT.deptid WHERE PURCHASE_ORDER.deptid = DEPARTMENT.deptid";

// Check Criteras
if (!string.IsNullOrWhiteSpace(ddlDepartment.Text) && !ddlDepartment.Text.Equals("0"))
   cmd += " AND PURCHASE_ORDER.deptid LIKE '%" + ddlDepartment.Text + "%' ";

if (!string.IsNullOrWhiteSpace(txtfromdate.Text))
   cmd += "AND PURCHASE_ORDER.purchase_order_date '<" + txtfromdate.Text + "' ";

if (!string.IsNullOrWhiteSpace(txttodate.Text))
   cmd += "AND PURCHASE_ORDER.purchase_order_date '<" + txttodate.Text + "' ";
如果采购订单日期数据库字段的类型为DATETIME,则需要将文本框的内容解析为C日期对象,然后将日期对象转换为SQL标准日期格式

基本的:

另外,我认为您可能希望使用Before SQL操作符来确定从开始日期到结束日期之间的任何采购订单日期。

如果您的采购订单日期数据库字段为DATETIME类型,则需要将文本框的内容解析为C日期对象,然后将日期对象串入SQL标准日期格式

基本的:


另外,我认为您可能希望使用Bevery SQL运算符来确定从开始日期到结束日期之间的任何采购订单日期。

我已修复它。问题出在一个又一个地方

cmd += "AND PURCHASE_ORDER.purchase_order_date '<" + txtfromdate.Text + "'
像这样:

cmd += " AND PURCHASE_ORDER.purchase_order_date <'" + txtfromdate.Text + "'

我修好了。问题出在一个又一个地方

cmd += "AND PURCHASE_ORDER.purchase_order_date '<" + txtfromdate.Text + "'
像这样:

cmd += " AND PURCHASE_ORDER.purchase_order_date <'" + txtfromdate.Text + "'

它确实有助于实际读取生成的SQL,并实际读取语法错误消息

比如说txttodate.Text给出了2014年7月25日的值。下面是您的代码为此生成的内容:

AND PURCHASE_ORDER.purchase_order_date '<25-Jul-2014'
在这种情况下,SQL Server会生成错误消息:


错误102:“附近的语法不正确这确实有助于实际读取生成的SQL,并实际读取语法错误消息

比如说txttodate.Text给出了2014年7月25日的值。下面是您的代码为此生成的内容:

AND PURCHASE_ORDER.purchase_order_date '<25-Jul-2014'
在这种情况下,SQL Server会生成错误消息:



错误102:“您需要使用DateTime.parse(理想情况下是DateTime.TryParse)解析文本框的内容以验证输入。我不确定您的意思。我使用的是日历控件。您需要使用DateTime.parse解析文本框的内容,理想情况下是DateTime.TryParse来验证输入。我不确定您的意思。我使用的是日历控件。那也可以。但对我来说没关系。只是声明没有隔开,这就是它一直失败的原因。对不起that@vt146911如果不验证用户输入是的,包括通过日历控件输入的内容,那么您将面临各种危险,只需使用参数化查询。。。虽然您的建议略好于原始代码,但这仍然是个坏主意。@AlexeiLevenkov我知道这一点,但我知道他不会实现参数化查询,所以hackjob解决方案总比没有好;那也行。但对我来说没关系。只是声明没有隔开,这就是它一直失败的原因。对不起that@vt146911如果不验证用户输入是的,包括通过日历控件输入的内容,那么您将面临各种危险,只需使用参数化查询。。。虽然您的建议略好于原始代码,但这仍然是个坏主意。@AlexeiLevenkov我知道这一点,但我知道他不会实现参数化查询,所以hackjob解决方案总比没有好;我会在第一行加上一个尾随空格,然后从过滤行中去掉前导空格。你放空格的地方没有任何区别。问题是你把操作符放在了字符串中。科里,你是对的,我已经把它修好了,效果很好。谢谢你们——1:这不是一个很好的建议——请不要遵循它。改为使用参数化查询。我会在第一行放一个尾随空格,并从筛选行中删除前导空格。放空格的位置没有任何区别。问题是你把操作符放在了字符串中。科里,你是对的,我已经把它修好了,效果很好。谢谢你们——1:这不是一个很好的建议——请不要遵循它。改为使用参数化查询。这是正确的。我在回答中修正了它。感谢you@vt146911一般来说,除非你正在进行教学练习,否则你不会回答自己的问题。如果有一个答案是正确的,接受这个答案。直到我提交了我的答案,我才看到你的答案。这是正确的。我在回答中修正了它。感谢you@vt146911一般来说,除非你正在进行教学练习,否则你不会回答自己的问题。如果有一个答案是正确的,接受这个答案。直到我提交了我的答案,我才看到你的答案。