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.