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

Spe*_*ssa 8 c# postgresql plpgsql

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

所以首先是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);

            }
Run Code Online (Sandbox Code Playgroud)

现在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
Run Code Online (Sandbox Code Playgroud)

所以,当我尝试运行它时,

Console.WriteLine(cmd.Parameters["sum"].Value);
Run Code Online (Sandbox Code Playgroud)

将为空且["sum"].值为NULL.我究竟做错了什么?我是对的,当我说"sum"是一个OUT变量时,我不需要返回吗?

请帮忙.

求助了,谢谢大家!@Patrick给了我正确的答案: 使用ExecuteScalar()而不是ExecuteNonQuery()

Pat*_*ick 6

代替

command.ExecuteNonQuery();
Run Code Online (Sandbox Code Playgroud)

你应该打电话

Object res = command.ExecuteScalar();
Console.WriteLine(res);
Run Code Online (Sandbox Code Playgroud)