我正在将PostgreSQL pgadmin4(4.16v)与ASP.NET应用程序一起使用。我创建了一个定义如下的过程:
CREATE OR REPLACE PROCEDURE public.usp_bind(
)
LANGUAGE 'plpgsql'
AS $BODY$
BEGIN
select district_id,district_name from district_master order by district_name;
END;
$BODY$;
我从asp.net应用程序调用了上面的过程,代码如下:
NpgsqlConnection conn = new NpgsqlConnection();
NpgsqlDataAdapter da = new NpgsqlDataAdapter();
NpgsqlCommand cmd = new NpgsqlCommand();
DataSet ds = new DataSet();
public string dbconstr = dbConnectstr.Connectionstring();
public DataSet getDatafunction(string procedure_, [Optional] string flag_)
{
using (conn = new NpgsqlConnection(dbconstr))
{
//conn.Open();
using (da = new NpgsqlDataAdapter())
{
da.SelectCommand.CommandType = CommandType.StoredProcedure;
da.SelectCommand.CommandText = "CALL usp_bind";
da.SelectCommand.Connection = conn;
using (ds = new DataSet())
{
da.Fill(ds);
}
}
//conn.Close();
}
return ds;
}
它给我一个错误,因为-42809:'usp_bind'是一个过程。
我也可以使用一种CALL
方法来调用它,但是没有用。从ASP.NET应用程序调用过程的确切方法是什么?
不要CommandType.StoredProcedure
在您的命令上设置。
不幸的是,存储过程是新的,并且CommandType.StoredProcedure
已经被用来调用函数,而在这一点上进行更改将是一个重大的重大变化。
我的功能只能通过使用
CommandType.StoredProcedure
首先,请确保您了解PostgreSQL存储过程和函数之间的区别-这是两件事(前者
CALL
通过调用,后者通过调用SELECT * FROM
)。CommandType.StoredProcedure
生成SELECT * FROM
,因此只能与函数混淆地使用;它也不会做任何您不能做的事:您可以仅创建一个常规命令而无需设置CommandType,并将CommandText设置为SELECT * FROM my_func(params...)
。