簡體   English   中英

如何使用函數即postgres中的存儲過程在數據庫中插入數據列表

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

我已經給出了需要插入的應用程序列表,但在聲明如下並使用 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'......

結果為:42883:函數 spinsertapplicationexternalinfrausers(_app_name_externalinfra => 字符變化 [],_user_email => 字符變化,_role_name => 字符變化,isaad_user => 布爾值,isaed_user => 布爾值) 不存在

請對此提供幫助

要在 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返回帶有查詢結果的對象。

如果您的查詢返回數據集,您可以使用普通數據讀取器返回結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM