PostgreSQL 存储过程因 Dapper 中的日期动态参数而失败

问题描述 投票:0回答:1

我正在将 PostgreSQL 与 .NET 项目结合使用,并且在使用动态参数传递 DATE 参数时,通过 Dapper 执行存储过程时遇到问题。

存储过程定义如下:

CREATE OR REPLACE PROCEDURE simplemenuproc(
    appcode IN VARCHAR, 
    myDtTm DATE, 
    ref1 INOUT REFCURSOR
)
LANGUAGE plpgsql
AS $BODY$
-- Procedure body
$BODY$;

这是我用来调用它的 C# 代码:

NpgsqlTransaction tran = connection.BeginTransaction();
var parameters = new DynamicParameters();
parameters.Add("appcode", "PPM", direction: ParameterDirection.Input);
parameters.Add("myDtTm", DateOnly.Parse(DateTime.UtcNow.ToString("yyyy-MM-dd")), DbType.Date, direction: ParameterDirection.Input);
parameters.Add("ref1", direction: ParameterDirection.InputOutput);

// Execute the stored procedure
await connection.ExecuteAsync(storedProcedureName, parameters, commandType: CommandType.StoredProcedure);

当我尝试执行此操作时,遇到以下错误:

42883: procedure simplemenuproc(appcode => text, myDtTm => date, ref1 => unknown) does not exist

我尝试过的 更改日期参数的传递方式:

parameters.Add("myDtTm", DateTime.UtcNow.Date, direction: ParameterDirection.Input);

这导致:

42883: procedure simplemenuproc(appcode => text, myDtTm => timestamp with time zone, ref1 => unknown) does not exist

验证存储过程名称和参数类型。 myDtTm参数定义为DATE,但传递时似乎数据类型不匹配。

我的环境 数据库:PostgreSQL ORM:短小精悍 驱动程序:Npgsql

问题

如何使用 Dapper 和 Npgsql 中的动态参数正确地将 DATE 参数传递到 PostgreSQL 存储过程? 为什么参数类型看似匹配却找不到过程?

.net postgresql asp.net-web-api dapper npgsql
1个回答
-1
投票

如果你现在需要就可以做

SELECT NOW() AT TIME ZONE 'UTC' AS utc_now;

在.net

NpgsqlTransaction tran = connection.BeginTransaction();
var parameters = new DynamicParameters();
parameters.Add("appcode", "PPM", direction: ParameterDirection.Input);
parameters.Add("myDtTm", DateTime.UtcNow.Date, DbType.Date, direction: ParameterDirection.Input);
parameters.Add("ref1", direction: ParameterDirection.InputOutput);

// Execute the stored procedure
await connection.ExecuteAsync(storedProcedureName, parameters, commandType: CommandType.StoredProcedure);
© www.soinside.com 2019 - 2024. All rights reserved.