Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.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# “中间”不起作用,代码中的错误在哪里?_C#_Mysql_Date - Fatal编程技术网

C# “中间”不起作用,代码中的错误在哪里?

C# “中间”不起作用,代码中的错误在哪里?,c#,mysql,date,C#,Mysql,Date,我想寻求帮助,因为出于某种原因,带BETWEEN的SQL子句对我不起作用-我得到0个结果 插入记录时,我将日期存储为: .. commandObject.Parameters.Add("date", c.Found.Date); 我的问题是,这种方法永远不会奏效: commandObject.Parameters.Add("from", dateTimePicker_FROM.Value.Date.ToShortDateString());

我想寻求帮助,因为出于某种原因,带BETWEEN的SQL子句对我不起作用-我得到0个结果

插入记录时,我将日期存储为:

..
commandObject.Parameters.Add("date", c.Found.Date);
我的问题是,这种方法永远不会奏效:

 commandObject.Parameters.Add("from", dateTimePicker_FROM.Value.Date.ToShortDateString());
                    commandObject.Parameters.Add("to", dateTimePicker_TO.Value.Date.ToShortDateString());
                    commandObject.CommandText = "Select * from Persons WHERE Date BETWEEN @from AND @to";

其他选择等工作正常。

在MySQL中使用带日期的BETWEEN条件时,请确保使用CAST函数将值显式转换为日期

以下日期示例使用BETWEEN条件检索日期范围内的值:

挑选* 来自示例 其中,订单日期介于铸造“2021-01-19”作为日期和铸造“2021-01-20”作为日期之间


更多信息请访问:

您希望将日期作为日期而不是字符串传递:

 commandObject.Parameters.Add("from", dateTimePicker_FROM.Value.Date);

我不太清楚为什么要存储日期并设置日期参数,但在搜索时使用字符串而不是日期

你说:

commandObject.Parameters.Add("date", c.Found.Date);
这似乎不可靠;我不记得有一个重载的Add,假设你使用了一个字符串和一个值,你是说AddWithValue吗

我假设:

你的意思是说AddWithValue 您的查询看起来像`插入T值…,@date。。。 参数日期用于存储日期、日期时间或时间戳的列 c、 Found是一个c datetime,您可以使用Date属性将时间设置为午夜 假设c.Found是2020-01-02 12:34:56,这意味着您的表应该以2020-01-02 00:00:00结束

现在将选择器设置为2020-01-01和2020-01-03

按如下方式运行搜索:

SELECT * FROM t WHERE date BETWEEN @f AND @t
将参数设置为:

commandObject.Parameters.AddWithValue("@f", fromPicker.Value.Date);
commandObject.Parameters.AddWithValue("@f", toPicker.Value.Date);
也就是说,让它们成为日期,而不是字符串

它会起作用的


在范围的两端都包含中间值,因此“从选择器”或“到选择器”可以是2020-01-02,并且仍然会拾取。考虑日期像整数,时间像小数。2020-01-02 00:00:00像2.0,2020-01-02 18:00:00像2.75,2020-01-03 00:00:00像3.0。这意味着在2020-01-02和2020-01-03之间,将在这些日期的午夜拾取任何内容,而在这两个日期之间的任何内容,就像在2和3之间,将为您提供带有2、2.5、3的行。。。但是它不会给你3.5,同样,如果中间值在2020-01-03结束,它也不会给你2020-01-03 12:00:00,你能给我们看一下c.Date.toSortDateString的输出吗?你能解释一下吗?并提供一些样本数据?不过,我的第一个瞎猜来自ToSortDateString——为什么在数据库中使用字符串而不是日期时间?它们有不同的比较行为,您通常需要datetime。@TimBiegeleisen在调试时,这会存储在参数中:{1/19/2021 12:00:00 AM}使用此CONVERTdatetime,@fromIn MySQL,日期必须是'y-m-d',日期时间必须是'y-m-d h:i:s'谢谢,语法有效,但我仍然得到0个结果:您不需要此强制转换;MySQL将“yyyy-MM-dd”格式的字符串理解为datesThanks,我理解了,但仍然不工作。谢谢,我使用嵌入式sqldatabase,添加参数对的唯一方法是Add。没有方法AddWithValue。您可以调整建议以使用Add,然后。。或者发布更多关于您使用的确切信息。您给出的唯一线索是标记mysql,因此我选择mysql建议