Utan entitetsramverk måste du skriva koden som läser värdena från dataläsaren i en instans av din AccountInfo
klass:
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;
}
Observera att returtypen för funktionen har ändrats till AccountInfo
, tidigare sträng. Det är också begränsat till att bara läsa en post, Om ett anrop till sms.get_accounts_info
kan returnera mer än en skiva, det är en annan historia. Jag antog bara att account_number
är en primärnyckel i account_holders
bord.
Vissa detaljer behöver din uppmärksamhet, till exempel balance
är pengar i databasen, men sträng i klassen. Jag visste inte heller om och hur product
(databas) och accountType
(klass) skulle överensstämma, så jag utelämnade det.
Databasanslutningar, kommandon och dataläsare är IDisposable
och bör lindas in i using
block.