sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur skickar man parametern till en postgre-funktion och hämtar data med ExecuteReader?

Utan entitetsramverk måste du skriva koden som läser värdena från dataläsaren i en instans av din AccountInfo klass:

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

Observera att returtypen för funktionen har ändrats till AccountInfo , tidigare sträng. Det är också begränsat till att bara läsa en post, Om ett anrop till sms.get_accounts_info kan returnera mer än en skiva, det är en annan historia. Jag antog bara att account_number är en primärnyckel i account_holders bord.

Vissa detaljer behöver din uppmärksamhet, till exempel balance är pengar i databasen, men sträng i klassen. Jag visste inte heller om och hur product (databas) och accountType (klass) skulle överensstämma, så jag utelämnade det.

Databasanslutningar, kommandon och dataläsare är IDisposable och bör lindas in i using block.




  1. SQL JOIN för att hitta poster som inte har en matchande post med ett specifikt värde

  2. Hur gör man MySQL medveten om multi-byte-tecken i LIKE och REGEXP?

  3. ORA-01653:det går inte att utöka tabellen med i tabellutrymmet ORA-06512

  4. plsql hämta tabellen i triggern "före ändra".