简体   繁体   English

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

[英]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我已经给出了需要插入的应用程序列表,但在声明如下并使用 42883 执行显示后:函数 spinsertapplicationexternalinfrausers(_app_name_externalinfra => 字符变化 [],_user_email => 字符变化,_role_name => 字符变化,isaad_user => 布尔值, 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'......

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结果为:42883:函数 spinsertapplicationexternalinfrausers(_app_name_externalinfra => 字符变化 [],_user_email => 字符变化,_role_name => 字符变化,isaad_user => 布尔值,isaed_user => 布尔值) 不存在

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;要在 PostgreSQL 和 C# 中调用函数或存储过程,不要像大多数 ADO.net 适配器那样使用CommandType.StoredProcedure you simply call it as you would in a SQL IDE using call or select .您只需像在 SQL IDE 中一样使用callselect调用它。 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.您没有询问,但如果您的函数返回 void 以外的内容,您可以使用ExecuteScalar返回带有查询结果的对象。

If your query returns a dataset, you can use a normal data reader to return the results.如果您的查询返回数据集,您可以使用普通数据读取器返回结果。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何使用C#中的存储过程在Oracle数据库中插入数据? - How to insert data in oracle database using stored procedure in c#? 使用LIST插入存储过程 - INSERT using LIST into Stored Procedure 在“提交”按钮中放置什么以将数据插入数据库? 我正在使用存储过程。 C# - What to put in the “Commit” button to insert data to the database? I am using stored procedure. C# 如何使用存储过程将数据快速插入SQL Server - How to insert data quickly into SQL Server using a stored procedure 如何使用LINQ用INSERT调用存储过程? - How can I call a stored procedure with INSERT using LINQ? 如何将对象列表插入mysql存储过程 - How to insert a list of object to mysql stored procedure 使用输入输出存储过程进行数据插入 - data insert using input output stored procedure 如何将列表中的模型插入存储过程 - How to insert model from list into stored procedure 我想调用存储过程以使用 netcore 实体框架 5 向数据库插入一些值,存储过程在 pgadmin 中完美运行 - I want call stored procedure to insert some value to database using netcore entity framework 5 , the stored procedure work perfectly in pgadmin 如何使用Entity Framework 6将数据列表传递给存储过程 - How to pass a list of data to a stored procedure, using Entity Framework 6
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM