PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie übergebe ich den Parameter an eine Postgre-Funktion und rufe Daten mit ExecuteReader ab?

Ohne Entity Framework müssen Sie den Code, der die Werte aus dem Datareader liest, in eine Instanz Ihrer AccountInfo schreiben 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;
}

Beachten Sie, dass der Rückgabetyp der Funktion in AccountInfo geändert wurde , zuvor Zeichenfolge. Außerdem ist es darauf beschränkt, nur einen Datensatz zu lesen, wenn man sms.get_accounts_info aufruft könnte mehr als einen Datensatz zurückgeben, es ist eine andere Geschichte. Ich habe einfach angenommen, dass account_number ist ein Primärschlüssel in account_holders Tabelle.

Einige Details erfordern Ihre Aufmerksamkeit, zum Beispiel balance ist Geld in der Datenbank, aber String in der Klasse. Auch wusste ich nicht ob und wie product (Datenbank) und accountType (Klasse) entspräche, also habe ich es weggelassen.

Datenbankverbindungen, Befehle und Datenleser sind IDisposable und sollte in using eingeschlossen werden Blöcke.