Sql 将字符串转换为日期或时间时,转换失败

Sql 将字符串转换为日期或时间时,转换失败,sql,sql-server,datetime,Sql,Sql Server,Datetime,我使用的表有3个nvarchar(MAX)列和1个datetime列。我在执行以下insert语句时遇到此错误:- 将字符串转换为日期或时间时,转换失败 首先,我可能会对所有这些变量使用参数,因为连接的字符串有点乱 其次,根据我的经验,SQL对日期/时间字符串的格式比编程语言更挑剔。您可以尝试执行类似于date.ToString(“ddMMyy”)的操作,也许可以针对特定数据库和要存储的精度级别使用更合适的格式字符串。这很可能是因为默认日期格式的布局 SQL Server无法判断“2015年4月

我使用的表有3个
nvarchar(MAX)
列和1个
datetime
列。我在执行以下insert语句时遇到此错误:-

将字符串转换为日期或时间时,转换失败


首先,我可能会对所有这些变量使用参数,因为连接的字符串有点乱


其次,根据我的经验,SQL对日期/时间字符串的格式比编程语言更挑剔。您可以尝试执行类似于
date.ToString(“ddMMyy”)
的操作,也许可以针对特定数据库和要存储的精度级别使用更合适的格式字符串。

这很可能是因为默认日期格式的布局

SQL Server无法判断“2015年4月1日”是4月1日还是1月4日

更改此行:

SqlCommand cmd = new SqlCommand("insert into chats values('" + chatFrom + "','" + chatTo + "',@msg,'"+ date.ToString("dd/MMM/yyyy") +"')", conn);
cmd.Parameters.Add("msg", msg);

要使其明确无误。

您需要为日期值使用参数:

 DateTime date = System.DateTime.Now;        
 SqlCommand cmd = new SqlCommand("insert into chats values('" + chatFrom + "','" + chatTo + "',@msg, @date)", conn);
cmd.Parameters.Add("msg", msg);
cmd.Parameters.Add(new SqlParameter("@date", SqlDbType.DateTime).Value = date);

它会在非美国系统上崩溃,但不应该。ToString(“dd/MMM/yyyy”)强制月份部分为三个字符的字母,例如:一月、二月、三月等,年份为4位,因此SQL Server将始终将其解释为月份和年份,而不管本地系统日期时间格式如何@上述景观企鹅的答案(ToString(“ddMMyy”))在非美国系统中不起作用,尽管日期和月份仍然不明确。
 DateTime date = System.DateTime.Now;        
 SqlCommand cmd = new SqlCommand("insert into chats values('" + chatFrom + "','" + chatTo + "',@msg, @date)", conn);
cmd.Parameters.Add("msg", msg);
cmd.Parameters.Add(new SqlParameter("@date", SqlDbType.DateTime).Value = date);