Bez struktury encji musisz napisać kod, który odczytuje wartości z czytnika danych do instancji Twojego AccountInfo
klasa:
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;
}
Zauważ, że zwracany typ funkcji został zmieniony na AccountInfo
, poprzednio ciąg. Ponadto ogranicza się do odczytu tylko jednego rekordu, jeśli jedno wywołanie sms.get_accounts_info
może zwrócić więcej niż jedną płytę, to inna historia. Po prostu założyłem, że account_number
jest kluczem podstawowym w account_holders
tabela.
Niektóre szczegóły wymagają Twojej uwagi, na przykład balance
to pieniądze w bazie danych, ale string w klasie. Nie wiedziałem też, czy i jak product
(baza danych) i accountType
(klasa) będzie odpowiadać, więc pominąłem to.
Połączenia z bazą danych, polecenia i czytniki danych są IDisposable
i powinien być opakowany w using
bloki.