【发布时间】:2015-09-23 06:57:53
【问题描述】:
我有一个问题,我在 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);
}
现在是数据库的代码:
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"].Value 为 NULL。我究竟做错了什么?我说得对吗,当我说“sum”是一个 OUT 变量时,我不需要返回?
请帮忙。
已解决,谢谢大家! @Patrick 给了我正确的答案: 使用 ExecuteScalar() 而不是 ExecuteNonQuery()
【问题讨论】:
-
你真的在执行命令吗?我在你的代码中看不到...
-
with command 是指函数吗?是的,我有,但我认为这不是问题?
DbCommand command = connection.CreateCommand(); command.CommandText = "t2"; command.CommandType = CommandType.StoredProcedure; -
现在编辑了完整的代码 ;)
-
我的意思是你的“命令”对象。您需要在打开连接后运行以“执行”开头的方法之一(抱歉,不记得是哪一个);这就是实际在数据库上运行查询的位...
-
哦,你的意思是
command.ExecuteNonQuery();?刚加了,试过了,还是不行。
标签: c# postgresql plpgsql