2015-05-04 104 views
0

我正在使用的表有3列nvarchar(MAX)列和1 datetime列。我得到当我执行以下插入语句此错误: -将字符串转换为日期或时间时转换失败

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

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

回答

1

首先,我可能会使用的参数自串联字符串以来所有这些变量都有点混乱。

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

-1

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

SQL Server无法判断'01/04/2015'是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); 

为了使其明确。

+0

这不是一个unambigous日期格式 – ErikEJ

+0

这是怎么回事日期格式不明确? – Molloch

+0

它会在非美国系统中崩溃 – ErikEJ

0

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

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); 
相关问题