如何在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()
代替
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);