我有问题,我在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);
}
现在是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()
答案 0 :(得分:6)
而不是
command.ExecuteNonQuery();
你应该致电
Object res = command.ExecuteScalar();
Console.WriteLine(res);
答案 1 :(得分:1)
您是否尝试过运行此代码,例如command.ExecuteNonQuery()?因为您在没有实际执行查询的情况下读取值。
connection.Open();
command.ExecuteNonQuery();
int result = (int) cmd.Parameters["sum"].Value;
Console.WriteLine(result);