Uden entity framework skal du skrive koden, der læser værdierne fra datalæseren ind i en instans af din AccountInfo
klasse:
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;
}
Bemærk, at funktionens returtype er blevet ændret til AccountInfo
, tidligere streng. Det er også begrænset til kun at læse én post, hvis man ringer til sms.get_accounts_info
kunne returnere mere end én plade, er det en anden historie. Jeg gik lige ud fra, at account_number
er en primær nøgle i account_holders
tabel.
Nogle detaljer kræver din opmærksomhed, for eksempel balance
er penge i databasen, men streng i klassen. Jeg vidste heller ikke, om og hvordan product
(database) og accountType
(klasse) ville svare, så jeg udelod det.
Databaseforbindelser, kommandoer og datalæsere er IDisposable
og skal pakkes ind i using
blokerer.