如何使用函数在数据库中插入数据列表,即postgres中的存储过程



我已经给出了需要插入的应用程序列表,但在如下声明并用42883执行显示后:函数spinsertapplicationexternalinfrausers(_app_name_externalinfra=>character variation[],_user_email=>character variation,_role_name=>character variating,isaad_user=>boolean,isaed_user=>boolean(不存在错误

Dal.InsertApplicationExternalUser(listapplications.ToArray(), appuser);                           
ShowMessage("Data inserted successfully", MessageType.Success);
-----------------

In DataAccesslayer :  public void InsertApplicationExternalUser(string[] appnames,ApplicationUsers appuser)
{
con = new NpgsqlConnection(cs);
con.Open();
using (NpgsqlTransaction tran = con.BeginTransaction())
{
cmd = new NpgsqlCommand("spinsertapplicationexternalinfrausers", con);                
cmd.CommandType = CommandType.StoredProcedure;

cmd.Parameters.AddWithValue("_app_name_externalinfra", NpgsqlDbType.Array | NpgsqlDbType.Varchar, appnames);              
cmd.Parameters.AddWithValue("_user_email", NpgsqlDbType.Varchar, appuser.User_email);
cmd.Parameters.AddWithValue("_role_name", NpgsqlDbType.Varchar, appuser.Role_Name);
cmd.Parameters.AddWithValue("isaad_user", NpgsqlDbType.Boolean, appuser.isAAD_User);
cmd.Parameters.AddWithValue("isaed_user", NpgsqlDbType.Boolean, appuser.isAED_user);
cmd.ExecuteNonQuery();
tran.Commit();
---------------------------------------
Function created is as like:
CREATE OR REPLACE FUNCTION public.spinsertapplicationexternalinfrausers(
_app_name_externalinfra character varying,
_user_email character varying,
_role_name character varying,
isaad_user boolean,
isaed_user boolean)
RETURNS void
LANGUAGE 'plpgsql'......

结果为:42883:函数spinsertapplicationexternalinfrausers(_app_name_externalinfra=>character variation[],_user_email=>character variation,_role_name=>character variating,isaad_user=>boolean,isaed_user=>boolean(不存在

请在这个上提供帮助

要在PostgreSQL和C#中调用函数或存储过程,您不会像使用大多数ADO.net适配器那样使用CommandType.StoredProcedure;您只需像在SQL IDE中使用callselect那样调用它。既然你的例子是一个函数,它应该看起来像这样:

cmd = new NpgsqlCommand("select spinsertapplicationexternalinfrausers(:app, :user, :role, :isaad, :isaed", con);
cmd.Parameters.AddWithValue("app", NpgsqlDbType.Array | NpgsqlDbType.Varchar, appnames);              
cmd.Parameters.AddWithValue("user", NpgsqlDbType.Varchar, appuser.User_email);
cmd.Parameters.AddWithValue("role", NpgsqlDbType.Varchar, appuser.Role_Name);
cmd.Parameters.AddWithValue("isaad", NpgsqlDbType.Boolean, appuser.isAAD_User);
cmd.Parameters.AddWithValue("isaed", NpgsqlDbType.Boolean, appuser.isAED_user);
cmd.ExecuteNonQuery();

您没有询问,但如果函数返回的不是void,则可以使用ExecuteScalar返回带有查询结果的对象。

如果查询返回数据集,则可以使用普通的数据读取器返回结果。

最新更新