PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como passar o parâmetro para uma função postgre e obter dados usando ExecuteReader?


Sem estrutura de entidade, você precisa escrever o código que lê os valores do leitor de dados em uma instância de seu 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;
}

Observe que o tipo de retorno da função foi alterado para AccountInfo , anteriormente string. Além disso, está limitado a ler apenas um registro, se uma chamada para sms.get_accounts_info poderia retornar mais de um registro, é uma história diferente. Eu apenas assumi que account_number é uma chave primária em account_holders tabela.

Alguns detalhes precisam de sua atenção, por exemplo, balance é dinheiro no banco de dados, mas string na classe. Também não sabia se e como product (banco de dados) e accountType (classe) corresponderia, então eu o omiti.

Conexões de banco de dados, comandos e leitores de dados são IDisposable e deve ser envolvido em using blocos.