C# 如何使用Npgsql和PostgreSQL执行out参数?
我正在学习Npgsql和PostgreSQL。我无法正确定义输出参数。我做错了什么 以下是函数:C# 如何使用Npgsql和PostgreSQL执行out参数?,c#,postgresql,npgsql,C#,Postgresql,Npgsql,我正在学习Npgsql和PostgreSQL。我无法正确定义输出参数。我做错了什么 以下是函数: CREATE OR REPLACE FUNCTION Insert_Customer_WithOutputParameter( IN _FirstName character varying DEFAULT NULL::character varying, IN _LastName character varying DEFAULT NULL::character varying,
CREATE OR REPLACE FUNCTION Insert_Customer_WithOutputParameter(
IN _FirstName character varying DEFAULT NULL::character varying,
IN _LastName character varying DEFAULT NULL::character varying,
OUT _CustomerID integer)
RETURNS integer as
$BODY$
BEGIN
INSERT INTO Customers (FirstName, LastName) VALUES (_FirstName, _LastName);
SELECT _CustomerID = lastval();
END
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
代码如下:
[Test]
public void ExecuteNonQuerySproc()
{
NpgsqlConnection conn = new NpgsqlConnection("Host=localhost; Database=postgres; User ID=postgres; Password=password");
conn.Open();
IDbCommand command = conn.CreateCommand();
command.CommandText = "Insert_Customer_WithOutputParameter";
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add(new NpgsqlParameter("@FirstName", "John"));
command.Parameters.Add(new NpgsqlParameter("@LastName", "Smith"));
NpgsqlParameter outParm = new NpgsqlParameter("@CustomerID", NpgsqlDbType.Integer)
{
Direction = ParameterDirection.Output
};
command.Parameters.Add(outParm);
command.ExecuteNonQuery();
conn.Close();
Console.WriteLine(outParm.Value);
}
以下是我收到的错误消息:
Npgsql.NpgsqlException:错误:42601:查询没有结果数据的目标
SELECT _CustomerID = lastval();
将其替换为一个简单的:
_CustomerID = lastval();
请注意,Npgsql当前仅按位置绑定参数,而不按名称绑定参数。这意味着您在npgsqlparmeter实例中给出的名称没有任何意义-它们的添加顺序必须与函数的声明相对应。Npgsql 3.1将支持函数参数的命名绑定(请参阅)。请参阅:无法检查,但可能:将lastval()选择到\u CustomerID中?