PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come passare il parametro a una funzione postgre e ottenere dati utilizzando ExecuteReader?

Senza il framework di entità, devi scrivere il codice che legge i valori dal lettore di dati in un'istanza del tuo AccountInfo classe:

public static AccountInfo GetAccountInfo(string accountNumber)
{
    AccountInfo result = null;
    using(var conn = new NpgsqlConnection("..."))
    {
        conn.Open();
        using(var command = new NpgsqlCommand("SELECT * FROM sms.get_accounts_info(@AccountNumber); ", conn))
        {
            command.Parameters.AddWithValue("@AccountNumber", accountNumber);
            using(var dr = command.ExecuteReader())
            {
                if(dr.HasRows && dr.Read())
                {
                    result = new AccountInfo { 
                        accountNumber = dr["accountNumber"].ToString(),
                        balance = dr["balance"].ToString(),
                        interestRate = Convert.ToInt32(dr["interestRate"]),
                        accountName = dr["accountName"].ToString()
                    };
                }
            }
        }
    }
    return result;
}

Nota che il tipo restituito della funzione è stato modificato in AccountInfo , in precedenza stringa. Inoltre, è limitato alla lettura di un solo record, Se una chiamata a sms.get_accounts_info potrebbe restituire più di un record, è una storia diversa. Ho solo supposto che account_number è una chiave primaria in account_holders tabella.

Alcuni dettagli richiedono la tua attenzione, ad esempio balance è denaro nel database, ma stringa nella classe. Inoltre non sapevo se e come product (database) e accountType (classe) corrisponderebbe, quindi l'ho omesso.

Le connessioni al database, i comandi e i lettori di dati sono IDisposable e dovrebbe essere racchiuso in using blocchi.