下面提到的问题已经解决,代码已经更改以反映更改。
我想根据存储在MySQL数据库中的日期检查当前日期。检索当前日期我正在使用nist时间服务器,该服务器以MM-DD-YYYY格式返回日期,在我的数据库中,我有以“YYYY-MM-DD”格式存储的值。我想要做的是检查我通过的日期是否等于数据库中的日期,然后做一些事情。
我使用的代码如下:
// The code originally posted has been changed to reflect changes made and it is now working fine (problem solved) a big thank you to all those who replied.
DateTime currentDate = InternetTime();
//DD/MM/YYYY is returned here convert to YYYY/MM/DD
string currentDate = x.ToString("yyyy-MM-dd");
con = new MySqlConnection(conString);
MySqlDataAdapter da = new MySqlDataAdapter();
MySqlCommand cmd = new MySqlCommand("SELECT id AS oDates FROM open_dates WHERE dates=?currentDate",con);
cmd.Parameters.AddWithValue("?currentDate",currentDate);
da.SelectCommand = cmd;
DataTable dt = new DataTable("openDates");
da.Fill(dt);
“dt”表保持为空,因为TryParseExact没有向dateValue写任何内容,所以它仍然是“01-01-0001”或类似的东西。我哪里错了?如果有人能帮助我会很棒。 实际上有一个我想到的解决方法;我可以立即在数据库中存储字符串,然后检查它们,但那会是作弊;我希望日期有效。 我尝试搜索可以帮助我的MySQL命令,但我找不到任何。
答案 0 :(得分:6)
你忽略了DateTime.TryParseExact
的结果。它几乎肯定会返回false
,表明它无法解析字符串 - 并且记录了在这种情况下将DateTime.MinValue
写入out参数。你应该肯定检查返回值,并在解析失败时采取相应的行动。
我怀疑顺便说一下你想要一个格式字符串“yyyy-MM-dd”。
请注意,不应直接在以下行中包含SQL字符串中的日期 - 您应该使用参数化查询。
实际上,您不应该将x
转换为字符串 - 它已经是DateTime
,那么为什么要将它转换为字符串然后解析呢?您的评论表明您认为DateTime
值具有特定格式 - 它不会比数字更多 - 格式与值如何转换为文本相关,并且isn'价值本身固有的。
答案 1 :(得分:1)
将所有DateTime跳过字符串并返回转换并使用参数。您应该始终使用参数,因为将参数转换为字符串是繁重的工作,并且您很容易受到SQL injection攻击。
DateTime currentDate = InternetTime().Date;
MySqlDataAdapter da = new MySqlDataAdapter();
MySqlCommand cmd = new MySqlCommand(
"SELECT id, dates AS oDates FROM open_dates WHERE dates=?currentDate", connection);
cmd.Parameters.Add("?currentDate", MySqlDbTypes.DateTime, currentDate);
da.SelectCommand = cmd;
DataTable dt = new DataTable("openDates");
da.Fill(dt);
您还可以准备一次SqlCommand / DataAdapter,并在每次需要时更改参数的值:
da.SelectCommand.Parameters["?currentDate"] = currentDate;
答案 2 :(得分:0)
首先,你为什么要做所有这些交换。它会更容易说:
string currentDate = x.ToString("yyyy-MM-dd"); // This gives you the format that you need
其次,您的格式YYYY-MM-DD无效。它应该是ToString()中指定的yyyy-MM-dd。
第三,如果您确实希望将日期存储为字符串,请在使用
生成的SQL语句中对其进行格式化MySqlDataAdapter da = new MySqlDataAdapter("SELECT id,dates AS oDates FROM open_dates WHERE dates=DATE("+x.ToString("yyyy-MM-dd")+");", con);
这样您就可以忽略之前定义的所有处理逻辑。