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.