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

Hvordan sender man parameteren til en postgre-funktion og får data ved hjælp af ExecuteReader?

Uden entity framework skal du skrive koden, der læser værdierne fra datalæseren ind i en instans af din AccountInfo klasse:

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;
}

Bemærk, at funktionens returtype er blevet ændret til AccountInfo , tidligere streng. Det er også begrænset til kun at læse én post, hvis man ringer til sms.get_accounts_info kunne returnere mere end én plade, er det en anden historie. Jeg gik lige ud fra, at account_number er en primær nøgle i account_holders tabel.

Nogle detaljer kræver din opmærksomhed, for eksempel balance er penge i databasen, men streng i klassen. Jeg vidste heller ikke, om og hvordan product (database) og accountType (klasse) ville svare, så jeg udelod det.

Databaseforbindelser, kommandoer og datalæsere er IDisposable og skal pakkes ind i using blokerer.




  1. MySQL-replikering og GTID-baseret failover - et dybt dyk ned i fejlagtige transaktioner

  2. Tilføj DATE- og TIME-felter for at få DATETIME-feltet i MySQL

  3. Sammenligning af fuldtekstsøgemaskine - Lucene, Sphinx, Postgresql, MySQL?

  4. mysql timediff til timer