Zonder entiteitsframework moet u de code schrijven die de waarden uit de datareader leest in een instantie van uw AccountInfo
klas:
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;
}
Merk op dat het retourtype van de functie is gewijzigd in AccountInfo
, eerder string. Het is ook beperkt tot het lezen van slechts één record, als één aanroep naar sms.get_accounts_info
meer dan één record zou kunnen retourneren, is een ander verhaal. Ik ging er gewoon vanuit dat account_number
is een primaire sleutel in de account_holders
tafel.
Sommige details hebben uw aandacht nodig, bijvoorbeeld balance
is geld in de database, maar string in de klas. Ook wist ik niet of en hoe product
(database) en accountType
(klas) zou overeenkomen, dus heb ik het weggelaten.
Databaseverbindingen, opdrachten en datalezers zijn IDisposable
en moet worden ingepakt in using
blokken.