如何在c#中返回postgresql函数的结果?控制台输出为空

本文关键字:结果 控制台 输出 函数 postgresql 返回 | 更新日期: 2023-09-27 18:01:20

我有一个问题,我有一个函数在postgresql计算两个整数,应该返回结果到c# (npgsql)控制台,我不知道我的错误在哪里,因为调试器没有对我说什么,这是有帮助的。

首先是c#的代码和函数的代码

                ...
            cmd.Parameters["x"].Value = 20;
            cmd.Parameters["y"].Value = 22;
            connection.Open();
            if (connection.State == System.Data.ConnectionState.Open) {
                //Console.WriteLine(cmd.Parameters["x"].Value);
                command.ExecuteNonQuery();
                Console.WriteLine(cmd.Parameters["sum"].Value);
            }

,现在是DB的代码:

CREATE OR REPLACE FUNCTION t2(
    IN x integer,
    IN y integer,
    OUT sum integer)
  RETURNS integer AS
$BODY$BEGIN
    sum := x + y;
    INSERT INTO  t2 (x, y, sum) values (x, y, sum);
END

所以当我试着运行它时,

Console.WriteLine(cmd.Parameters["sum"].Value);

为空,["sum"]为空。值为NULL。我做错了什么?我是对的,当我说"sum"是一个OUT变量,我不需要返回?

请帮助。

解决了,谢谢大家!@Patrick给了我正确的答案:使用ExecuteScalar()代替ExecuteNonQuery()

如何在c#中返回postgresql函数的结果?控制台输出为空

代替

command.ExecuteNonQuery();

你应该调用

Object res = command.ExecuteScalar();
Console.WriteLine(res);

您是否尝试运行以下代码,例如command.ExecuteNonQuery() ?因为你正在读取一个值,而没有实际执行查询。

connection.Open();
command.ExecuteNonQuery();
int result = (int) cmd.Parameters["sum"].Value;
Console.WriteLine(result);