【问题标题】:Conversion failed when converting a character string into a date or time将字符串转换为日期或时间时转换失败
【发布时间】:2015-05-04 13:28:24
【问题描述】:

我使用的表有 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);

【问题讨论】:

    标签: sql sql-server datetime


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      日期值需要使用参数:

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

      【讨论】:

        【解决方案3】:

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

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

        为了明确。

        【讨论】:

        • 它将在非美国系统上中断
        • 不应该。 ToString("dd/MMM/yyyy") 强制月份部分不是三个字符字母,例如:JAN、FEB、MAR 等和 4 位数字,因此 SQL Server 将始终将其解释为月份和年份本地系统日期时间格式。 @Landscape Penguin 上面的答案 (ToString("ddMMyy")) 在非美国系统中不起作用,尽管日期和月份仍然不明确。
        猜你喜欢
        • 1970-01-01
        • 2012-04-17
        • 2017-12-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多