sql >> Databáze >  >> RDS >> PostgreSQL

Jak předat parametr postgre funkci a získat data pomocí ExecuteReader?

Bez rámce entity musíte napsat kód, který čte hodnoty ze čtečky dat, do instance vašeho AccountInfo třída:

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

Všimněte si, že návratový typ funkce byl změněn na AccountInfo , dříve řetězec. Také je omezeno na čtení pouze jednoho záznamu, pokud jedno volání na sms.get_accounts_info mohl vrátit více než jeden záznam, to je jiný příběh. Předpokládal jsem, že account_number je primární klíč v account_holders tabulka.

Některé detaily vyžadují vaši pozornost, například balance jsou peníze v databázi, ale řetězec ve třídě. Také jsem nevěděl, zda a jak product (databáze) a accountType (třída) by odpovídalo, tak jsem to vynechal.

Databázová připojení, příkazy a čtečky dat jsou IDisposable a měl by být zabalen do using bloky.




  1. problémy při pokusu o obnovení šifrované databáze

  2. Uložená procedura serveru SQL vrátí tabulku

  3. Jaký mysql ovladač mám použít s pružinou/hibernací?

  4. django connec mysql --_mysql_exceptions.OperationalError:(2006, <NULL>)