DateTime.TryParseExact不会在out参数中返回值吗?

时间:2011-08-11 10:40:54

标签: c# mysql datetime

下面提到的问题已经解决,代码已经更改以反映更改。

我想根据存储在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命令,但我找不到任何。

3 个答案:

答案 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);

这样您就可以忽略之前定义的所有处理逻辑。