You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MSSQL Server DateTime字段更新失败,ASP.NET MVC传参报错咨询

解决SQL Server日期更新的语法错误问题

嘿,这个问题我太熟了!你遇到的报错完全是因为直接把DateTime对象拼进SQL字符串导致的——.NET默认输出的日期格式(比如29.04.2019 15:25:58)在SQL Server眼里根本不是合法的日期值,它会把.当成语法分隔符,所以才会抛出Incorrect syntax near '.2019'的错误。

下面给你两种解决方案,优先推荐第一种:

1. 最佳实践:使用参数化查询(安全+无格式问题)

直接拼接字符串不仅会踩格式坑,还存在SQL注入的巨大风险——万一model.Id是用户可控的输入,恶意攻击者能轻易篡改你的SQL逻辑。参数化查询能同时解决这两个问题,让SQL Server自动处理类型转换:

DateTime lastUpdate = DateTime.Now;
// 用占位符代替直接拼接的值
string sql = "UPDATE com.[Ticket] SET Updated = @UpdatedDate WHERE [Id] = @TicketId";

using (SqlConnection conn = new SqlConnection(你的连接字符串))
{
    conn.Open();
    using (SqlCommand cmd = new SqlCommand(sql, conn))
    {
        // 添加参数并赋值,SQL Server会自动处理日期格式
        cmd.Parameters.AddWithValue("@UpdatedDate", lastUpdate);
        cmd.Parameters.AddWithValue("@TicketId", model.Id);
        // 执行更新
        cmd.ExecuteNonQuery();
    }
}

这种方式完全不需要你手动格式化日期,还能彻底杜绝SQL注入,是生产环境的标准写法。

2. 应急方案:手动格式化日期(不推荐)

如果你暂时没法改用参数化查询,那必须把日期格式化成SQL Server能识别的格式,并且用单引号包裹日期值:

DateTime lastUpdate = DateTime.Now;
// 格式化为SQL Server支持的标准格式
string formattedDate = lastUpdate.ToString("yyyy-MM-dd HH:mm:ss");
// 注意给日期加单引号
string sql = $"UPDATE com.[Ticket] SET Updated = '{formattedDate}' WHERE [Id] = {model.Id}";

⚠️ 再次提醒:这种做法依然存在SQL注入风险,只适合临时测试场景,绝不能用在生产环境里。

补充一点:你的Updated字段是datetime类型,SQL Server支持的合法日期格式包括yyyy-MM-dd、yyyyMMdd或者ISO8601格式(比如yyyy-MM-ddTHH:mm:ss),只要用单引号包裹,并且格式正确,就能被正确识别。

内容的提问来源于stack exchange,提问作者Jack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:28:56