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

如何将C#(ASP.NET Core) DateTime保存到PostgreSQL Date类型

解决Npgsql传递DateTime到PostgreSQL Date类型参数的函数匹配问题

我之前也碰到过完全一样的坑!当你用C#的DateTime传参给PostgreSQL的date类型参数时,Npgsql默认的类型映射会把DateTime转换成PostgreSQL的timestamp类型,这就导致数据库找不到参数类型匹配的函数——哪怕你取了DateTime.Date属性也没用,因为Date返回的还是一个DateTime对象(时间部分为00:00),Npgsql依然会按timestamp来解析它。

给你几个亲测有效的解决方法:

  • 显式指定参数的NpgsqlDbType
    直接在创建参数时指定类型为NpgsqlDbType.Date,强制Npgsql按date类型传递:

    var cmd = new NpgsqlCommand("your_function_name", connection);
    cmd.CommandType = CommandType.StoredProcedure;
    // 关键:指定参数类型为Date
    cmd.Parameters.Add(new NpgsqlParameter("your_date_param", NpgsqlDbType.Date) 
    { 
        Value = yourDateTimeVariable.Date 
    });
    
  • 使用Npgsql专属的NpgsqlDate类型
    Npgsql提供了专门对应PostgreSQL date类型的NpgsqlDate结构体,用它来传参就不会有类型映射混淆的问题:

    var npgsqlDate = NpgsqlDate.FromDateTime(yourDateTimeVariable);
    cmd.Parameters.AddWithValue("your_date_param", npgsqlDate);
    
  • 最后再检查一遍函数定义
    确认你的PostgreSQL函数参数确实是date类型,而不是timestamp或者其他类型,同时检查参数的顺序和数量是否和你代码中传递的完全一致——有时候重载函数或者参数顺序错了也会抛出这个异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:05:23