c和sql转换之间的日期问题

本文关键字:日期 问题 之间 转换 sql | 更新日期: 2023-09-27 18:26:28

所以我有一个字符串"09/15/2014",在c#中它将其转换为日期:

DateTime from = Convert.ToDateTime(fromdate);

它输出"2014年9月15日",当我将其发送到sql时,我得到的是:

select convert(varchar, '9/1/2014 12:00:00 AM', 101) 

这对我不起作用,因为我需要保持任何前导零。

帮助?

c和sql转换之间的日期问题

如果您担心Sql Server中日期的字符串格式,那么您做得不对。正如对另一个答案的注释所示,SQL Server在内部以机器优化的数字格式存储所有日期,这种格式不容易被人类读取。它只会将它们转换为人类可以理解的格式,以便在开发人员工具中输出。

向Sql Server发送日期时,始终使用查询参数。事实上,在Sql语句中将任何类型的任何数据发送到Sql Server时,始终使用查询参数。任何其他操作不仅会导致格式化问题,比如这里的问题,还会让您非常容易受到sql注入攻击。如果您发现自己在使用字符串操作将任何类型的数据从客户端代码中包含到SQL字符串中,请离开键盘,去问真正的程序员如何正确执行。如果这听起来很侮辱人,那是因为很难低估这个问题的重要性和认真对待它的必要性。

从Sql Server检索日期时,大多数情况下只应选择日期时间字段。让客户端代码担心如何格式化它。你想要前导零吗?太棒了Sql Datetime列在C#中的某个时刻将作为.Net Datetime值可用,您可以在客户端使用Datetime的.ToString()方法或其他格式选项将该值转换为您想要的值

SQL查询使用的日期和时间格式如下:

2014-09-15

那是年月日。根据下面的评论,这可能会有所不同,这取决于你在数据库中的排序规则(请参阅Scott的评论,以获得更准确的描述方式,并将日期转换为这种格式)。

DateTime的ToString方法有一个重载,它接受一个格式化字符串。这样你就可以传递你想要输出字符串的格式

string queryDate = from.ToString("yyyy-MM-dd");

看看你得到了什么。在查询中使用它。

但如果你真的想把这件事做好,那就使用参数。类似:

SqlCommand command = new Command(connection, "SELECT * FROM foo WHERE someDate = @date");
command.Parameters.AddWithValue("@date", from);
// where "from" is your DateTime variable from the code you've shown.

这将省去DateTime到String转换的麻烦。