简体   繁体   中英

How to Insert list of data in the database by using function i.e,stored procedure in postgres

I have given list of applications that needs to be inserted but after declaring as below and executing displays with 42883: function spinsertapplicationexternalinfrausers(_app_name_externalinfra => character varying[], _user_email => character varying, _role_name => character varying, isaad_user => boolean, isaed_user => boolean) does not exist error

 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'......

Resulted with :42883: function spinsertapplicationexternalinfrausers(_app_name_externalinfra => character varying[], _user_email => character varying, _role_name => character varying, isaad_user => boolean, isaed_user => boolean) does not exist

Kindly help on this

To invoke a function or stored procedure in PostgreSQL and C#, you don't use CommandType.StoredProcedure like you would with most ADO.net adapters; you simply call it as you would in a SQL IDE using call or select . Since your example is a function, it should look something like this:

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();

You didn't ask, but if your function returns something other than void, you can use ExecuteScalar to return an object with the result of the query.

If your query returns a dataset, you can use a normal data reader to return the results.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM