C# 如何使用Npgsql和PostgreSQL执行out参数?

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,

我正在学习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,
    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中?